如何用FFMpeg生成视频( 三 )

3.3 视频添加字幕添加完音频后,就可以添加字幕了,关于字幕转换工具,可以自己手写一个,也可以用现成的,比如下面这个:
TXT to SRT Converter
使用起来也非常方便,每一行就是一行字幕,最后设置好起始时间就可以了(不一定与实际朗读匹配):

如何用FFMpeg生成视频

文章插图
 
添加srt字幕的命令如下:
# 拷贝之前生成好的视频$ cp add_audio/audio_recode.mp4 add_caption/input.mp4# 添加字幕$ ffmpeg -i input.mp4 -vf subtitles=input.srt video_with_srt.mp4# 有时候可能会遇到下面的报错:Too many packets buffered for output stream 0:1# 该异常抛出的原因是有些视频数据有问题,导致视频处理过快,容器封装时队列溢出# 可以通过增大容器封装队列大小来解决,比如设置最大封装队列的大小为1024$ ffmpeg -i input.mp4 -vf subtitles=input.srt -max_muxing_queue_size 1024 video_with_srt.mp4 复制代码有时候我们需要自定义字幕的样式,或者字幕的位置,这时可以先把srt字幕转换为ass字幕,再做调整 。如果你安装了FFMpeg,一行命令就能完成转换,如果没有安装,也可以用一些在线工具实现,比如字幕酱 。
FFMpeg转换命令:
$ ffmpeg -i input.srt output.ass复制代码添加ass字幕命令:
$ ffmpeg -i input.mp4 -vf "ass=output.ass" video_with_ass.mp4复制代码最终效果如下:
如何用FFMpeg生成视频

文章插图
 
如果想要控制字幕使用的文字、文字大小、以及显示位置等,则需要修改[V4+ Styles]里面的内容:
# 一共分为两行,第一行是字段名,第二行是字段值# Fontname:字型# Fontsize:字体大小# MarginL:字幕距左边的距离,取值范围是0-PlayResX的数值# MarginR:字幕距右边的距离,取值范围是0-PlayResX的数值# MarginV:字幕高度,取值范围是0-PlayResY的数值[V4+ Styles]Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, EncodingStyle: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0复制代码注:其他参数的说明可参考这篇文章
假设我要把字幕大小改为20、且字幕往上移动,则对应的改动如下:
[V4+ Styles]Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, EncodingStyle: Default,Arial,20,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,50,0复制代码最后重新添加即可:
$ ffmpeg -i input.mp4 -vf "ass=new.ass" video_with_new_ass.mp4复制代码【如何用FFMpeg生成视频】最终效果如下:
如何用FFMpeg生成视频

文章插图
 
写在最后以上就是如何用FFMpeg构建完成视频的全流程了,希望对大家有所帮助!




推荐阅读