Формат кодирования видео [a] (или иногда формат сжатия видео ) — это формат представления цифрового видеоконтента , например, в файле данных или битовом потоке . Обычно он использует стандартизированный алгоритм сжатия видео , чаще всего основанный на кодировании дискретного косинусного преобразования (DCT) и компенсации движения . Конкретное программное обеспечение, встроенное ПО или аппаратная реализация, способная сжимать или распаковывать в определенном формате кодирования видео, называется видеокодеком .
Некоторые форматы видеокодирования документированы в подробной технической спецификации , известной как спецификация видеокодирования . Некоторые такие спецификации написаны и одобрены организациями по стандартизации как технические стандарты и поэтому известны как стандарт кодирования видео . Существуют стандарты де-факто и формальные стандарты.
Видеоконтент, закодированный с использованием определенного формата кодирования видео, обычно связывается с аудиопотоком (закодированным с использованием формата кодирования аудио ) внутри формата мультимедийного контейнера, такого как AVI , MP4 , FLV , RealMedia или Matroska . Таким образом, у пользователя обычно нет файла H.264 , но вместо этого есть видеофайл , который представляет собой контейнер MP4 видео в кодировке H.264, обычно вместе со звуком в кодировке AAC . Форматы мультимедийных контейнеров могут содержать один из нескольких различных форматов кодирования видео; например, формат контейнера MP4 может содержать такие форматы видеокодирования, как MPEG-2 Part 2 или H.264. Другим примером является первоначальная спецификация типа файла WebM , которая определяет формат контейнера (Matroska), а также какой именно формат сжатия видео ( VP8 ) и аудио ( Vorbis ) находится внутри контейнера Matroska, хотя Matroska способна содержать VP9. видео, а поддержка звука Opus была позже добавлена в спецификацию WebM .
Формат — это план размещения данных, создаваемых или потребляемых кодеком .
Хотя форматы кодирования видео, такие как H.264, иногда называют кодеками , существует четкое концептуальное различие между спецификацией и ее реализациями. Форматы кодирования видео описаны в спецификациях, а программное обеспечение, встроенное ПО или аппаратное обеспечение для кодирования/декодирования данных в данном формате кодирования видео из/в несжатое видео являются реализацией этих спецификаций. По аналогии, формат кодирования видео H.264 (спецификация) для кодека OpenH264 (конкретная реализация) является тем же, чем язык программирования C (спецификация) для компилятора GCC (конкретная реализация). Обратите внимание, что для каждой спецификации (например, H.264 ) может существовать множество кодеков, реализующих эту спецификацию (например, продукты и реализации x264 , OpenH264, H.264/MPEG-4 AVC ).
Это различие не находит последовательного терминологического отражения в литературе. Спецификация H.264 называет стандарты кодирования видео H.261 , H.262 , H.263 и H.264 и не содержит слова « кодек» . [2] Альянс за открытые медиа четко различает формат кодирования видео AV1 и сопутствующий кодек, который они разрабатывают, но называет сам формат кодирования видео спецификацией видеокодека . [3] Спецификация VP9 называет сам формат кодирования видео VP9 кодеком . [4]
В качестве примера объединения: страницы Chromium [5] и Mozilla [6] со списком их видеоформатов поддерживают оба формата кодирования видео вызовов, такие как кодеки H.264 . Другой пример: в объявлении Cisco о бесплатном видеокодеке в пресс-релизе формат кодирования видео H.264 упоминается как кодек ( «выбор общего видеокодека»), но упоминается реализация Cisco кодер/декодер H.264 и кодек вскоре после этого («наш кодек H.264 с открытым исходным кодом»). [7]
Формат видеокодирования не определяет все алгоритмы, используемые кодеком, реализующим этот формат. Например, большая часть того, как обычно работает сжатие видео, заключается в поиске сходства между видеокадрами (сопоставление блоков), а затем достижении сжатия путем копирования ранее закодированных похожих фрагментов изображений (таких как макроблоки ) и добавления небольших различий, когда это необходимо. Поиск оптимальных комбинаций таких предикторов и разностей является NP-сложной задачей [8] , а это означает, что практически невозможно найти оптимальное решение. Хотя формат видеокодирования должен поддерживать такое сжатие по кадрам в формате битового потока, без необходимости использования специальных алгоритмов для поиска таких совпадений блоков и других этапов кодирования, кодеки, реализующие спецификацию видеокодирования, имеют некоторую свободу оптимизации и инноваций в своем выборе. алгоритмов. Например, в разделе 0.5 спецификации H.264 сказано, что алгоритмы кодирования не являются частью спецификации. [2] Свободный выбор алгоритма также позволяет достичь различных компромиссов между пространственно-временной сложностью для одного и того же формата видеокодирования, поэтому для прямой трансляции можно использовать быстрый, но неэффективный с точки зрения пространства алгоритм, а однократное кодирование DVD для последующего массового производства может поменяйте длительное время кодирования на экономичное кодирование.
Концепция аналогового сжатия видео восходит к 1929 году, когда Р.Д. Келл в Великобритании предложил концепцию передачи только тех частей сцены, которые изменяются от кадра к кадру. Концепция сжатия цифрового видео возникла в 1952 году, когда исследователи Bell Labs Б.М. Оливер и К.В. Харрисон предложили использовать дифференциальную импульсно-кодовую модуляцию (DPCM) при кодировании видео. В 1959 году концепция межкадровой компенсации движения была предложена исследователями NHK Ю. Таки, М. Хатори и С. Танакой, которые предложили предсказательное межкадровое кодирование видео во временном измерении . [9] В 1967 году исследователи из Лондонского университета А. Х. Робинсон и К. Черри предложили кодирование по длине серии (RLE), схему сжатия без потерь , чтобы уменьшить полосу пропускания передачи аналоговых телевизионных сигналов. [10]
Самые ранние алгоритмы кодирования цифрового видео были либо для несжатого видео , либо использовали сжатие без потерь , оба метода неэффективны и непрактичны для кодирования цифрового видео. [11] [12] Цифровое видео было представлено в 1970-х годах, [11] первоначально использовалась несжатая импульсно-кодовая модуляция (PCM), требующая высоких битрейтов около 45–200 Мбит/с для видео стандартной четкости (SD), [11] [ 12] , что в 2000 раз превышало пропускную способность телекоммуникаций (до 100 кбит/с ), доступную до 1990-х годов. [12] Аналогичным образом, несжатое видео высокой четкости (HD) 1080p требует битрейта, превышающего 1 Гбит/с , что значительно превышает пропускную способность, доступную в 2000-х годах. [13]
Практическое сжатие видео появилось с развитием кодирования DCT с компенсацией движения (MC DCT), [12] [11], также называемого блочной компенсацией движения (BMC) [9] или компенсацией движения DCT. Это гибридный алгоритм кодирования [9] , который сочетает в себе два ключевых метода сжатия данных : кодирование с дискретным косинусным преобразованием (DCT) [12] [11] в пространственном измерении и прогнозирующую компенсацию движения во временном измерении . [9]
Кодирование DCT — это метод кодирования с преобразованием сжатия блоков с потерями , который был впервые предложен Насиром Ахмедом , который первоначально предназначал его для сжатия изображений , когда он работал в Университете штата Канзас в 1972 году. Затем Ахмед разработал его в практический алгоритм сжатия изображений. Т. Натараджан и К.Р. Рао в Техасском университете в 1973 году, опубликовано в 1974 году. [14] [15] [16]
Другим ключевым достижением стало гибридное кодирование с компенсацией движения. [9] В 1974 году Али Хабиби из Университета Южной Калифорнии представил гибридное кодирование, [17] [18] [19] , которое сочетает в себе кодирование с предсказанием и кодированием с преобразованием. [9] [20] Он исследовал несколько методов кодирования с преобразованием, включая DCT, преобразование Адамара , преобразование Фурье , наклонное преобразование и преобразование Карунена-Лёве . [17] Однако его алгоритм первоначально был ограничен внутрикадровым кодированием в пространственном измерении. В 1975 году Джон А. Роуз и Гунер С. Робинсон расширили алгоритм гибридного кодирования Хабиби на временное измерение, используя кодирование с преобразованием в пространственном измерении и прогнозирующее кодирование во временном измерении, разработав межкадровое гибридное кодирование с компенсацией движения. [9] [21] Для кодирования с пространственным преобразованием они экспериментировали с различными преобразованиями, включая DCT и быстрое преобразование Фурье (FFT), разрабатывая для них межкадровые гибридные кодеры, и обнаружили, что DCT является наиболее эффективным из-за его уменьшенная сложность, позволяющая сжимать данные изображения до 0,25 бита на пиксель для сцены видеотелефона с качеством изображения, сравнимым с типичным внутрикадровым кодером, требующим 2 бита на пиксель. [22] [21]
DCT был применен к кодированию видео Вен-Сюн Ченом [23] , который разработал быстрый алгоритм DCT вместе с CH Smith и SC Fralick в 1977 году, [24] [25] и основал Compression Labs для коммерциализации технологии DCT. [23] В 1979 году Анил К. Джайн и Джасвант Р. Джайн продолжили разработку сжатия видео DCT с компенсацией движения. [26] [9] Это привело к тому, что в 1981 году Чен разработал практический алгоритм сжатия видео, названный DCT с компенсацией движения или адаптивным кодированием сцены. [9] DCT с компенсацией движения позже стал стандартным методом кодирования для сжатия видео с конца 1980-х годов. далее. [11] [27]
Первым стандартом кодирования цифрового видео был H.120 , разработанный CCITT (ныне ITU-T) в 1984 году. [28] H.120 нельзя было использовать на практике, поскольку его производительность была слишком низкой. [28] H.120 использовал кодирование DPCM с компенсацией движения, [9] алгоритм сжатия без потерь, который был неэффективен для кодирования видео. [11] В конце 1980-х годов ряд компаний начали экспериментировать с кодированием дискретного косинусного преобразования (DCT), гораздо более эффективной формой сжатия для видеокодирования. CCITT получил 14 предложений по форматам сжатия видео на основе DCT, в отличие от одного предложения, основанного на сжатии векторного квантования (VQ). Стандарт H.261 был разработан на основе сжатия DCT с компенсацией движения. [11] [27] H.261 был первым практическим стандартом кодирования видео, [28] и использует патенты , лицензированные рядом компаний, включая Hitachi , PictureTel , NTT , BT и Toshiba , среди других. [29] Начиная с H.261, сжатие DCT с компенсацией движения было принято всеми последующими основными стандартами видеокодирования (включая форматы H.26x и MPEG ). [11] [27]
MPEG-1 , разработанный Группой экспертов по движущимся изображениям (MPEG), появился в 1991 году и предназначался для сжатия видео качества VHS . [28] На смену ему в 1994 году пришел MPEG-2 / H.262 , [28] который был разработан с использованием патентов, лицензированных рядом компаний, в первую очередь Sony , Thomson и Mitsubishi Electric . [30] MPEG-2 стал стандартным видеоформатом для цифрового телевидения DVD и SD . [28] Его алгоритм DCT с компенсацией движения позволил достичь степени сжатия до 100:1, что позволило развивать цифровые медиа- технологии, такие как видео по запросу (VOD) [12] и телевидение высокой четкости (HDTV). [31] В 1999 году за ним последовал MPEG-4 / H.263 , который стал большим шагом вперед в технологии сжатия видео. [28] Он использует патенты, лицензированные рядом компаний, в первую очередь Mitsubishi, Hitachi и Panasonic . [32]
Наиболее широко используемый формат кодирования видео по состоянию на 2019 год [обновлять]— H.264/MPEG-4 AVC . [33] Он был разработан в 2003 году и использует патенты, лицензированные рядом организаций, в первую очередь Panasonic, Godo Kaisha IP Bridge и LG Electronics . [34] В отличие от стандартного DCT, используемого его предшественниками, AVC использует целочисленное DCT . [23] [35] H.264 — один из стандартов кодирования видео для дисков Blu-ray ; все проигрыватели дисков Blu-ray должны иметь возможность декодировать H.264. Он также широко используется для потоковой передачи интернет-источников, таких как видео с YouTube , Netflix , Vimeo и iTunes Store , веб-программ, таких как Adobe Flash Player и Microsoft Silverlight , а также различных наземных трансляций HDTV ( стандарты ATSC , ISDB- T , DVB-T или DVB-T2 ), кабельное ( DVB-C ) и спутниковое ( DVB-S2 ). [36]
Основной проблемой для многих форматов видеокодирования являются патенты , из-за которых их использование становится дорогостоящим или потенциально сопряжено с риском патентного иска из-за патентов на подводные лодки . Мотивом создания многих недавно разработанных форматов видеокодирования, таких как Theora , VP8 и VP9, было создание ( свободного ) стандарта видеокодирования, охватываемого только бесплатными патентами. [37] Статус патента также был основным предметом споров при выборе видеоформатов, которые основные веб-браузеры будут поддерживать внутри HTML-тега видео .
Формат кодирования видео текущего поколения — HEVC (H.265), представленный в 2013 году. AVC использует целочисленное DCT с размерами блоков 4x4 и 8x8, а HEVC использует целочисленное преобразование DCT и DST с различными размерами блоков от 4x4 до 32x32. [38] HEVC широко запатентован, в основном Samsung Electronics , GE , NTT и JVCKenwood . [39] Этому бросает вызов формат AV1 , предназначенный для свободной лицензии. По состоянию на 2019 год [обновлять]AVC является наиболее часто используемым форматом для записи, сжатия и распространения видеоконтента, который используется 91% разработчиков видео, за ним следует HEVC, который используется 43% разработчиков. [33]
Потребительское видео обычно сжимается с использованием видеокодеков с потерями , поскольку в результате получается файл значительно меньшего размера, чем при сжатии без потерь . Некоторые форматы видеокодирования специально разработаны для сжатия с потерями или без потерь, а некоторые форматы видеокодирования, такие как Dirac и H.264 , поддерживают оба варианта. [49]
Несжатые видеоформаты, такие как Clean HDMI , представляют собой форму видео без потерь, используемую в некоторых случаях, например, при отправке видео на дисплей через соединение HDMI . Некоторые камеры высокого класса также могут снимать видео непосредственно в этом формате.
Межкадровое сжатие усложняет редактирование закодированного видеоряда. [50] Одним из подклассов относительно простых форматов видеокодирования являются форматы внутрикадрового видео, такие как DV , в которых каждый кадр видеопотока сжимается независимо, без обращения к другим кадрам в потоке, и не предпринимается никаких попыток преимущество корреляции между последовательными изображениями с течением времени для лучшего сжатия. Одним из примеров является Motion JPEG , который представляет собой просто последовательность индивидуально сжатых изображений JPEG . Этот подход является быстрым и простым за счет того, что закодированное видео намного больше, чем формат кодирования видео, поддерживающий межкадровое кодирование.
Поскольку межкадровое сжатие копирует данные из одного кадра в другой, если исходный кадр просто вырезается (или теряется при передаче), последующие кадры не могут быть восстановлены должным образом. Выполнять «разрезы» видео с внутрикадровым сжатием при редактировании видео почти так же просто, как редактировать несжатое видео: можно найти начало и конец каждого кадра и просто побитно копировать каждый кадр, который нужно сохранить, и отбрасывать кадры, которые не нужны. Еще одно различие между внутрикадровым и межкадровым сжатием заключается в том, что во внутрикадровых системах каждый кадр использует одинаковый объем данных. В большинстве межкадровых систем определенные кадры (например, « I-кадры » в MPEG-2 ) не могут копировать данные из других кадров, поэтому им требуется гораздо больше данных, чем другим кадрам поблизости. [51]
Можно создать компьютерный видеоредактор, который выявляет проблемы, возникающие при редактировании I кадров, в то время как они нужны другим кадрам. Это позволило использовать для редактирования новые форматы, такие как HDV . Однако этот процесс требует гораздо большей вычислительной мощности, чем редактирование внутрикадрового сжатого видео с тем же качеством изображения. Но это сжатие не очень эффективно использовать для любого аудиоформата. [52]
Формат кодирования видео может определять дополнительные ограничения для кодируемого видео, называемые профилями и уровнями. Можно иметь декодер, который поддерживает декодирование только подмножества профилей и уровней данного видеоформата, например, чтобы сделать программу/аппаратное обеспечение декодера меньше, проще или быстрее. [53]
Профиль ограничивает разрешенные методы кодирования. Например, формат H.264 включает в себя профили baseline , main и high (и другие). В то время как P-срезы (которые можно прогнозировать на основе предыдущих срезов) поддерживаются во всех профилях, B-срезы (которые можно прогнозировать на основе как предыдущих, так и последующих срезов) поддерживаются в основном и высоком профилях, но не в базовом профиле . [54]
Уровень — это ограничение на такие параметры, как максимальное разрешение и скорость передачи данных . [54]
Значительный прогресс в методологии кодирования изображений произошел с введением концепции гибридного преобразования/кодирования DPCM (Habibi, 1974).
H.263 похож на H.261, но более сложен. В настоящее время это наиболее широко используемый международный стандарт сжатия видео для видеотелефонии на телефонных линиях ISDN (цифровая сеть с интеграцией услуг).