如何让ffmpeg保留透明度?

3

我们知道ffmpeg可以帮助我们在视频上叠加图像。我的目标是将一个带有透明背景的图像覆盖在视频上。

ffmpeg -i device/nexus5_portrait.png -i device/input.mp4\
-filter_complex "overlay=(W-w)/2:(H-h)/2:enable='between(t,0,5)'"\
-b:v 16M -bufsize 16M device/output.mp4;

Output.mp4 的背景是黑色的。有没有办法保留 alpha 通道?

提前感谢!

3个回答

2

您需要使用支持透明度的视频编解码器。默认情况下,mp4使用H.264(使用x264),不支持alpha通道。您可以考虑使用VP8或VP9,它们支持alpha通道。如果压缩不是非常重要,您也可以使用支持alpha通道的图像编解码器(例如PNG)而不是视频编解码器(-c:v png)进行输出。


现在我的想法是先将input.mp4转换为gif,然后用png包装gif。 - CoXier

0

ffv1是一种非常适合视频处理的格式,它是无损的并且保留Alpha通道。你可以叠加到ffv1然后转换为h264。它是一个相对快速的编解码器,唯一的缺点是临时文件会非常大。这种格式也在剪辑时提供了帧精度。更多信息在这里: 支持Alpha通道的无损视频编解码器


0

一个新的想法拯救了我。

  • 使用ffmpeginput.mp4转换为input.gif
  • 使用ImageMagicknexus5_portrait.png叠加input.gif

    ffmpeg -i input.mp4 -b:v 16M input.gif
    magick image.png null: \( input.gif -coalesce \) -gravity Center -layers composite des.gif
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接