如何调整动画 GIF 的大小并保持透明度?

Chl*_*loe 5 gif ffmpeg animated-gif transparency image-transparency

我试图用透明度调整动画 GIF 的大小,但它把背景变成了纯白色。我如何保持透明度?

我阅读了https://superuser.com/a/556031/130929并尝试过

>set FILTERS=scale=320:-1:flags=lanczos
>ffmpeg -hide_banner -i logo.gif -vf "%FILTERS%,palettegen=stats_mode=diff" -y palette.png
>ffmpeg -hide_banner -i logo.gif -i palette.png -lavfi "%FILTERS% [x]; [x][1:v] paletteuse" logo-320.gif
Run Code Online (Sandbox Code Playgroud)

我也尝试过,-gifflags +transdiff但它没有帮助,因为答案中的博客文章说它是默认设置。我也试过没有stats_mode=diff.

我还尝试为每个帧使用一个调色板,但这只会使文件变大并且没有保持透明度。

>ffmpeg -hide_banner -i logo.gif -filter_complex "[0:v] scale=320:-1:flags=lanczos,split [a][b]; [a] palettegen=stats_mode=single [p]; [b][p] paletteuse=new=1" logo-320.gif
Run Code Online (Sandbox Code Playgroud)

Chl*_*loe 8

我从 3.4.1 升级到 4.0.2 并且成功了。但是,我得到了更好的结果

>ffmpeg -hide_banner -v warning -i logo.gif -filter_complex "[0:v] scale=320:-1:flags=lanczos,split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse" logo-320.gif
Run Code Online (Sandbox Code Playgroud)

通过添加palettegen=reserve_transparent=on:transparency_color=ffffff.