filter - 如何在 ffmpeg 中使用混合过滤器叠加两个视频

标签 filter ffmpeg blend blending

我需要制作大量具有以下规范的视频:

  • 背景视频 (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/

相关文章:

wpf - 从同一个点击事件调用两个不同的动画

xaml - 如何在 Visual Studio 2012 设计 View 中在页面编辑模式和模板编辑模式之间切换?

javascript - 如何使用箭头函数按列表过滤属性

ffmpeg 为网络摄像机流传输大量数据

python - ffmpeg Python命令在PM2环境下只运行一次

ffmpeg归一化波形

c# - Visual Studio 2013 中的快捷方式 "Open in Blend"在哪里?

javascript - 使用 jQuery .filter() 选择 div 中的特定文本

Javascript:过滤数组中的元素部分

c - 如何用C语言实现IIR滤波器?