如何使用 ffmpeg 或 imagemagick 将两个图像序列与 alpha 通道批量组合?

how to batch combine two sequence of images with an alpha channel using ffmpeg or imagemagick?

也欢迎使用其他工具或简单 API。

我有一系列带有 alpha 的 png,我想将其叠加在一些视频之上。 使用 ffmpeg 会很棒,但使用 imagemagick 也是可以接受的。我可以提取视频中的所有帧并使用 imagemagick 批量混合每一帧然后重新编码(重新编码是可以接受的)。

请说明png的顺序。你想要所有的 png 覆盖视频的每一帧吗?或者视频的每一帧一个不同的 png。或覆盖视频每一帧的相同 png(可选)。

后者可以在 ImageMagick 中使用 -layers composite 完成,假设您的 ImageMagick 将 ffmpeg 作为委托库

convert video.mpeg null: overlay.png -gravity G -geometry +X+Y -layers composite new_video.mpeg


我不确定,但您可能需要在 video.mpeg 之后添加 -coalesce,如果以某种方式优化帧以更改帧大小,如 gif 动画。

或者,假设您将所有视频帧都转换为 png。然后假设所有帧的大小都相同并且用前导零编号,

convert video*.png null: overlay.png -gravity G -geometry +X+Y -layers composite new_video.mpeg


其中 G 是重力设置,例如中心,X 和 Y 是重力设置的所需偏移量。

convert video*.png null: overlay.png -gravity G -geometry +X+Y -layers composite new_video_%03d.png


您可以在其中将 %03d.png 更改为除 3 以外的任何数字,以设置前导零的数量。然后你将不得不使用 ffmpeg 来重构你的视频。

ffmpeg 例子。你提到了 "two sequences" 所以这个例子假设你有两组按顺序编号的图像:

ffmpeg -i input.mp4 -framerate 25 -i blue_%04d.png -framerate 25 -i red_%04d.png -filter_complex "[0][1]overlay=10:10:format=auto[bg];[bg][2]overlay=W-w-10:10:format=auto[v]" -map "[v]" -map 0:a? -c:a copy output.mp4


重叠放置示例。

  • 第一个图像序列 ("blue") 将放置在左上角,间距为 10px,第二个图像序列 ("red") 将放置在右上角。如果你想要左下角:10:H-h-10。如果你想要右下角:W-w-10:H-h-10.

  • 本例中的图片命名为blue_0001.pngblue_0002.pngblue_0003.png等,“red”的模式相同"序列.

  • 有关详细信息,请参阅 image file demuxer and overlay filter