如何用FFmpeg在圆角矩形上绘制文字?命令报错求助
FFmpeg绘制圆角矩形并叠加文字的解决方案
你遇到的错误是因为drawbox滤镜本身不支持round参数,该参数不属于drawbox的可选配置项,所以FFmpeg会抛出"Option 'round' not found"的错误。要实现圆角矩形+文字叠加,需要用其他滤镜组合来完成,以下是两种可行方案:
方案一:使用geq滤镜绘制圆角矩形
geq滤镜可以通过像素级计算生成自定义形状,包括圆角矩形。下面的命令会生成两个圆角矩形(顶部白色半透明、底部黑色半透明),再叠加到原视频上,最后添加文字:
ffmpeg -y -i ./video-ready-all.mp4 -filter_complex " # 生成顶部白色圆角矩形(半透明) [0:v]geq='if(lt(dist(min(X,iw),min(Y,40)),20),0.5*255,0)':W=iw:H=40,format=yuva420p[top_round_box]; # 生成底部黑色圆角矩形(半透明) [0:v]geq='if(lt(dist(min(X,iw),min(Y,40)),20),0.5*255,0)':W=iw:H=40,format=yuva420p,colorchannelmixer=rr=0:gg=0:bb=0[bottom_round_box]; # 叠加顶部矩形到原视频 [0:v][top_round_box]overlay=y=0[tmp_video]; # 叠加底部矩形到临时视频 [tmp_video][bottom_round_box]overlay=y=0.5*(ih-40)[final_bg]; # 在底部矩形上叠加文字 [final_bg]drawtext=text='My Text Here':fontcolor=white:fontsize=24:x=(w-tw)/2:y=(0.5*(ih-40))+((40-th)/2)" -c:a copy ./output.mp4
关键参数说明:
geq表达式:dist(min(X,iw),min(Y,40))计算当前像素到矩形四个边角的最短距离,当距离小于20(圆角半径)时,输出半透明的alpha值(0.5*255),否则输出0(完全透明)format=yuva420p:将生成的矩形转换为带alpha通道的像素格式,确保透明度效果正常叠加colorchannelmixer=rr=0:gg=0:bb=0:把白色矩形的RGB通道值设为0,转为黑色,保留原有的alpha透明度drawtext的y坐标:0.5*(ih-40)是底部矩形的Y起始位置,加上(40-th)/2让文字在矩形内垂直居中
方案二:通过lavfi生成圆角矩形流再叠加
先通过lavfi滤镜生成一个独立的圆角矩形视频流,再叠加到原视频上,最后添加文字:
ffmpeg -y -i ./video-ready-all.mp4 -f lavfi -i "color=c=black@0.5:s=%wx40:r=30,geq='if(lt(dist(min(X,iw),min(Y,40)),20),255,0)':W=iw:H=40" -filter_complex " # 叠加圆角矩形到原视频的指定位置 [0:v][1:v]overlay=y=0.5*(ih-40):shortest=1[tmp_video]; # 添加文字 [tmp_video]drawtext=text='My Text Here':fontcolor=white:fontsize=24:x=(w-tw)/2:y=(0.5*(ih-40))+((40-th)/2)" -c:a copy ./output.mp4
关键参数说明:
-f lavfi -i "color=...":生成一个黑色半透明、高度40的视频流,再用geq裁剪出圆角效果shortest=1:确保叠加后的视频长度和原视频一致- 文字位置计算和方案一相同,保证在底部矩形内垂直居中
内容的提问来源于stack exchange,提问作者eugene_prg
相关产品推荐
相关产品推荐

