我正在尝试使用ffmpeg为视频添加多种语言的字幕。我成功地添加了1种语言,但似乎无法添加第二种语言。我用这个简单的脚本为我的视频添加英文字幕。
ffmpeg -i %1 -i subs_eng.srt -map 0 -vcodec copy -acodec copy -scodec subrip -metadata:s:s:0 language=English "%~n1"_eng.mkv
此外,我运行了另一个脚本来添加荷兰语字幕。
ffmpeg -i %1 -i subs_nl.srt -map 0? -vcodec copy -acodec copy -scodec subrip -metadata:s:s:1 language=Dutch "%~n1"_nl.mkv
但每当我添加第二语言时,它似乎没有任何作用。命令终端显示ffmpeg正在处理视频,但vlc媒体播放器中只有1种字幕语言可用(第一种(。
我真的希望能够在两次拍摄中添加它,而不是在同一个脚本中,因为我的所有视频都没有两种语言。
如果字幕流没有-map
,ffmpeg将从所有输入中只选择一个字幕流。
ffmpeg -i %1 -i subs_nl.srt -map 0 -map 1 -vcodec copy -acodec copy -c:s:0 copy -c:s:1 subrip -metadata:s:s:1 language=Dutch "%~n1"_nl.mkv
我将现有字幕流的编解码器模式设置为copy
,并且仅将新字幕流的subrip
。这是假设您之前只对一个字幕流进行了多路复用。
事实上这更容易。您可以通过在不删除旧字幕的情况下为文件添加字幕
ffmpeg -i input.mkv -i input.srt -map 0 -map 1 -c copy output.mkv
-map x
从一个文件中选择所有流,以便两个文件中的所有流都进入输出文件。如果你添加更多的输入字幕音轨,你需要提供-map 2
、-map 3
等。请参阅非常有意识和简单的Map文档。
现在更棘手的是,如果你想正确地标记这些字幕。您可以添加
-metadata:s:s:0 language=heb -metadata:s:s:0 handler_name=Hebrew -metadata:s:s:0 title=Hebrew
-metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=English -metadata:s:s:1 title=English
但你需要知道最终的映射,这将取决于原始文件ab/字幕的存在。
归功于eladkarako。