我需要将 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]
,但结果是不透明的黑色。
对于带有 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
我只是在垫之前缺少格式过滤器
format=rgba,pad
ffmpeg -r 30 -i %04d.png -vcodec libwebp -loop 0 -q:v 100 -lossless 1 test.webp
蒂莫菲的回答很有帮助,但对我不起作用。 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