如何为mp4文件禁用FFmpeg中的非第一音频流/音轨

Dip*_*esh 5 ffmpeg apple-tv

我的最终目标是创建一个FFmpeg命令,将我的h264.DTS.mkv文件转换为与AppleTV兼容的格式,同时保留原始质量。

我快到了,但是我还没弄清楚如何禁用流/音轨。

到目前为止,我已经:

ffmpeg -i FILE \
 -y -strict experimental \
 -map 0:0 -map 0:1 -map 0:1 -map 0:1 -map 0:2 \
 -c:0 copy -c:1 aac -ac:a 2 -c:2 ac3 -ac:a 6 -c:3 copy -c:4 mov_text \
 OUTPUT
Run Code Online (Sandbox Code Playgroud)

这将产生一个输出文件,如下所示:

  1. H264视频轨道(已启用)[从原始副本复制]
  2. AAC 2声道音轨(已启用)
  3. AC3 6声道音轨(启用)
  4. DTS 6声道音轨(启用)[从原始副本复制]
  5. 字幕轨道(启用)

问题是我需要它看起来像:

  1. 1个H264视频轨道(从原始副本复制)(启用)
  2. 1个AAC 2声道音轨(已启用)
  3. 1个AC3 6声道音轨(禁用)
  4. 1个DTS 6声道音轨(从原始副本复制)(已禁用)
  5. 1条字幕轨道(启用)

因此,我需要知道如何禁用非1st音频流/音轨。

据我了解,这是轨道标头原子在“ tkhd.flags”位置的一部分。但是我还不能弄清楚如何通过命令行参数设置它。

任何帮助将不胜感激。

Lor*_*ore 8

你好迪佩什这会解决你的问题。

问题

您想要完成的是标记哪个音频流将是默认的,同时在所有不需要的音频流上否定此标记。当尝试选择默认和/或可能强制的字幕轨道(如果有)时,该解决方案将是类似的。

通用解决方案

FFmpeg 将自动标记所有流,default无需用户干预。因此,我们首先需要标记所有流-default,然后将default所需的流标记为默认流。让我们使用音频流作为示例。

-disposition:a -default -disposition:a:0 default
Run Code Online (Sandbox Code Playgroud)

上述语句的结果将所有音频流-default和第一个音频流标记为default有关其使用的详细信息可以在FFmpeg 文档中的5.4 Main options

找到。

具体解决方案

ffmpeg -i FILE \
 -y -strict experimental \
 -map 0:0 -map 0:1 -map 0:1 -map 0:1 -map 0:2 \
 -c:0 copy -c:1 aac -ac:a 2 -c:2 ac3 -ac:a 6 -c:3 copy -c:4 mov_text \
 -disposition:a -default -disposition:a:0 default \
 OUTPUT
Run Code Online (Sandbox Code Playgroud)

在解决方案中,-disposition:a -default将输出文件中的所有音频流标记为非默认。While-disposition:a:0 default将输出文件中的第一个音频流标记为默认值。


d33*_*ika 2

您是否检查过:http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20use%20-map%20option 只是不要将不需要的流复制到输出。

ffmpeg -i FILE \
 -y -strict experimental \
 -map 0:0 -map 0:1 -map 0:4 \
 -c:0 copy -c:1 aac -ac:a 2 -c:4 mov_text \
 OUTPUT
Run Code Online (Sandbox Code Playgroud)

我希望我正确地回答了你的问题!