我需要将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
和color=0x000000@0.0
,但结果是不透明的黑色。
对于带有alpha通道的文件转换,也将编解码器更改为libwebp_animm,以便在绘制新帧时清除先前的帧。下面是最终命令的样子:
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
我只是在padformat=rgba,pad
之前缺少格式过滤器
ffmpeg -r 30 -i %04d.png -vcodec libwebp -loop 0 -q:v 100 -lossless 1 test.webp