将字幕轨道设置为默认的FFmpeg命令

25
通过使用ffmpeg将.ass字幕轨道添加到mkv视频中,它不会被设置为默认轨道,因此在播放时您必须手动打开字幕。是否可以为字幕轨道设置默认标志?
使用的ffmpeg命令:
ffmpeg -i video.mp4 -i subtitles.ass -c:v libx264 -preset veryslow \
 -pix_fmt yuv420p10le -c:a copy -c:s copy output.mkv
请注意,我希望保留.ass字幕格式,而不是像在这个类似的问题中建议的转换成mov_text格式:如何使用ffmpeg设置默认流 可以使用mkvpropedit设置默认标志,方法如下:
mkvpropedit output.mkv --edit track:s1 --set flag-default=1

但是是否有可能使用ffmpeg直接完成这个操作呢?


SO 可能不是這個問題的正確站點,但問題本身是有效的。我有同樣的問題。 - Tobia
2个回答

31

我认为根据这个补丁,现在已经可以实现了。至少对我来说,它可以使用:

ffmpeg -i in.mp4 -i in.srt -c copy -disposition:s:0 default out.mkv

注意:在这种情况下,-disposition:s:0 中的 s 表示 字幕 而不是 。要通过索引选择第二个流,请使用 -disposition:1


5
截至版本3,ffmpeg已经实现了-disposition参数,但尚未记录在文档中。 - Kondybas
5
最近,"-disposition"一词已被记录下来。 - llogan

15

你可以使用“forced”代替默认选项来强制VLC播放它

ffmpeg -f mp4 -i outfile.mp4 -f srt -i VTS_07_0.EnglishV2.srt -c:v copy -c:a copy -metadata:s:a:0 language=Japanese -c:s mov_text -metadata:s:s:0 language=English -disposition:s:s:0 forced mix.mp4

2
谢谢,这个很好用。问题是:为什么要两次使用s字幕标识符,即-disposition:s:s:0而不是-disposition:s:0?我想完全理解你的语法。 - RocketNuts
3
@RocketNuts:第一个s代表“流”,第二个s代表subtitle。这在ffmpeg的-map_metadata开关的文档中有描述。(不过这是针对-metadata的。根据文档,我认为对于-disposition来说这样做是不正确的。) - Nate C-K
"Force"在字幕中是有特殊含义的。它指的是针对非本地语言的对话提供的用于理解的字幕。例如,在一段带有英语音频的视频中,只有非英语对话才会被翻译成英语并显示为“force”。这个视频的字幕包括英语和潜在的非英语对话,则不符合定义,因此如果它是“常规”字幕,我会选择使用default而不是forced。更多信息请参见:https://partnerhelp.netflixstudios.com/hc/en-us/articles/224198488-What-is-a-Forced-Narrative-Subtitle-。 - dropbear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接