使用 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 禁用默认字幕轨道的主要内容,如果未能解决你的问题,请参考以下文章

在 HTML5 视频中切换隐藏式字幕并禁用默认视频控件

播放视频时默认显示软字幕

是否可以使用带有 ffmpeg 的字幕轨道提取视频轨道中的对话?

FFMPEG - 转换具有多个音频和字幕的视频

ffmpeg 恢复为默认字幕字体

如何使用 ffmpeg 设置默认流