我希望从 .wav 文件和图片 .jpg 生成视频波形。我可以使用
ffmpeg -i input -filter_complex "[0:a]showwaves=s=1280x720:mode=line,format=yuv420p[v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy output.mkv
但是我如何添加背景图片?
谢谢。
答案1
您需要将图像添加为另一个输入,然后可以使用类似colorkey
过滤器的功能使showwaves
可视化的背景变得透明,并使用过滤器将可视化与背景图像overlay
混合。showwaves
尝试以下方法:
ffmpeg -i $audio -i $picture -filter_complex "[0:a]showwaves=s=1280x720:mode=line,colorkey=0x000000:0.01:0.1,format=yuva420p[v];[1:v]scale=1280:720[bg];[bg][v]overlay[outv]" -map "[outv]" -map 0:a -c:v libx264 -c:a copy output.mkv
从起点分解差异:
colorkey=0x000000:0.01:0.1
将去除视频中生成的黑色部分showwaves
并使其变得透明。format=yuva420p
需要将两个视频流转换为相同的像素格式。[1:v]scale=1280:720[bg]
从输入 #1 获取视频,缩放以匹配我们的showwaves
尺寸,并命名输出[bg]
(背景)。您可以将其更改为例如scale=1280:-1
将一个维度缩放为 1280,并按比例缩放另一个维度以保持纵横比。[bg][v]overlay[outv]
正在获取静态图像视频[bg]
以及我们刚刚生成的视频流showwaves
并命名[v]
它们并叠加,以便中的图像[1:v]
透过我们在中键入的透明部分显示出来[v]
。输出名为[outv]
。- 现在,其中一个
-map
参数已被更改为使用[outv]
(覆盖过滤器的输出)而不是[v]
(仅仅是色键showwaves
输出)作为输出中的视频源。