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

Я попытался изменить размер анимированного GIF-изображения с прозрачностью, но фон стал белым. Как мне сохранить прозрачность?

Я прочитал /questions/77507/kak-mne-konvertirovat-video-v-gif-s-ispolzovaniem-ffmpeg-s-priemlemyim-kachestvo/77522#77522 и попробовал

>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

1 ответ

Решение

Я обновил с 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,

Другие вопросы по тегам