使用 ffmpeg 禁用默认字幕轨道
Posted
技术标签:
【中文标题】使用 ffmpeg 禁用默认字幕轨道【英文标题】:Disable default subtitle track with ffmpeg 【发布时间】:2021-01-11 17:49:20 【问题描述】:我正在创建一个包含 4 个不同文件的 MKV 容器:
视频.mp4 audio_en.mp4 audio_es.mp4 字幕.ass为此,我正在使用以下 ffmpeg
脚本:
ffmpeg -i video.mp4 -i audio_es.mp4 -i audio_en.mp4 -i subtitles.ass \
-map 0:v -map 1:a -map 2:a -map 3:s \
-metadata:s:a:0 language=spa \
-metadata:s:a:1 language=eng \
-metadata:s:s:0 language=spa -disposition:s:0 -default \
-default -c:v copy -c:a copy -c:a copy -c:s copy result.mkv
result.mkv
看起来很棒,一切正常,除了一件事:字幕仍然设置为默认轨道,所以像 VLC 这样的播放器会自动显示它们。我已经尝试了很多不同的方法来避免 disposition
标志发生这种情况,但我无法让它发挥作用。
我应该如何修改脚本,使MKV没有标记为default
的字幕轨道?
提前致谢!
【问题讨论】:
【参考方案1】:对于 Matroska (.mkv
) 输出使用 -default_mode
选项:
ffmpeg -i video.mp4 -i audio_es.mp4 -i audio_en.mp4 -i subtitles.ass \
-map 0:v -map 1:a -map 2:a -map 3:s \
-metadata:s:a:0 language=spa \
-metadata:s:a:1 language=eng \
-metadata:s:s:0 language=spa \
-default_mode infer_no_subs \
-c copy result.mkv
此选项需要 FFmpeg 4.3 或更高版本,或使用来自当前 git master 分支的构建。
【讨论】:
非常感谢,按预期工作!我一直试图找到一个多小时的解决方案,甚至没有遇到-default_mode
选项。再次感谢!
@anonymous 比较新,我也不知道(已经不太关注开发了)。
这种行为需要-default_mode infer_no_subs
很奇怪。根据 ffmpeg 文档The default mode is ‘passthrough’
和passthrough
没有设置任何默认配置。我试过-default_mode passthrough
,它也没有设置处置。让我相信 ffmpeg 中的实际默认值是 infer
【参考方案2】:
当您不想更新到 FFmpeg 4.3 时,此存款选项适用于我:
-disposition:s:0 0
此选项覆盖从输入流复制的处置,并通过将其设置为 0 将其删除。
【讨论】:
以上是关于使用 ffmpeg 禁用默认字幕轨道的主要内容,如果未能解决你的问题,请参考以下文章