使用ffmpeg可以为视频单独添加多个字幕



我正在尝试使用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。

最新更新