使用ffmpeg将多个字幕单独添加到视频中

4

我正试图使用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媒体播放器中只有一种字幕语言可用(第一种)。

我真的希望能够分别为两种语言添加字幕,而不是在同一个脚本中添加,因为并不是所有视频都有两种语言的字幕。

2个回答

4

如果没有为字幕流指定 -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

我将现有的字幕流编解码模式设置为“复制”,仅为新的字幕流设置为“Subrip”。这假设您之前混合了一个字幕流。

我不知道我可以复制已经存在的字幕流,非常感谢! - Appa

1

实际上这很容易。您可以通过以下方式向文件添加字幕而无需删除旧字幕:

ffmpeg -i input.mkv -i input.srt -map 0 -map 1 -c copy output.mkv

-map x 选取一个文件中的所有流,因此两个文件中的所有流都将进入输出文件。如果添加了更多的输入字幕轨道,则需要提供 -map 2-map 3 等。请参阅非常明智和简单的Map documentation

现在更棘手的是如何正确地标记这些字幕。您可以添加:

-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

但是你需要知道最终的映射,这将取决于原始文件和字幕的存在。

感谢eladkarako


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