如何在FFmpeg中将showwaves生成的波形调整至视频底部并解决overlay报错
报错核心原因
overlay 是双输入类型滤镜,需要同时接入两路视频流才能正常工作:
- 输入0(第1路接入的流):作为底层背景
- 输入1(第2路接入的流):作为上层叠加内容
你原命令的滤镜链仅把生成的波形流 [sw] 直接喂给 overlay,这路流只会自动接入到 overlay 的输入0 pad位置,剩下的输入1 pad没有任何流接入,FFmpeg就会抛出「找不到与未标记的输入pad1匹配的流」的报错。另外你的输入仅包含音频文件,没有现成的视频流作为最终视频的底层画布,本身也无法实现把波形移动到指定位置的效果。
波形移到视频底部的调整方案
要实现波形贴在画面底部的效果,只需要补全 overlay 的两路输入即可,处理逻辑如下:
- 生成一路和最终视频尺寸匹配的纯色背景流,作为
overlay的底层输入 - 把音频生成的波形流作为上层叠加内容,接入
overlay的第二个输入pad - 调整
overlay的坐标参数为x=0:y=H-h:其中H是底层背景的总高度,h是波形的固定高度(202),计算后波形的下边缘会刚好和画面下边缘齐平 - 后续再接上文字绘制的滤镜,完成全链路处理
可直接运行的调整后命令
ffmpeg -i security3.mp3 -filter_complex "[0:a]showwaves=s=1280x202:mode=line[wave]; color=c=black:s=1280x720[bg]; [bg][wave]overlay=0:H-h[ovly]; [ovly]drawtext=fontcolor=white:x=10:y=10:text='\"Song Title\" by Artist'[out]" -map "[out]" -map 0:a -c:v libx264 -preset fast -crf 18 -c:a copy output.mp4
参数说明
- 背景尺寸
1280x720可按需调整,比如改成1280x1080,overlay会自动适配坐标计算,无需手动修改位置数值 - 背景色
black可根据需求替换成其他颜色值,也可以换成你自己的本地图片/视频当背景:只需要在命令开头增加-i 你的背景文件路径,把滤镜链里的color生成流替换成对应输入的流标签即可 - 生成的波形默认位置在画面底部,不会遮挡左上角的文字区域,文字位置可根据自己的布局调整
内容的提问来源于stack exchange,提问作者Dooyum Ityav
相关产品推荐
相关产品推荐

