编入视频流(内嵌字幕|硬字幕)
要在视频流上面加上字幕,就得使用一个叫做 subtitles
的滤镜,要使用这个滤镜,在命令中写上 -vf subtitles=字幕文件名
,还是要注意,如果文件名包含空格或其他特殊字符,得用半角引号包起来: -vf subtitles="字幕 文件名"
。因为这个操作改写了视频流,所以视频流必须得重新编码。
使用 subtitles
滤镜为视频添加字幕(将字幕合成到视频流中,输出文件中不含字幕流):
ffmpeg -i input.mkv -vf subtitles=subtitles.srt output.mkv
将 input.mkv
中的字幕(默认)嵌入到 output.mp4
文件
ffmpeg -i input.mkv -vf subtitles=input.mkv output.mp4
将 input.mkv
中的字幕(第二个)嵌入到 output.mp4
文件
ffmpeg -i input.mkv -vf subtitles=input.mkv:si=1 output.mp4
关于 subtitles
滤镜的详细用法:http://ffmpeg.org/ffmpeg-all.html#subtitles-1
还可以使用 ass
滤镜,用法和 subtitles
滤镜几乎一样,但它只用于 ASS(Advanced Substation Alpha)字幕文件,可以先进行字幕转换,再使用它:
ffmpeg -i subtitles.srt subtitles.ass
ffmpeg -i input.mkv -vf ass=subtitles.ass output.mp4
关于 ass
滤镜的说明:http://ffmpeg.org/ffmpeg-all.html#ass
在实际使用中发现 ass
和 subtitles
最终效果并无区别,但 ass
只能使用 ASS 字幕文件,不可以直接使用容器中的字幕流,所以直接使用 subtitles
即可,省去了手动提取和转换的过程。
作为字幕流(内封字幕|软字幕)
将字幕封装到容器中,就是所谓的字幕流,和视频流、音频流同等地位。值得说明的是,并非所有的容器都支持字幕流,先进的 MKV 是支持的,MP4 目前我只知道支持苹果的 MOV text。
MKV封装工具:MKVToolNix
MKV提取工具:gMKVExtractGUI、MKVExtractGUI
MKVExtractGUI 无法使用,原因未知
使用图形化工具更方便。以下都是废话
将字幕封装到容器中
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv
从容器中提取字幕流
ffmpeg -i input.mkv output.srt
例子中生成的是 srt 格式的,可以任意生成所需的格式,改一下扩展名即可。
参考:
FFmpeg 官方 Wiki:HowToBurnSubtitlesIntoVideo
本文作者:P3TERX
本文链接:https://p3terx.com/archives/add-captions-to-your-videos-with-ffmpeg.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。