流选择

流选择

我有一个带有两个音频流的视频文件:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:2(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 640 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

有没有办法只禁用其中一个?我真正需要的是获取这样的文件:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

谢谢

答案1

流选择

默认情况下ffmpeg 流选择根据以下标准,每个流类型仅映射一个流:

  • 视频 – 分辨率最高的流
  • 音频 – 频道最多的流
  • 字幕 – 第一个字幕流

在同一类型的多个流的评级相同的情况下,将选择具有最低索引的流。

使用-map选项将覆盖此行为,如下所示。

示例 1:显式映射

ffmpeg通过参考输入流索引来准确告诉您想要什么流:

ffmpeg -i input -map 0:1 -map 0:2 -c copy output
  • -c copy将要流复制(重新多路复用)每个映射流而不是重新编码。

或者使用流说明符

ffmpeg -i input -map 0:v -map 0:a:0 -c copy output
  • 使用流说明符更加灵活,因为你不必知道确切的流索引,并且它可以帮助防止意外映射,例如尝试将视频映射到仅音频格式

  • -map 0:v将从输入 0 映射所有视频流(ffmpeg从 0 开始计数,因此 0 是第一个输入,并且在您的情况下是唯一的输入)。

  • -map 0:a:0将从输入 0 映射第一个音频流。

示例 2:负映射

告诉ffmpeg映射所有内容,然后选择要排除的内容:

ffmpeg -i input -map 0 -map -0:a:1 -c copy output
  • -map 0将从输入 0 映射所有流。

  • -map -0:a:1将从输入 0 中排除第二个音频流。

答案2

您可以使用流说明符来选择流类型和特定流。更多信息请见此处...

http://ffmpeg.org/ffmpeg.html#Stream-specifiers-1

相关内容