如何使用ffmpeg设置默认字幕

如何使用ffmpeg设置默认字幕

我从视频、音频和.srt文件创建了一个 mp4 文件。

ffmpeg -i video.mp4 -i audio.m4a -i sub.srt -map 0:0 -metadata:s:v:0:0 language=eng -map 1:0 -metadata:s:a:0:0 语言=eng -map 2:0 -metadata:s:s:0:0 language=eng -c copy -codec mov_text out.mp4

它工作正常,但默认情况下不显示字幕。有没有办法让字幕默认显示?

答案1

您可以使用MP4Box 0.6.2-DEV-rev453(2016 年 5 月)或更高版本执行此操作:

mp4box -add xr.mp4 -add xr.en.srt:txtflags=0xC0000000 -new ya.mp4

这会将输出文件中的字幕流标记为强制。然而,此标记仅会被识别 VLC 3.0.0-20161101(2016 年 11 月)。


我看到有人提到这个帖子在 FFmpeg 邮件列表上有关实现 FFmpeg 部署的补丁:

ffmpeg -i xr.mp4 -i xr.en.srt -c copy -c:s mov_text -disposition:s forced ya.mp4

然而,在尝试了“强制”和“默认”后,FFmpeg 标记的字幕不被 VLC 识别为强制。


为了回应评论,这里是使用 MP4Box 0.7.0(2017 年 4 月)和 VLC 3.0.0-20170926(2017 年 9 月)进行的测试。请注意,更新的 VLC 版本存在崩溃问题,即使在没有字幕的视频上也是如此。使用该文件:

youtube-dl --write-auto-sub --format 18 --output xr.mp4 kcs82HnguGc
ffmpeg -i xr.en.vtt xr.en.srt
mp4box -add xr.mp4 -add xr.en.srt:txtflags=0xC0000000 -new ya.mp4

结果:

子

答案2

我不确定这是否被认为是一种解决方法,它需要 vlc + ffmpeg 调整。在vlc中,可以将“eng”设置为subs的默认参数,这里 https://stackoverflow.com/questions/17928192/set-a-subtitle-language-using-ffmpeg ffmpeg 中的“-metadata:s:s:0 language=eng” - 可以为子流设置元数据,因为“eng”在 vlc 3.0.9.2 上尝试过此操作,vlc 选择播放 eng sub

希望这可以帮助

(上面是我寻找“ID 94213 不支持的编解码器”问题的解决方案的部分解决方案。我使用“-sn”将视频/音频/子流重新复制到新的仅视频/音频流中,然后重新-添加相关子流)

相关内容