如何用FFmpeg为视频添加音频可视化叠加层?
用FFmpeg给视频加音频可视化的正确操作
问题根源
你之前的命令错在同时输出了可视化流和原视频流,没把两者合成到一起,导致FFmpeg输出异常,自然看不到可视化效果。
两种实用方案
方案1:可视化当背景,原视频居中显示
把可视化效果作为背景,原视频缩小后放在中间,适合突出可视化的场景:
ffmpeg -stream_loop -1 -i cassette-edit.mp4 -i test-audio.mp3 -filter_complex "[1:a]showwaves=s=1920x1080:mode=line:colors=white:draw=full[visual];[0:v]scale=960x540[vid];[visual][vid]overlay=x=(W-w)/2:y=(H-h)/2[outv]" -shortest -map "[outv]" -map 1:a "Cassette Dreams - w visualizer.mp4" -y
showwaves生成全屏可视化背景scale把原视频缩到合适大小(960x540可以自己改)overlay让原视频居中叠在可视化上
方案2:可视化拼接在原视频底部
不想遮挡原视频内容的话,直接把可视化条拼在视频下方:
ffmpeg -i cassette-edit.mp4 -i test-audio.mp3 -filter_complex "[1:a]showwaves=s=1920x200:mode=line:colors=white:draw=full[visual];[0:v][visual]vstack=inputs=2[outv]" -shortest -map "[outv]" -map 1:a "Cassette Dreams - w visualizer.mp4" -y
showwaves生成窄条可视化(高度200可调整)vstack把原视频和可视化垂直拼在一起
重要提示
- 删掉原命令里的
-map 0:v,因为我们已经通过滤镜合成了新的视频流[outv] stream_loop -1会循环播放原视频,配合-shortest会让输出时长和音频保持一致- 要保证可视化和原视频的分辨率匹配,不然会出现拉伸或黑边问题
内容的提问来源于stack exchange,提问作者user2108258
相关产品推荐
相关产品推荐

