使用ffmpeg从mp4文件转换后如何获得具有透明背景填充的动画webp文件?

问题描述 投票:0回答:4

我需要将 mp4 视频(1280×720)转换为 webp 文件(512x512),以便生成的 webp 文件保持宽高比,并且完全包含在 512x512 中,并且顶部和底部未覆盖的区域应该是透明的。

我尝试了以下 ffmpeg 命令:

ffmpeg -i sample.mp4 
-vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 -vf 
scale=512:512:force_original_aspect_ratio=decrease,pad=512:512:-1:-1:color=#00000000 sample.webp

在上面的命令中请注意

pad=512:512:-1:-1:color=#00000000
我给了 alpha 值 00 但它只输出黑色。

我还提到了这个网站https://ffmpeg.org/ffmpeg-utils.html#color-syntax它说

它可以是如下定义的颜色名称(不区分大小写的匹配)或 [0x|#]RRGGBB[AA] 序列,可能后跟 @ 和表示 alpha 分量的字符串。 alpha分量可以是由“0x”后跟一个十六进制数或0.0到1.0之间的十进制数组成的字符串,它表示不透明度值('0x00'或'0.0'表示完全透明,'0xff'或'1.0'完全不透明)。如果未指定 alpha 分量,则假定为“0xff”。

我尝试了

color=0x000000@0x00
[email protected]
,但结果是不透明的黑色。

video ffmpeg h.264 webp
4个回答
4
投票

对于带有 Alpha 通道的文件转换,请将编解码器更改为 libwebp_anim,以便在绘制新帧时清除先前的帧。 这就是最终命令的样子:

ffmpeg -i input.mov -c:v libwebp_anim -filter:v fps=fps=20 -lossless 1 \
 -loop 0 -preset default -an -vsync 0 -vf \
 "scale=512:512:force_original_aspect_ratio=decrease,format=rgba,pad=512:512:-1:-1:color=#00000000" \
 output.webp

2
投票

我只是在垫之前缺少格式过滤器

format=rgba,pad


0
投票
ffmpeg -r 30 -i %04d.png -vcodec libwebp -loop 0 -q:v 100 -lossless 1 test.webp

0
投票

蒂莫菲的回答很有帮助,但对我不起作用。 libewebp_anim 是必不可少的,但直到我添加了这个 colorkey 后我才让它工作:

ffmpeg -i input.mp4 -vf "colorkey=0x000000:0.06:0.06" -c:v libwebp_anim -lossless 0 -compression_level 6 -q:v 50 -loop 0 -an -preset picture -metadata:s:v:0 alpha_mode="1" output.webp
© www.soinside.com 2019 - 2024. All rights reserved.