ffmpeg:填充并不总是透明的

ffmpeg:填充并不总是透明的

我使用一个简单的 ffmpeg 命令来调整图像大小并填充图像以适合 960x540 的帧。我希望填充是透明的,但在不同的图像上会出现不同的行为。

命令:

ffmpeg -y -i image.PNG -vf \
"scale=iw*min(960/iw\,540/ih):ih*min(960/iw\,540/ih),pad=960:540:(960-iw)/2:(540-ih)/2:color=#00000000" \
new.png

我拍摄的 PNG 截图似乎如预期一样获得了透明背景。JPG 似乎获得了黑色填充,即使我事先将它们转换为 PNG。

我似乎看到的区别是 rgb24 与 rgba。这是问题所在吗?如果是这样,我该如何在进行填充之前更改该属性?

黑色填充:

Metadata:
    encoder         : Lavf57.25.100
    Stream #0:0: Video: png, rgb24, 960x540 [SAR 1926:1925 DAR 3424:1925], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc

透明填充:

  Metadata:
    encoder         : Lavf57.25.100
    Stream #0:0: Video: png, rgba, 960x540, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc

答案1

添加格式过滤器在使用 pad 之前添加到你的过滤链中:

-vf scale,format=rgba,pad

答案2

这是一个答案:如果我首先将 JPG 转换为 PNG并同时将像素格式改为rgba然后我就可以进行填充,这样它就会透明了。不过,如果我尝试在进行填充的同时进行填充,它似乎不起作用。

这是转换的命令:

ffmpeg -i image.jpg -pix_fmt rgba image.png

相关内容