Деякі основні визначення:
- Кодек (наприклад, H.264, HEVC, VP9) відповідає лише за відео- або аудіо-частину, і один або більше кодеків можуть бути об'єднані в контейнер.
- Контейнер (наприклад, MP4, MKV) відповідає за збереження їх разом, і це також те, що ви зазвичай відкриваєте у своєму медіаплеєрі за вибором.
- Конкретний кодер (наприклад, x264, libvpx) відповідає за перетворення вхідного потоку в сумісний з кодеком бітовий потік. Для одного конкретного кодека часто є кілька кодерів.
Як бачите, тут нам доведеться пояснити кілька речей.
Що таке кодек?
Кодек короткий для кодера / декодера, який в основному просто означає наступне: Дані , отримані з допомогою кодера завжди можна декодувати з допомогою відповідного декодера. Це може бути справедливим для відео, аудіо, але ви також можете подумати про криптографію (кодеру потрібен відповідний декодер для відображення зашифрованого повідомлення).
Сьогодні, коли задається відеокодек, установи, які беруть у ньому участь, зазвичай лише задають синтаксис стандарту. Наприклад, вони скажуть: "Формат бітового потоку повинен бути таким", " 0x810429AAB
Тут буде переведено на це" і т. Д. Часто вони постачають опорний кодер і декодер, але як записується кодер, щоб відповідати такому Формат повністю залежить від виробників.
Саме тому ви знайдете так багато кодерів для того самого кодека, а деякі з них навіть комерційні.
Приклад випадку - H.264
Перш ніж ми будемо змішувати термінологію, візьмемо приклад. Розглянемо випадок H.264 . Назва стандарту - H.264 - це не ім'я фактичного кодера. Mainconcept - це дуже хороший комерційний кодер, тоді як x264 - безкоштовний та відкритий. Звичайно, обидва заявляють про хорошу якість.
Тут випливає сам факт, що ви можете оптимізувати кодування. Обидва кодери доставляють стандартизований бітовий потік, який завжди можна декодувати декодером, сумісним з H.264.
Узагальнити
Отже, загалом, скажемо, що кодер:
- знімати кадри відео
- створити дійсний бітовий потік
Потім бітовий потік мультиплексується в контейнер.
Дешифратор:
- взяти цей дійсний бітовий потік
- реконструюйте з нього відеокадри
Вони обидва відповідають стандарту кодека. Це все!
Поточні кодеки
Ці дні ви, мабуть, знайдете лише відео, закодовані кодеками, про які я згадаю нижче. Цікаво, що майже всі вони були створені Групою експертів з кінофільму (MPEG). Але є також і інші кодеки, безоплатні роялті, наприклад, створені Google або Альянсом для відкритих медіа, які є конкурентами стандартів MPEG.
Зауважте, що "MPEG" може посилатися як на кодеки, так і на контейнери, як ви побачите нижче. Це додає плутанини, але просто знайте, що "MPEG" сам по собі нічого не означає, наприклад, "у мене файл у форматі MPEG" дуже неоднозначно ".
MPEG-2 досить старий. Перший публічний реліз - з 1996 р. Відео MPEG-2 в основному використовується для DVD та телевізійного мовлення, наприклад DVB-T або супутника, та застарілих програм, де важлива сумісність. Відео MPEG-2 в основному знаходяться в контейнері .MPG .
Це, мабуть, той, який використовувався здебільшого для кодування відео для Інтернету в середині 2000-х, але він тим часом був замінений. Він забезпечує гарну якість при практичних розмірах файлів, що означало, що ви можете записати цілий фільм довжиною 90 хвилин на компакт-диск з 600 Мб (тоді як з MPEG-2 вам знадобився б DVD, дивіться мою відповідь тут ). Він не працює так добре для HD або 4K вмісту.
Деякі кодери, що виводять відео MPEG-4, частина 2, - це DivX , його відкритий джерело XviD і Nero Digital .
Відео MPEG-4 Частина 2 в основному постачається в контейнері AVI , але MP4 також часто зустрічається.
Це також відоме як MPEG-4 Advanced Video Coding (AVC) або H.264 ; це найпоширеніший кодек сьогодні. Він забезпечує хорошу якість при невеликих розмірах файлів, а тому ідеально підходить для всіх видів відео для Інтернету чи мобільних пристроїв. Ви знайдете H.264 майже в усіх сучасних програмах - від телефонів до відеокамер. На дисках Blu-ray тепер відео кодується у H.264.
Деякі кодери для нього: x264 , NVENC (від NVIDIA), Mainconcept . Відео в основному надходить у контейнерах MP4 , MKV або MOV .
Також називається MPEG-H Частина 2, це наступник MPEG-4, Частина 10 / AVC / H.264. Він спрямований на більш високу роздільну здатність (до 8 К ) і може запропонувати до 50% вищу ефективність кодування (з точки зору якості та бітрейта) порівняно з H.264 (див. Цей документ , наприклад).
Стандарт був опублікований у 2013 році, і повільно кодек починає застосовуватися все більше і більше, наприклад, для IPTV або онлайн-передачі відео. HEVC також використовується Apple для зберігання відео та зображень (за допомогою HEIF ) на iOS. Однак той факт, що існує декілька патентних пулів, пов'язаних з HEVC, багато компаній (майже всі, крім Apple) переходять на альтернативи безоплатної роялті. HEVC також не підтримується всіма браузерами, що робить його непридатним для веб-потоку.
Найвідоміший кодер - x265 . Також є NVENC . Відео зазвичай надходить у контейнерах MP4 .
VP9 (спадкоємець VP8) - кодек, розроблений головним чином Google. Він відкритий і безоплатний, і реалізований у багатьох браузерах . Його якість майже така ж, як HEVC, а іноді навіть краща (див. Цей документ від Netflix). VP9 - це те, що ви отримуєте, переглядаючи YouTube у веб-переглядачі, який його підтримує.
VP9 може бути закодований кодером libvpx , і він часто надходить у контейнери WebM або MKV .
Деякі компанії зібралися, щоб створити ще більш сильного конкурента HEVC - але в якості альтернативи безоплатної роялті. AV1 стане наступником VP9, і він заснований на тому, що повинен був стати VP10. Його підтримує Альянс за відкриті медіа (заснований Amazon, Cisco, Google, Intel, Microsoft, Mozilla та Netflix). Детальніше про це читайте тут .
Libaom кодер може бути використаний для створення AV1 бітових потоків, але це все ще є експериментальною.
Що таке формат (контейнер)?
До цих пір ми пояснювали лише необроблений "бітовий потік", який в основному є дійсно необробленими відеоданими. Ви насправді можете переглядати відео, використовуючи такий сирий бітовий потік. Але в більшості випадків цього просто недостатньо або не практично.
Тому вам потрібно загорнути відео в контейнер. Є кілька причин, чому:
- Можливо, ви хочете трохи аудіо разом із відео
- Можливо, ви хочете перейти до певної частини відео (наприклад, "перейти до 1: 32: 20.12")
- І аудіо, і відео повинні бути ідеально синхронізовані
- Відео, можливо, потрібно буде передати через надійну мережу і розділити на пакети раніше
- Відео може навіть надсилатися через втрачену мережу (наприклад, 3G) і розбиватися на пакети раніше
З усіх цих причин були винайдені формати контейнерів, деякі прості, деякі більш досконалі. Все, що вони роблять, - це "перемотати" бітовий потік відео в інший потік.
Контейнер буде синхронізувати кадри відео та аудіо відповідно до їх часу презентації (PTS), що гарантує, що вони відображаються точно в той самий час. Також необхідно подбати про додавання інформації для потокових серверів, якщо необхідно, щоб потоковий сервер знав, коли надсилати, яку частину файлу.
Давайте розглянемо деякі популярні контейнери.
Популярні контейнери
Ви знайдете відео, в основному загорнені в наступні контейнери. Є й інші менш популярні, але, як я вже сказав, це:
Audio Video Interleave - це найпростіший контейнер, він просто є для переплетення аудіо та відео. Він був написаний у 1992 році і до сьогодні використовується, але вважається спадщиною, тому більше не використовуйте його.
також відомий як MPEG-4, частина 14 і заснований на форматі файлу QuickTime. Це формат для відео H.264, але він також охоплює HEVC, MPEG-4, частина 2 та MPEG-2.
Цей контейнер також може містити лише аудіо, тому ви знайдете стільки файлів .mp4, що не є відео, а швидше аудіо з кодуванням AAC , також у файлах .m4a (просто інше розширення). Розширення .m4v зазвичай приймається для відеопотоків.
Matroska Video (MKV) - це відкритий і безкоштовний формат файлів, який часто зустрічається в наш час, оскільки він підтримує в основному будь-який кодек, від H.264 до VP9, і, звичайно, також багато аудіо кодеків.
WebM заснований на MKV і в основному використовується для відео VP9 та аудіо Opus - це контейнер вибору для веб-потокового відео при використанні цих кодеків.
Контейнер Ogg - це контейнер вибору для відео кодека Theora (та аудіокодека Vorbis ), також створеного Фондом Xiph.Org. Це також безкоштовний та відкритий код (як і кодек).
Формат Flash відео був створений компанією Adobe для використання в їх потокових програмах. Він вже не використовується так багато, оскільки спосіб потокової передачі значно змінився за останні роки.
Популярні кодеки та формати
Крім того, які з наведених нижче є кодеками, які формати файлів, а які - ні одним?
- Quicktime MOV : .mov - це розширення файлу для формату файлів QuickTime , який є контейнером, створеним Apple. Пізніше цей контейнер був адаптований для MP4. Він може переносити всі види кодеків. Quicktime - це фактично цілий медіа-каркас, він насправді не визначає жодного кодеку, що стосується мене.
- MPEG (1, 2, 3, 4) : Стандарти, визначені Групою експертів з кінофільму. Детальніше див. У моєму дописі вище
- WMV : Відео Windows Media. Це фактично кодек, загорнутий у контейнер Advanced System Format , який знову використовує розширення .wmv . Дивно, але так воно і є.
- FFmpeg : Це ні кодек, ні контейнер. Це бібліотека відеоінструментів, яка також дозволяє конвертувати між різними кодеками та контейнерами. FFmpeg спирається на відкритий код
libavcodec
та libavformat
бібліотеки для створення кодеків та контейнерів відповідно. Більшість інструментів для відео, які ви знайдете сьогодні, засновані на ньому.
- AVC : синонім MPEG-4, частина 10 або H.264.
- DivX : ще один тип кодера для відео MPEG-4, частина 2.
- Xvid : Один тип кодера для відео MPEG-4, частина 2. Це просто відкрита, безкоштовна версія DivX, що, звичайно, призвело до суперечок.
- H.264 : Синонім MPEG-4, частина 10 або AVC.
Зі сторони:
Я навіть використовую правильну термінологію?
Я думаю, колись воліє спеціально використовувати "кодек" та "контейнер", а не "формат", щоб уникнути непорозумінь. Формат теоретично може бути будь-яким, оскільки і кодеки, і контейнери задають формат (тобто, як дані повинні бути представлені).
При цьому термінологія FFmpeg полягала б у використанні "формату" для контейнера. Це також пов'язано з різницею між:
libavcodec
, бібліотека для кодування / декодування
libavformat
, бібліотека для контейнерів