FFMPEG - 转换具有多个音频和字幕的视频

Posted

技术标签:

【中文标题】FFMPEG - 转换具有多个音频和字幕的视频【英文标题】:FFMPEG - convert video with multiple audio and subtitles 【发布时间】:2021-05-27 14:15:57 【问题描述】:

我有一个包含 1x 视频轨道、3x 音频轨道和 2x 字幕轨道的 MKV 视频文件。

现在,我使用下面的代码将视频转换为 x265,但遗憾的是无法控制要转换的音频和字幕。有人可以建议我如何调整语句以使用音轨 #0:3 和副标题 #0:4?

ffmpeg -i INPUT.mkv -c:v libx265 -c:a copy -x265-params crf=25 OUTPUT.mkv

这是.mkv 文件包含的内容:

  Stream #0:0(jpn): Video: h264 (High), yuv420p(progressive), 1280x692 [SAR 1:1 DAR 320:173], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
  Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : English 2.0 channel AAC (Original)
  Stream #0:2(eng): Audio: aac (LC), 48000 Hz, stereo, fltp
    Metadata:
      title           : English 2.0 channel AAC (New)
  Stream #0:3(jpn): Audio: aac (LC), 48000 Hz, stereo, fltp
    Metadata:
      title           : Japanese 2.0 channel AAC
  Stream #0:4(eng): Subtitle: ass (default)
    Metadata:
      title           : Signs/Karaoke [Kametsu]
  Stream #0:5(eng): Subtitle: ass
    Metadata:
      title           : Re-styled [Kametsu]
  Stream #0:6: Attachment: ttf
    Metadata:
      filename        : nyala.ttf
      mimetype        : application/x-truetype-font
  Stream #0:7: Attachment: ttf
    Metadata:
      filename        : fontastique.ttf
      mimetype        : application/x-truetype-font
  Stream #0:8: Attachment: ttf
    Metadata:
      filename        : ARIALNB.TTF
      mimetype        : application/x-truetype-font
  Stream #0:9: Attachment: ttf
    Metadata:
      filename        : BorisBlackBloxx.ttf
      mimetype        : application/x-truetype-font
  Stream #0:10: Attachment: ttf
    Metadata:
      filename        : CODE2000.TTF
      mimetype        : application/x-truetype-font
  Stream #0:11: Attachment: ttf
    Metadata:
      filename        : CronosPro-Semibold.ttf
      mimetype        : application/x-truetype-font
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
  Stream #0:1 -> #0:1 (copy)
  Stream #0:4 -> #0:2 (ass (ssa) -> ass (ssa))

非常感谢

【问题讨论】:

【参考方案1】:

使用-map 选项。这两个命令会做同样的事情,但使用不同的-map 语法:

ffmpeg -i INPUT.mkv -map 0:0 -map 0:3   -map 0:4   -c:v libx265 -c:a copy -c:s copy -x265-params crf=25 OUTPUT.mkv
ffmpeg -i INPUT.mkv -map 0:v -map 0:a:2 -map 0:s:0 -c:v libx265 -c:a copy -c:s copy -x265-params crf=25 OUTPUT.mkv

请参阅FFmpeg Wiki: Map 了解更多信息。

【讨论】:

以上是关于FFMPEG - 转换具有多个音频和字幕的视频的主要内容,如果未能解决你的问题,请参考以下文章

android ffmpeg视频添加字幕和配音

FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式

使用PowerShell和FFMPEG将音频和字幕源条带化并添加到INDEX.M3U8

FFmpegffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )

ffmpeg文档04-流的选择(指定)

FFMPEG 同时编码音频和强制字幕?