1

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

1 ответ1

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .