如何在ffmpeg中为我的视频添加文字叠加?
即。给定视频“video1.flv”,如何在整个视频中添加“StackOverflow”文本,位于屏幕中间,带有白色文字和边框?
答案 0 :(得分:96)
使用ffmpeg中的drawtext
视频过滤器:
ffmpeg -i input.mp4 -vf drawtext="fontfile=/path/to/font.ttf: \
text='Stack Overflow': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: \
boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2" -codec:a copy output.mp4
@0.5
控制文本框的不透明度。在此示例中,它设置为50%。您可以删除@0.5
,但不会有透明度。
-codec:a copy
将stream copy(重新复用)音频并避免重新编码。
drawtext过滤器的替代方法是使用ASS or SRT subtitles - 特别是如果你想要定时文本或softsubs。
如果您要更新或更改文字,请参阅此过滤条件的textfile
和reload
选项。
此过滤器要求您使用ffmpeg
编译--enable-libfreetype
。如果您获得No such filter: 'drawtext'
,则可能会遗漏--enable-libfreetype
。大多数可用的ffmpeg
静态版本都支持此功能,因此请参阅FFmpeg Download页面获取链接。
有关更多选项和示例,请参阅drawtext filter documentation。
答案 1 :(得分:0)
在 macOS 上,enable='between(t,start_second, end_seconds)' 的语法是不同的。输入应以秒为单位,而不是 hh:mm:ss。
我的 ffmpeg 版本 4.3.1
ffmpeg -i input.mp4 -vf "drawtext=text='My Text':enable='between(t,20,120)': x=(w-text_h)/2: y=(h-text_h)/2: fontsize=32: fontcolor=white: box=1: boxcolor=black@0.5: boxborderw=5:" -c:a copy output.mp4