Как изменить размер анимированного 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
,