如何使用 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.png
、blue_0002.png
、blue_0003.png
等,“red
”的模式相同"序列.
有关详细信息,请参阅 image file demuxer and overlay filter。
也欢迎使用其他工具或简单 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.png
、blue_0002.png
、blue_0003.png
等,“red
”的模式相同"序列.有关详细信息,请参阅 image file demuxer and overlay filter。