Кодування відео — це процес стиснення цифрового відеосигналу у формат, придатний для зберігання та передачі мережею з мінімальними втратами якості. Без кодування одна хвилина нестисненого відео в роздільній здатності 4K займає близько 30 ГБ, що робить передачу через інтернет неможливою. Згідно зі звітом Sandvine Global Internet Phenomena (2025), відео становить 65% всього інтернет-трафіку, і кодування — ключова технологія, що робить це можливим.
Головне
Кодування відео — це процес перетворення нестисненого відеосигналу в цифровий формат з використанням алгоритмів стиснення. Алгоритми, реалізовані у відеокодеках, видаляють надлишкову інформацію як у просторовій області (всередині одного кадру), так і в часовій (між послідовними кадрами).
Нестиснене відео являє собою послідовність кадрів, кожен з яких зберігається як масив пікселів у форматі RGB або YUV. Без стиснення одна секунда відео 1080p при 30 FPS потребує близько 1,5 ГБ пам'яті. Кодек H.264 стискає цей потік до 3–5 Мбіт/с, що в 2500 разів менше від вихідного обсягу.
Відеокодеки використовують два типи стиснення: внутрішньокадрове (intra-frame) та міжкадрове (inter-frame). Внутрішньокадрове стиснення застосовується до кожного кадру незалежно, використовуючи алгоритми, подібні до JPEG: дискретне косинусне перетворення (DCT), квантування та ентропійне кодування.
Міжкадрове стиснення аналізує різницю між послідовними кадрами та кодує лише зміни. Якщо фон статичний, кодек передає повний кадр лише один раз (I-frame), а потім лише різницю (P- та B-кадри), що значно знижує обсяг даних для сцен з малою динамікою.
Вибір відеокодека визначає співвідношення якості та розміру файлу, сумісність з пристроями та ліцензійні відрахування. На ринку мобільних додатків домінують чотири основні кодеки: H.264 (AVC), H.265 (HEVC), VP9 та AV1.
| Кодек | Стандарт | Рік | Компресія vs H.264 | Ліцензування |
|---|---|---|---|---|
| H.264/AVC | MPEG-4 Part 10 | 2003 | 1x (базовий) | Роялті (MPEG LA) |
| H.265/HEVC | MPEG-H Part 2 | 2013 | 40–50% ефективніший | Роялті (два пули) |
| VP9 | 2013 | 30–40% ефективніший | Безкоштовно | |
| AV1 | AOM | 2018 | 50–60% ефективніший | Вільний від роялті |
H.264 (AVC — Advanced Video Coding) залишається найсуміснішим відеокодеком: він підтримується всіма мобільними пристроями, браузерами та Smart TV починаючи з 2005 року. Апаратне прискорення декодування H.264 є навіть на бюджетних пристроях, що робить його ідеальним для універсального потоку.
Основний недолік H.264 — відносно низька ефективність стиснення порівняно з сучасними кодеками. При однаковому бітрейті H.265 та AV1 забезпечують помітно вищу якість, що особливо важливо для HDR- та 4K-контенту.
H.265 (HEVC — High Efficiency Video Coding) забезпечує на 40–50% кращу компресію, ніж H.264, при тій же візуальній якості. Це досягається за рахунок більш гнучкого розбиття кадру на блоки (CTU до 64×64 пікселів замість 16×16) та покращених алгоритмів передбачення руху.
HEVC підтримується на всіх пристроях Apple (починаючи з iPhone 6), на Android (починаючи з версії 5.0 з апаратним декодуванням) та на більшості Smart TV. Ліцензійні відрахування HEVC вищі, ніж H.264, і керуються двома патентними пулами, що ускладнює юридичне використання.
AV1 — відеокодек, розроблений Alliance for Open Media (AOM), консорціумом під керівництвом Google, Netflix, Amazon, Intel та Mozilla. AV1 забезпечує на 50–60% кращу компресію, ніж H.264, і повністю вільний від роялті, що робить його привабливим для стрімінгових сервісів.
Головний недолік AV1 — висока обчислювальна складність кодування. Кодування AV1 може бути в 5–10 разів повільнішим за H.264 на тому ж обладнанні, хоча апаратне декодування вже з'являється на пристроях 2024–2025 років (Snapdragon 8 Gen 3, Apple A17 Pro).
Аудіокодеки в мобільних додатках не менш важливі, ніж відеокодеки. Для стрімінгу відео потрібен аудіо з мінімальною затримкою, високою якістю та сумісністю з контейнерами MP4 та WebM. Три основні аудіокодеки покривають 99% мобільних стрімінгових додатків.
AAC (Advanced Audio Coding) — наступник MP3, розроблений MPEG у 1997 році та став стандартним аудіокодеком для iTunes, YouTube та Android. AAC забезпечує однакову якість з MP3 при бітрейті на 30% нижчому та підтримує багатоканальний звук до 7.1.
Для мобільних додатків рекомендується AAC-LC при бітрейті 128–192 кбіт/с для стерео та AAC-HE для низьких бітрейтів 32–64 кбіт/с. Апаратне декодування AAC є на всіх сучасних пристроях, що мінімізує енергоспоживання.
Opus — відкритий аудіокодек від IETF (RFC 6716), що забезпечує найкращу якість серед усіх аудіокодеків при бітрейтах від 6 до 510 кбіт/с. Opus об'єднує SILK (алгоритм для мовлення) та CELT (для музики) і автоматично перемикає режими залежно від контенту.
Opus використовується в WebRTC для відеодзвінків, у додатках Spotify та Discord, і підтримується в HLS починаючи з iOS 11 та Android 5.0. Низька затримка Opus (5–26 мс проти 40–100 мс у AAC) робить його кращим вибором для живих трансляцій та відеоконференцій.
Параметри кодування визначають кінцевий розмір файлу, якість відео та сумісність з пристроями. Розробник мобільного додатку повинен підібрати оптимальні налаштування для кожного типу контенту: фільми, спортивні трансляції, користувацький контент.
Бітрейт — кількість бітів, які використовуються для кодування однієї секунди відео. Розрізняють CBR (постійний бітрейт) для живих трансляцій, VBR (змінний бітрейт) з цільовою якістю для архівного зберігання та ABR (усереднений бітрейт) для стрімінгу.
| Роздільна здатність | H.264 (рекомендований) | H.265/HEVC | AV1 |
|---|---|---|---|
| 360p | 400–800 кбіт/с | 250–500 кбіт/с | 200–400 кбіт/с |
| 720p | 1,5–4 Мбіт/с | 1–2,5 Мбіт/с | 0,8–2 Мбіт/с |
| 1080p | 3–8 Мбіт/с | 2–5 Мбіт/с | 1,5–4 Мбіт/с |
| 4K (2160p) | 15–40 Мбіт/с | 10–25 Мбіт/с | 8–20 Мбіт/с |
CRF (Constant Rate Factor) — параметр кодування в x264 та x265, що задає цільову якість замість фіксованого бітрейту. Шкала CRF від 0 (lossless) до 51 (найгірша якість), де 18–28 — робочий діапазон. Для мобільних додатків рекомендується CRF 23 для x264 та CRF 25 для x265.
CRF 18–20 забезпечує високу якість для презентаційного контенту та офлайн-перегляду. CRF 24–28 підходить для стрімінгу та користувацького контенту, де розмір файлу важливіший за абсолютну якість.
Стандарт H.264 визначає профілі (Baseline, Main, High) та рівні (Level 1–5.2), які обмежують максимальні параметри відео. Baseline Profile сумісний з усіма пристроями, але не підтримує B-кадри. High Profile забезпечує максимальну якість і використовується для 1080p-контенту.
Для 4K-стрімінгу потрібен Level 5.1 і вище, що підтримується більшістю мобільних пристроїв починаючи з 2018 року. Рівень кодеку визначає максимальну роздільну здатність, бітрейт та розмір буфера, гарантуючи коректне декодування на всіх сертифікованих пристроях.
Кодування для стрімінгу відрізняється від архівного кодування необхідністю створення кількох варіантів якості (ABR ladder) та оптимізацією для мережевої передачі. Контент-провайдери використовують транскодування в реальному часі або попереднє кодування для VOD.
Типовий ABR-набір для мобільних додатків включає 4–6 варіантів: від 144p (200 кбіт/с) для слабких мереж до 1080p (8 Мбіт/с) для Wi-Fi. Рекомендовані роздільні здатності: 144p, 240p, 360p, 480p, 720p, 1080p. Для 4K-контенту додається 1440p та 2160p.
val mediaCodec = MediaCodec.createEncoderByType(
MediaFormat.MIMETYPE_VIDEO_AVC
)
val format = MediaFormat.createVideoFormat(
MediaFormat.MIMETYPE_VIDEO_AVC,
1280, 720
).apply {
setInteger(MediaFormat.KEY_BIT_RATE, 3_000_000)
setInteger(MediaFormat.KEY_FRAME_RATE, 30)
setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
setInteger(MediaFormat.KEY_PROFILE,
MediaCodecInfo.CodecProfileLevel.AVCProfileHigh)
setInteger(MediaFormat.KEY_LEVEL,
MediaCodecInfo.CodecProfileLevel.AVCLevel31)
}
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
Для живих трансляцій особливо важлива низька затримка. Налаштування кодування повинні мінімізувати затримку введення/виведення кодеку: рекомендується GOP розмір 1–2 секунди (кожні 30–60 кадрів), B-кадри вимкнені або мінімізовані, для H.264 використовується Baseline Profile.
Сучасні протоколи для низької затримки — LL-HLS та CMAF-Low Latency — вимагають фрагментованого кодування з сегментами 1–2 секунди та можливістю часткового завантаження (Partial Segments). Кодек повинен підтримувати moof-box у кожному сегменті для фрагментованого MP4.
Часті запитання
Кодування відео — процес стиснення цифрового відеосигналу за допомогою кодеків для зменшення обсягу даних. У мобільних додатках кодування дозволяє передавати та зберігати відео, зменшуючи розмір у сотні разів без помітної втрати якості на екрані пристрою.
H.264 забезпечує максимальну сумісність зі старими пристроями, а H.265 на 40–50% ефективніший при тій же якості. Для контенту 1080p і нижче достатньо H.264, для 4K рекомендується H.265 або AV1 при підтримці пристроєм.
Бітрейт — кількість даних на секунду відео. Для 1080p оптимальний бітрейт 3–8 Мбіт/с для H.264, 2–5 Мбіт/с для H.265. Вибір залежить від контенту: динамічні сцени (спорт) потребують вищого бітрейту, статичні (інтерв'ю) — нижчого.
VP9 — попередник AV1 від Google, що забезпечує компресію на рівні H.265. AV1 стискає на 20–30% ефективніше за VP9, але потребує в 5–10 разів більше ресурсів на кодування. VP9 кращий для YouTube, AV1 — для Netflix та сучасних стрімінгових сервісів.
Для живих трансляцій використовуйте H.264 Baseline Profile з GOP 1–2 секунди, без B-кадрів, бітрейт 2–4 Мбіт/с для 1080p. Увімкніть фрагментований MP4 (CMAF) для LL-HLS та використовуйте апаратне кодування через MediaCodec або VideoToolbox.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також