Кодирование оригинального GIF файла в 2024 году (например для дискорда)
Порыскал я по сайтам всяким которые гифки сжимают, по форумам всяким с программками, с ключами для ффэмпэг кодирования... чёт одно говно на выходе.
Мой алгоритм сжатия из видео в гиф используя терминальный FFMPEG в 3 шага
Для вертикального изображения не scale=480:-1: а scale=-1:480:
Пояснения по первичной обработке: gif может иметь любую кадровую частоту на каждом кадре, но по какой-то причине никто это не использует вообще нигде. По этой же причине в моих параметрах нигде нету выставления FPS. Оно динамично, полностью зависит от обработки входного видео.
—Фильтр mpdecimate убирает кадры которые сильно схожи между собой, не кодируя никаких промежутков. Сила пропуска схожих кадров настраивается параметром lo=64*5 (64*4 пропускает меньше, 64*6 пропускает больше)
—Фильтр nlmeans сглаживает низкочастотный пространственный шум, из-за которого гифки шумят теряя информацию ни на что. В строке 1:5:5:5:5 - первая цифра означает силу подавления, остальные означают длину в пикселях для анализа шума. Для ускорения кодирования можно выставить 1:3:3:3:3
—Фильтр hqdn3d сглаживает временной шум, когда градиенты переходят из одного в другой. Сила регулируется chroma_tmp=сила (цвет) luma_tmp=сила (яркость)
Порыскал я по сайтам всяким которые гифки сжимают, по форумам всяким с программками, с ключами для ффэмпэг кодирования... чёт одно говно на выходе.
Мой алгоритм сжатия из видео в гиф используя терминальный FFMPEG в 3 шага
1
ffmpeg -i VIDEO.mp4 -vf "scale=480:-1:flags=spline+full_chroma_inp,mpdecimate=hi=64*50:lo=64*5:frac=1,nlmeans=1:5:5:5:5,hqdn3d=luma_spatial=3:chroma_spatial=2:chroma_tmp=20:luma_tmp=15,nlmeans=1:5:5:5:5,mpdecimate" temp.apng
2
ffmpeg -i temp.apng -vf "palettegen" palette.png
3
ffmpeg -i temp.apng -i palette.png -filter_complex "paletteuse=dither=none" out.gif
Для вертикального изображения не scale=480:-1: а scale=-1:480:
Пояснения по первичной обработке: gif может иметь любую кадровую частоту на каждом кадре, но по какой-то причине никто это не использует вообще нигде. По этой же причине в моих параметрах нигде нету выставления FPS. Оно динамично, полностью зависит от обработки входного видео.
—Фильтр mpdecimate убирает кадры которые сильно схожи между собой, не кодируя никаких промежутков. Сила пропуска схожих кадров настраивается параметром lo=64*5 (64*4 пропускает меньше, 64*6 пропускает больше)
—Фильтр nlmeans сглаживает низкочастотный пространственный шум, из-за которого гифки шумят теряя информацию ни на что. В строке 1:5:5:5:5 - первая цифра означает силу подавления, остальные означают длину в пикселях для анализа шума. Для ускорения кодирования можно выставить 1:3:3:3:3
—Фильтр hqdn3d сглаживает временной шум, когда градиенты переходят из одного в другой. Сила регулируется chroma_tmp=сила (цвет) luma_tmp=сила (яркость)