使用ffmpeg为一个视频分别添加多个字幕
Use ffmpeg to add multiple subtitles separately to a video
我正在尝试使用 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 media player中只有1种字幕语言(第一种)。
我真的希望能够在 2 次拍摄中添加它,而不是在同一个脚本中添加它,因为我的所有视频都没有两种语言。
如果没有 -map
字幕流,ffmpeg 将 select 所有输入中只有一个字幕流。
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 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
但你需要知道最终的映射将取决于字幕的原始文件ab/presence。
感谢 eladkarako。
我正在尝试使用 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 media player中只有1种字幕语言(第一种)。
我真的希望能够在 2 次拍摄中添加它,而不是在同一个脚本中添加它,因为我的所有视频都没有两种语言。
如果没有 -map
字幕流,ffmpeg 将 select 所有输入中只有一个字幕流。
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 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
但你需要知道最终的映射将取决于字幕的原始文件ab/presence。
感谢 eladkarako。