Відео в GIF

Відео в GIF — онлайн-конструктор анімованих GIF — перетворіть відеокліп на анімований GIF, що зациклюється, з обраною частотою кадрів, шириною і якістю палітри. GIF — давній відкритий формат, який розуміє практично кожен пристрій і чат-платформа. Усе обробляється локально у вашому браузері, файли ніколи не вивантажуються на сервер.
Підтримуваний вхід: WebM, OGV (Ogg Video), MKV, AVI, GIF, WebP, APNG та інші поширені відеоформати. Усе конвертується локально у вашому браузері; файли ніколи не вивантажуються на сервер.
Перше використання завантажує рушій обробки відео приблизно 30 МБ у поточний браузер. Він кешується і використовується далі, тож будьте терплячі.
🎥
Натисніть, щоб вибрати, або перетягніть відеофайл
Підтримуються WebM, OGV, MKV, AVI, GIF та інші поширені формати; рекомендовано до 500 МБ
Частота кадрів: вище = плавніше, але більший файл
Максимальна ширина: масштабовано автоматично із збереженням співвідношення сторін
Кольорів палітри: менше кольорів = менший файл, незначна втрата якості
Конвертація в анімований GIF: витягує кадри з обраною частотою, масштабує до максимальної ширини і будує оптимізовану палітру кольорів для циклу. Звукова доріжка (якщо є) відкидається.
Чому GIF такі великі? Палітри, дизеринг і формат 1987 року, що виконує роботу відео

GIF (Graphics Interchange Format, 1987) задумувався як формат нерухомих зображень із невеликим бонусом анімації, і це видно. Дві властивості визначають усе на цій сторінці: кожен кадр обмежено 256 кольорами, обраними з збереженої палітри, а кадри стискаються за допомогою LZW — універсального стискача байтів з епохи zip, який не знає, що зберігається відео. Немає компенсації руху, немає арифметики на кшталт «цей кадр здебільшого є попереднім», як у реальних відеокодеків; кожен кадр — по суті окремо стиснене зображення. Розуміння палітри — ключ до малих і гарних GIF.

П'ять фактів, на які спирається решта сторінки:
• кожен кадр містить щонайбільше 256 кольорів (28) з палітри; відео в повному кольорі треба квантувати до меншої кількості
• дизеринг імітує відсутні кольори, розсіюючи крапки сусідніх записів палітри — більші файли, плавніші градієнти
• тривалість кадрів зберігається в одиницях по 10 мс: 10 к/с → затримка 10 (100 мс); практичний поріг — затримка 2 (20 мс = 50 к/с)
• кадри стискаються LZW незалежно один від одного — відсутність міжкадрового стиснення — головний убивця розміру
• менше кольорів, менше кадрів, менші розміри: кожен параметр зменшує вхід LZW, і ефекти множаться
Палітра з 256 кольорами і смуговість

Піксель відео в повному кольорі потребує 24 біти (16,7 мільйона варіантів); піксель GIF — це 8-бітний індекс у таблиці щонайбільше з 256 кольорів. Тому перетворення відео на GIF виконує квантування палітри: обирається 256 кольорів, що найкраще передають вміст, і кожен піксель прив'язується до найближчого з них. За градієнти доводиться платити — небо, якому потрібно 4000 трохи різних синіх, отримує 30 з них, і плавний перехід розпадається на видимі смуги, які називають смуговістю. Плоска графіка з високим контрастом (логотипи, спрайти ігор, діаграми) майже цього не помічає; найбільше страждають фотографії та відео. Якість палітри конвертера значною мірою визначає якість його виводу.

Дизеринг: обмін шуму на плавність

Дизеринг — класичний засіб проти смуговості: замість прив'язки кожного пікселя до найближчого кольору палітри розсіюється суміш двох найближчих кольорів, щоб середнє на невеликій ділянці збігалося з вихідним тоном. Градієнти виглядають значно плавніше — смуги розчиняються в дрібному шумі, який око зливає на звичайній відстані перегляду. Ціна — розмір файлу: шум — це високочастотні деталі, а LZW стискає регулярні смуги значно краще, ніж розсіяні крапки. Це фундаментальний компроміс GIF, який показує ця сторінка: вимкніть дизеринг для менших файлів зі смуговістю, увімкніть його для плавних градієнтів із доплатою за розмір.

Тривалість кадрів: поріг 20 мс

GIF зберігає затримку між кадрами в одиницях по 1/100 секунди. 10 к/с означає затримку 10 (100 мс на кадр); 20 к/с — затримку 5 (50 мс). Найменше корисне значення — 2 (20 мс, тобто 50 к/с), а на практиці більшість браузерів піднімає будь-що нижче цього до 100 мс — запит на 60 к/с мовчки дає повільніше відтворення. За порогом кожне підвищення частоти кадрів множить кількість кадрів: 15 к/с → 50 к/с для того самого кліпу означає більш ніж утричі більше кадрів, а розмір GIF приблизно лінійно залежить від їх кількості. Кліп на 10 секунд при 15 к/с — це 150 кадрів; при 50 к/с було б 500.

Чому GIF роздуваються порівняно з реальним відео

Сучасні відеокодеки витрачають більшість бітів на опис змін між кадрами — нерухома камера означає, що наступні кадри коштують майже нічого. LZW у GIF бачить кожен кадр як новий образ (його єдиний міжкадровий прийом — це прапорець прозорості, який пропускає пікселі, ідентичні попередньому кадру; це допомагає набагато менше, ніж справжня компенсація руху). Емпіричне правило: для того самого кліпу очікуйте, що GIF буде в багато разів більшим за добре закодований WebM тієї самої роздільної здатності. Якщо призначення приймає справжнє відео, віддавайте перевагу йому; GIF перемагає лише там, де важливі його універсальність і поведінка автовідтворення та зациклення.

Поширені хибні уявлення
  • «GIF стиснутий, тож він ефективний для відео». LZW — це стискач на рівні байтів 1987 року без моделі руху; для рухомого зображення він найменш ефективний з широко вживаних форматів у вебі.
  • «Моє джерело має 60 к/с, тож і GIF має бути таким». Поріг затримки 20 мс обмежує GIF 50 кадрами на секунду, а браузери піднімають затримки нижче порогу. Точна відтворюваність кадр за кадром — це те, чого GIF не може забезпечити.
  • «Дизеринг — це просто шум, який треба вимкнути». Це навмисний компроміс якості та розміру: вимкнено — менші файли зі смуговістю, увімкнено — плавні градієнти, що коштують байтів.
  • «Менше кольорів завжди виглядає жахливо». Для плоскої графіки та анімації з високим контрастом навіть 64 кольори можуть виглядати так само, як 256 — і ще більше зменшити файл.

Пов'язані інструменти: Відео в WebP/APNG для анімації в повному кольорі зі справжнім стисненням, GIF у відео для зворотного напряму (палітра в повний колір), Відео в WebM для того самого кліпу як реального відео, і Обрізач відео, щоб обрізати джерело перед конвертацією.