Как изменить размер анимированного GIF и сохранить прозрачность?

659
Chloe

Я попытался изменить размер анимированного 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 
0

1 ответ на вопрос

0
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.

Похожие вопросы