FFmpeg drawtext滤镜boxborderw参数设置不同横竖边框宽度报错问题
FFmpeg drawtext滤镜boxborderw参数设置不同横竖边框宽度报错问题
嘿,我完全懂你遇到的糟心情况——照着官方文档写的boxborderw=20|80格式设置横竖不同的边框宽度,结果直接触发解析失败的报错,确实挺让人摸不着头脑的。
先帮你拆解问题根源:虽然文档里描述了可以用上下边框值|左右边框值这种竖线分隔的写法,但实际在FFmpeg 6.0版本中,boxborderw参数目前仅支持单个数值,也就是上下左右的边框宽度必须统一,文档的描述要么是存在歧义,要么是该功能还未在当前版本实装。
不过别担心,我给你两个可行的替代方案,能实现你想要的横竖边框宽度不同的效果:
方案一:叠加两层drawtext滤镜
通过两层drawtext来模拟差异化边框:第一层只显示宽边框的背景框(对应你要的左右宽边框),第二层叠加带窄边框的文字(对应上下窄边框),具体命令如下:
ffmpeg -i input_video.mp4 -vf " drawtext=text='':box=1:boxcolor=black@0.5:boxborderw=80:x=w-text_w-10:y=10:enable='between(t,3,10)', drawtext=text='Countdown %{eif\:10-t\:d}':box=1:boxcolor=black@0.5:boxborderw=20:fontcolor=white:fontsize=24:x=w-text_w-10:y=10:enable='between(t,3,10)' " -c:a copy output_video.mp4
原理是让第一层的宽边框背景打底,第二层的窄边框文字覆盖在上面,视觉上就达成了左右边框比上下宽的效果。
方案二:用pad滤镜配合drawtext
先给文字层添加定向填充(模拟边框),再将处理后的文字层叠加到原视频上:
ffmpeg -i input_video.mp4 -filter_complex " [0:v]drawtext=text='Countdown %{eif\:10-t\:d}':fontcolor=white:fontsize=24:enable='between(t,3,10)'[txt]; [txt]pad=w=iw+160:h=ih+40:x=0:y=0:color=black@0.5[padded]; [0:v][padded]overlay=x=w-overlay_w-10:y=10:enable='between(t,3,10)' " -c:a copy output_video.mp4
这里pad=w=iw+160是给文字左右各加80的填充(对应左右边框80),h=ih+40是给文字上下各加20的填充(对应上下边框20),最后把带填充的文字层放到原视频的指定位置即可。
另外给你个小建议:以后遇到文档和实际操作不符的情况,可以直接在终端执行ffmpeg -h filter=drawtext,查看本地FFmpeg版本的实时参数说明,这个才是最准确的,能避开文档更新不及时的坑。
备注:内容来源于stack exchange,提问作者user1768741
相关产品推荐
相关产品推荐

