我需要制作大量具有以下规范的视频:
- 背景视频 (bg.mp4)
- 以 30 fps 的速率叠加一系列 png 图像 img1.png 到 img300.png (img%d.png)
- 使用混合增亮滤镜 (dust.mp4) 在视频上叠加灰尘效果
- 将所有输入缩放至 1600x900,如果输入没有宽高比,则将其裁剪。
- 将输出视频的持续时间指定为 10 秒(即 30fps 的图像序列的持续时间)。
我使用不同的命令进行了大量测试,但总是显示错误。
最佳答案
嗯,我想我在下一个命令中得到了它:
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
为了分享我的发现,我将进行解释:
- 声明输入:
ffmpeg -ss 00:00:18.300 -i music.mp3 -loop 1 -i bg.mp4 -i ac%d.png -idust.mp4
- 添加过滤器复合体。第一部分: [1,0] 是输入的第二个元素(bg.mp4),缩放以获得最大值,然后裁剪我需要的大小,此操作的结果位于 [a] 元素中.
[1:0]scale=1600:ih*1600/iw,crop=1600:900,setsar=1[a];
- 第二部分:将 PNG 序列放在调整大小的视频(bg.mp4,现在为 [a])上,并将结果保存在 [b] 元素中。
[a][2:0]覆盖=0:0[b];
- 缩放并裁剪第四个输入 (overlay.mp4) 并保存在 [c] 元素中。
[3:0]scale=1600:ih*1600/iw,crop=1600:900,setsar=1[c];
- 使用“叠加”混合模式将第一个结果与叠加视频混合,不透明度为 0.1,因为视频具有灰色调,导致结果很暗。
[b][c]blend=all_mode='overlay':all_opacity=0.1
仅此而已。 如果有人能解释一下这个缩放过滤器是如何工作的,我将非常感谢!
关于filter - 如何在 ffmpeg 中使用混合过滤器叠加两个视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667462/