7

我的最终目标是创建一个 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. 字幕轨道(启用)

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

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

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

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

任何帮助将不胜感激。

4

3 回答 3

4

您好 Dipesh 这将解决您的问题。

问题

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

通用解决方案

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

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

上面语句的结果将所有音频流-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

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

于 2016-12-16T17:23:24.663 回答
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

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

于 2013-01-21T09:40:48.383 回答
0

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

看图片

在此处输入图像描述

于 2016-05-09T04:31:10.150 回答