Некоторые основные определения:
- Кодек (например, H.264, HEVC, VP9) отвечает только за видео или аудио часть, и один или несколько кодеков могут быть объединены в контейнер.
- Контейнер (например, MP4, MKV) отвечает за их хранение, и это также то, что вы обычно открываете в своем медиаплеере по выбору.
- Конкретный кодер (например, x264, libvpx) отвечает за превращение входного потока в поток битов, совместимый с кодеками. Часто существует несколько кодеров для одного конкретного кодека.
Как вы можете видеть, мы должны объяснить несколько вещей здесь.
Что такое кодек?
Кодек короток для кодера / декодера, который в основном просто означает следующее: Данные , полученные с помощью кодера всегда можно декодировать с помощью соответствующего декодера. Это действительно для видео, аудио, но вы также можете подумать о криптографии (кодировщику нужен соответствующий декодер для отображения зашифрованного сообщения).
В настоящее время, когда указывается видеокодек, участвующие в нем учреждения обычно определяют только синтаксис стандарта. Например, они скажут: «Формат битового потока должен быть таким», « 0x810429AAB
Здесь будет переведено в это» и т. Д. Часто они предоставляют эталонный кодер и декодер, но как тогда кодер пишется для соответствия такому Формат полностью зависит от производителей.
По этой причине вы найдете так много кодеров для одного и того же кодека, а некоторые даже коммерческие.
Пример дела - H.264
Прежде чем мы перепутаем терминологию, давайте рассмотрим пример. Рассмотрим случай для H.264 . Название стандарта - H.264 - это не имя фактического кодировщика. Mainconcept - очень хороший коммерческий кодер, тогда как x264 - бесплатный и с открытым исходным кодом. Конечно, оба претендуют на высокое качество.
Тот факт, что вы можете оптимизировать кодировку, создает конкуренцию здесь. Оба кодера доставляют стандартизированный поток битов, который всегда можно декодировать с помощью H.264-совместимого декодера.
Обобщить
Итак, в общем, давайте просто скажем, что кодер будет:
- взять видеокадры
- создать действительный поток битов
Затем поток битов мультиплексируется в контейнер.
Декодер будет:
- принять этот действительный поток битов
- реконструировать видео кадры из него
Они оба соответствуют стандарту кодеков. Вот и все!
Текущие кодеки
В наши дни вы, вероятно, найдете только видео с кодеками, о которых я упомяну ниже. Интересно, что почти все они были созданы группой экспертов по кинематографии (MPEG). Но есть и другие бесплатные кодеки, например, созданные Google или Alliance for Open Media, которые являются конкурентами стандартов 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 Part 2, являются DivX , его Ripoff с открытым исходным кодом XviD и Nero Digital .
Видеоролики MPEG-4 Part 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 Part 2, это преемник MPEG-4 Part 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 Part 14 и основан на формате файла QuickTime. Это формат перехода к видео H.264, но он также охватывает HEVC, MPEG-4 Part 2 и MPEG-2.
Этот контейнер может также обернуть только аудио, поэтому вы найдете так много файлов .mp4, которые не являются видео, а представляют собой аудио в кодировке AAC , также в файлах .m4a (просто с другим расширением). Расширение .m4v обычно используется для видеопотоков.
Matroska Video (MKV) - это бесплатный формат файлов с открытым исходным кодом, который часто встречается в настоящее время, поскольку он поддерживает практически любой кодек, от H.264 до VP9, и, конечно, также много аудиокодеков.
WebM основан на MKV и в основном используется для видео VP9 и Opus audio - он является контейнером для потокового видео в Интернете, когда используются эти кодеки.
Контейнер Ogg является контейнером выбора для видеокодека Theora (и аудиокодека Vorbis ), также созданного Фондом Xiph.Org. Это также бесплатный и открытый исходный код (как и кодек).
Формат видео Flash был создан Adobe для использования в их потоковых приложениях. Он больше не используется, так как способ потоковой передачи значительно изменился за последние годы.
Популярные кодеки и форматы
Кроме того, какие из следующих кодеков, какие форматы файлов, а какие нет?
- Quicktime MOV : .mov - это расширение файла для формата файлов QuickTime , который является контейнером, созданным Apple. Этот контейнер был позже адаптирован для MP4. Он может нести все виды кодеков. Quicktime на самом деле представляет собой целую медиа-инфраструктуру, насколько мне известно, он не определяет сам кодек.
- MPEG (1, 2, 3, 4) : стандарты, определенные группой экспертов по кинематографии. Смотрите мой пост выше для деталей.
- WMV : Windows Media Video. На самом деле это кодек, заключенный в контейнер Advanced Systems Format , который снова использует расширение .wmv . Странно, но так оно и есть.
- FFmpeg : Это не кодек и не контейнер. Это библиотека видеоинструментов, которые также позволяют конвертировать различные кодеки и контейнеры. FFmpeg опирается на открытый код
libavcodec
и libavformat
библиотеки для создания кодеков и контейнеров соответственно. Большинство видео инструментов, которые вы найдете сегодня, основаны на нем.
- AVC : синоним для MPEG-4 Part 10 или H.264.
- DivX : еще один тип кодера для видео MPEG-4 Part 2.
- Xvid : один тип кодера для видео MPEG-4 Part 2. Это просто бесплатная версия DivX с открытым исходным кодом, что, конечно, привело к противоречиям.
- H.264 : синоним для MPEG-4 Part 10 или AVC.
На примечании стороны:
Я даже использую правильную терминологию?
Я думаю, что однажды предпочел бы специально использовать «кодек» и «контейнер» вместо «формат», чтобы избежать недоразумений. Формат теоретически может быть любым, потому что кодеки и контейнеры определяют формат (то есть, как должны быть представлены данные).
При этом терминология FFmpeg будет заключаться в использовании «формата» для контейнера. Это также из-за различия между:
libavcodec
библиотека для кодирования / декодирования
libavformat
, библиотека для контейнеров