如何在ffmpeg中使用混合滤镜叠加两个视频

Car*_*ulo 3 blending ffmpeg blend filter

我需要制作许多具有以下规格的视频:

  • 背景视频(bg.mp4)
  • 以30 fps的速率将一系列png图像img1.png叠加到img300.png(img%d.png)
  • 使用混合减光滤镜(dust.mp4)在视频上叠加灰尘效果
  • 将所有输入缩放到1600x900,如果输入没有宽高比,则将其裁剪。
  • 将输出视频的持续时间指定为10秒(30 fps时图像序列的持续时间)。

我正在使用不同的命令进行大量测试,但始终显示错误。

Car*_*ulo 6

好吧,我想我在下一个命令中得到了它:

ffmpeg -ss 00:00:18.300 -i music.mp3 -loop 1 -i bg.mp4 -i ac%d.png -i dust.mp4 -filter_complex "[1:0]scale=1600:ih*1200/iw, crop=1600:900[a];[a][2:0] overlay=0:0[b]; [3:0] scale=1600:ih*1600/iw, crop=1600:900,setsar=1[c]; [b][c] blend=all_mode='overlay':all_opacity=0.2" -shortest -y output.mp4
Run Code Online (Sandbox Code Playgroud)

我将解释以分享我发现的内容:

  • 声明输入:

ffmpeg -ss 00:00:18.300 -i music.mp3 -loop 1 -i bg.mp4 -i ac%d.png -i dust.mp4

  • 添加过滤器复合体。第一部分:[1,0]是输入的第二个元素(bg.mp4),缩放以获取最大值,然后根据需要的大小进行裁剪,此操作的结果在[a]元素中。

[1:0]比例= 1600:ih * 1600 / iw,作物= 1600:900,setsar = 1 [a];

  • 第二部分:将PNG序列放在调整大小的视频上(bg.mp4,现在为[a]),然后将重新保存的内容保存在[b]元素中。

[a] [2:0] overlay = 0:0 [b];

  • 缩放和裁剪第四个输入(overlay.mp4),并保存在[c]元素中。

[3:0] scale = 1600:ih * 1600 / iw,作物= 1600:900,setsar = 1 [c];

  • 将第一个结果与具有“覆盖”混合模式的覆盖视频混合,并以0.1的不透明度混合,因为视频具有灰色调并使结果如此暗。

[b] [c] blend = all_mode ='overlay':all_opacity = 0.1

就这样。如果有人能展示此缩放过滤器的工作原理,我将非常感谢!