我试图使用ffmpeg添加文本字幕到.mp4容器:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
当我试图运行这一行时,它给了我一个错误:
流映射的数量必须匹配输出流的数量。
如果我尝试将mp4更改为mkv(尽管mp4支持文本字幕),就像这样:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
它正确地映射了流,但给出了一个错误:
没有为输出流#0.2找到编码器(编解码器id 94210)
当我启动时
ffmpeg -codecs
我可以看到srt编解码器被支持作为解码器和编码器,但我不确定mp4和mkv子编码使用什么,以及我是否需要打开它或单独编译。
注意:这个解决方案将字幕“烧录”到视频中,这样视频的每个观众都将被迫看到它们。
如果你的ffmpeg在编译时启用了libass,你可以直接这样做:
ffmpeg -i mymovie.mp4 -vf subtitles=subtitles.srt mysubtitledmovie.mp4
例如,对于Ubuntu 20.10,你可以检查ffmpeg——version是否有——enable-libass。
否则,您可以使用libass库(确保您的ffmpeg安装在配置中有这个库——enable-libass)。
首先将字幕转换为。ass格式:
ffmpeg -i subtitles.srt subtitles.ass
然后使用视频过滤器添加它们:
ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4
MKV容器支持视频和音频编解码器,几乎任何东西,也支持字幕和DVD菜单。所以你可以用带有字幕的MKV容器从输入视频复制编解码器到输出视频。首先你应该把SRT转换成ASS字幕格式
ffmpeg -i input.srt input.ass
并在视频中嵌入ASS字幕
ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv
也使用过VMW文件。
ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv
容器格式的比较