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

时间:2013-01-18 23:17:59

标签: 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

这将生成一个类似于:

的输出文件
  1. H264视频轨道(启用)[从原件复制]
  2. AAC 2声道音轨(已启用)
  3. AC3 6声道音轨(已启用)
  4. DTS 6声道音轨(启用)[从原件复制]
  5. 字幕轨道(已启用)
  6. 问题是我需要它看起来像:

    1. 1 H264视频轨道(从原件复制)(已启用)
    2. 1 AAC 2声道音轨(已启用)
    3. 1 AC3 6声道音轨(禁用)
    4. 1 DTS 6声道音轨(从原件复制)(禁用)
    5. 1个字幕轨道(已启用)
    6. 因此,我需要知道如何禁用非第一音频流/曲目。

      根据我的阅读,这是“tkhd.flags”位置的轨道标题原子的一部分。但我无法弄清楚如何通过命令行参数设置它。

      非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

Hello Dipesh这将解决您的问题。

问题

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

通用解决方案

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

-disposition:a -default -disposition:a:0 default

上述语句的结果将所有音频流-default和第一个音频流标记为default

有关其使用的详细信息,请参阅 5.4主要选项下的FFmpeg Documentation

特定解决方案

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

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

答案 2 :(得分:1)

禁用音轨并不意味着完全删除它。

看图片

enter image description here