web-dev-qa-db-ja.com

アニメーションGIFのサイズを変更して透明度を維持するにはどうすればよいですか?

アニメーション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

私も-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
2
Chloe

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

palettegen=reserve_transparent=on:transparency_color=ffffffを追加して、エッジ周辺の白い線のアーティファクトを回避します。

5
Chloe