Як працуе відэакодэк. Частка 2. Што, для чаго, як

Першая частка: Асновы працы з відэа і выявамі

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Што? Відэакодэк - гэта частка праграмнага / апаратнага забеспячэння, якая сціскае і / або распакоўваюць лічбавае відэа.

Для чаго? Нягледзячы на ​​пэўныя абмежаванні як па прапускной здольнасці так і
і па колькасці месца для захоўвання дадзеных, рынак патрабуе ўсё больш якаснага відэа. Узгадваеце, як у мінулым пасце мы падлічылі неабходны мінімум для 30 кадраў у секунду, 24 біта на піксель, з дазвол 480×240? Атрымалі 82,944 Мбіт/с без сціску. Сціск - гэта пакуль адзіны спосаб наогул перадаваць HD/FullHD/4K на тэлевізійныя экраны і ў Інтэрнэт. Як гэта робіцца? Цяпер коратка разгледзім асноўныя метады.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Пераклад зроблены пры падтрымцы кампаніі EDISON Software.

Мы займаемся інтэграцыяй сістэм відэаназірання, а таксама распрацоўваем мікратамограф.

Кодэк vs Кантэйнер

Распаўсюджаная памылка пачаткоўцаў - блытаць кодэк лічбавага відэа і кантэйнер лічбавага відэа. Кантэйнерам гэта нейкі фармат. Абгортка, якая змяшчае метададзеныя відэа (і, магчыма, аўдыё). Сціснутае відэа можна разглядаць як карысную нагрузку кантэйнера.

Звычайна пашырэнне відэафайла паказвае на яго разнавіднасць кантэйнера. Напрыклад, файл video.mp4, верагодна, з'яўляецца кантэйнерам. MPEG-4, частка 14, а файл з імем video.mkv - гэта, хутчэй за ўсё, матрошка. Каб быць цалкам упэўненым у кодэку і фармаце кантэйнера, можна скарыстацца FFmpeg або MediaInfo.

Трохі гісторыі

Перш чым пяройдзем да Як?, давайце злёгку пагрузімся ў гісторыю, каб крыху лепш разумець некаторыя старыя кодэкі.

Відэакодэк H.261 з'явіўся ў 1990 годзе (тэхнічна - у 1988) і быў створаны для працы з хуткасцю перадачы дадзеных 64 Кбіт / с. У ім ужо выкарыстоўваліся такія ідэі, як каляровая субдыскрэтызацыя, макраблокі і да т.п. У 1995 годзе быў апублікаваны стандарт відэакодэка H.263, які развіваўся да 2001 года.

У 2003 годзе была завершана першая версія H.264 / AVC. У тым жа годзе кампанія «TrueMotion» выпусціла свой бясплатны відэакодэк, які сціскае відэа са стратамі пад назвай VP3. У 2008 годзе Google купіў гэтую кампанію, выпусціўшы VP8 у тым жа годзе. У снежні 2012 года Google выпусціў VP9, і ён падтрымліваецца прыкладна на ¾ рынку браўзэраў (уключаючы мабільныя прылады).

AV1 - гэта новы бясплатны відэакодэк з адкрытым зыходным кодам, распрацаваны Альянсам за адкрытыя медыя (AOMedia), у склад якога ўваходзяць найвядомыя кампаніі, як-то: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel і Cisco. Першая версія кодэка 0.1.0 была апублікавана 7 красавіка 2016 года.

Нараджэнне AV1

У пачатку 2015 года Google працаваў над VP10, Xiph (які належыць Mozilla) працаваў над Даала, а Cisco зрабіла свой бясплатны відэакодэк пад назвай Тора.

Затым MPEG LA спачатку абвясціла гадавыя ліміты для HEVC (H.265) і плату, у 8 разоў вышэй, чым за H.264, але неўзабаве яны зноў змянілі правілы:

без гадавога ліміту,
плата за кантэнт (0,5% ад выручкі) і
плата за адзінку прадукцыі прыкладна ў 10 разоў вышэйшая, чым за H.264.

Альянс за адкрытыя медыя быў створаны кампаніямі з розных сфер: вытворцамі абсталявання (Intel, AMD, ARM, Nvidia, Cisco), пастаўшчыкамі кантэнту (Google, Netflix, Amazon), стваральнікамі браўзэраў (Google, Mozilla) і іншымі.

У кампаній была агульная мэта - відэакодэк без ліцэнзійных адлічэнняў. Затым з'яўляецца AV1 са значна прасцейшай патэнтнай ліцэнзіяй. Цімаці Б. Тэрыберы зрабіў страшэнную прэзентацыю, якая стала крыніцай бягучай канцэпцыі AV1 і яе мадэлі ліцэнзіі.

Вы будзеце здзіўлены, даведаўшыся, што можна аналізаваць кодэк AV1 праз браўзэр (якія зацікавіліся могуць перайсці па адрасе aomanalyzer.org).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Універсальны кодэк

Разбяром асноўныя механізмы, якія ляжаць у аснове ўніверсальнага відэакодэка. Большасць з гэтых канцэпцый карысныя і выкарыстоўваюцца ў сучасных кодэках, такіх як VP9, AV1 и HEVC. Папярэджваю, што шмат якія тлумачаныя рэчы будуць спрошчаны. Часам будуць выкарыстоўвацца рэальныя прыклады (як у выпадку з H.264) для дэманстрацыі тэхналогій.

1-й крок - разбіццё малюнка

Першым крокам з'яўляецца падзел кадра на некалькі раздзелаў, падраздзелаў і далей.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Для чаго? Ёсць мноства прычын. Калі дробім карцінку, можна дакладней прагназаваць вектар руху, выкарыстоўваючы невялікія часткі для маленькіх рухомых частак. У той час як для статычнага фону можна абмежавацца і буйнейшымі часткамі.

Звычайна кодэкі арганізуюць гэтыя часткі ў секцыі (ці фрагменты), макраблокі (ці блокі дрэва кадавання) і мноства падраздзелаў. Максімальны памер гэтых частак вар'іруецца, HEVC усталёўвае 64×64, у той час як AVC выкарыстоўвае 16×16, а падраздзелы могуць драбніцца да памераў 4×4.

Узгадваеце разнавіднасці кадраў з мінулага артыкула?! Гэта ж можна прымяніць і да блокаў, так што, у нас могуць быць I-фрагмент, B-блок, P-макраблок і да т.п.

Для жадаючых папрактыкавацца - паглядзіце як малюнак разаб'ецца на раздзелы і падраздзелы. Для гэтага можна скарыстацца ўжо згаданым у мінулым артыкуле Intel Video Pro Analyzer (Той, што платны, але з бясплатным выпрабавальнай версіяй, якая мае абмежаванне на першыя 10 кадраў). Тут прааналізаваны раздзелы VP9:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

2-гі крок - прагназаванне

Як толькі ў нас з'явіліся раздзелы, мы можам складаць астралагічныя прагнозы па іх. Для INTER-прагназавання неабходна перадаць вектары руху і рэшту, а для INTRA-прагназавання перадаецца напрамак прагнозу і рэшту.

3-ці крок - пераўтварэнне

Пасля таго, як атрымаем рэшткавы блок (прадказаная частка → рэальная частка), магчыма пераўтварыць яго такім чынам, каб ведаць, якія пікселі можна адкінуць, захоўваючы пры гэтым агульная якасць. Ёсць некаторыя пераўтварэнні, якія забяспечваюць дакладныя паводзіны.

Хоць ёсць і іншыя метады, разгледзім больш падрабязна дыскрэтнае косінуснае пераўтварэнне (DCT - ад дыскрэтнае косінуснае пераўтварэнне). Асноўныя функцыі DCT:

  • Пераўтворыць блокі пікселяў у аднолькавыя па памеры блокі частотных каэфіцыентаў.
  • Ушчыльняе магутнасць, дапамагаючы ўхіляць прасторавую надмернасць.
  • Забяспечвае зварачальнасць.

2 лютага 2017 года Сінттра Р.Дж. (Cintra, RJ) і Баер Ф.М. (Bayer FM) апублікавалі артыкул пра DCT-падобнае пераўтварэнне для сціску малюнкаў, якое патрабуе толькі 14 дадаткаў.

Не хвалюйцеся, калі не зразумелі пераваг кожнага пункта. Цяпер на канкрэтных прыкладах пераканаемся ў іх рэальнай каштоўнасці.

Давайце возьмем такі блок пікселяў 8×8:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Гэты блок рэндэрыцца ў наступную выяву 8 на 8 піскеляў:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Ужыем DCT да гэтага блока пікселяў і атрымліваем блок каэфіцыентаў памерам 8×8:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

І калі адрэндэрым гэты блок каэфіцыентаў, атрымаем такі малюнак:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Як бачым, гэта не падобна на зыходны малюнак. Можна заўважыць, што першы каэфіцыент моцна адрозніваецца ад усіх астатніх. Гэты першы каэфіцыент вядомы як DC-каэфіцыент, які прадстаўляе ўсе выбаркі ва ўваходным масіве, нешта падобнае на сярэдняе значэнне.

У гэтага блока каэфіцыентаў ёсць цікавая ўласцівасць: ён адлучае высокачашчынныя кампаненты ад нізкачашчынных.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

У малюнку вялікая частка магутнасці сканцэнтравана на ніжэйшых частотах, таму, калі пераўтварыць малюнак у яго частотныя кампаненты і адкінуць больш высокія частотныя каэфіцыенты, можна паменшыць колькасць дадзеных, неабходных для апісання малюнка, не занадта ахвяруючы якасцю карцінкі.

Частата азначае, наколькі хутка мяняецца сігнал.

Давайце паспрабуем прымяніць веды, атрыманыя ў тэставым прыкладзе, пераўтварыўшы зыходны малюнак у яго частату (блок каэфіцыентаў), выкарыстоўваючы DCT, а затым адкінуўшы частку найменш важных каэфіцыентаў.

Спачатку канвертоўны яго ў частотную вобласць.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Далей адкідаем частку (67%) каэфіцыентаў, у асноўным ніжнюю правую частку.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Нарэшце, аднаўляем малюнак з гэтага адкінутага блока каэфіцыентаў (падушыце, яно павінна быць зварачальным) і параўноўваем з арыгіналам.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Бачым, што яна нагадвае зыходную выяву, але ёсць шмат адрозненняў ад арыгінала. Мы выкінулі 67,1875% і ўсё ж атрымалі нешта, што нагадвае першакрыніцу. Можна было больш прадумана адкінуць каэфіцыенты, каб атрымаць малюнак яшчэ лепшай якасці, але гэта ўжо наступная тэма.

Кожны каэфіцыент фарміруецца з выкарыстаннем усіх пікселяў

Важна: кожны каэфіцыент напрамую не адлюстроўваецца на адзін піксель, а ўяўляе сабой узважаную суму ўсіх пікселяў. Гэты дзіўны графік паказвае, як разлічваецца першы і другі каэфіцыент з выкарыстаннем шаляў, унікальных для кожнага індэкса.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Вы таксама можаце паспрабаваць візуалізаваць DCT, зірнуўшы на простае фарміраванне выявы на яго аснове. Напрыклад, вось сімвал A, які фарміруецца з выкарыстаннем кожнай вагі каэфіцыента:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

4-ы крок - квантаванне

Пасля таго як на папярэднім кроку выкідваем некаторыя каэфіцыенты, на апошнім кроку (пераўтварэнне), вырабляем адмысловую форму квантавання. На гэтым этапе дапушчальна губляць інфармацыю. Або, прасцей кажучы, будзем квантаваць каэфіцыенты для дасягнення сціску.

Як можна квантаваць блок каэфіцыентаў? Адным з самых простых метадаў будзе раўнамернае квантаванне, калі бярэм блок, дзелім яго на адно значэнне (на 10) і акругляем тое, што атрымалася.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Ці можам звярнуць гэты блок каэфіцыентаў? Так, можам, памножыўшы на тое самае значэнне, на якія дзялілі.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Гэты падыход не самы лепшы, бо ён не ўлічвае важнасць кожнага каэфіцыента. Можна было б выкарыстоўваць матрыцу квантавальнікаў замест аднаго значэння, а гэтая матрыца можа выкарыстоўваць уласцівасць DCT, квантуючы большасць ніжніх правых і меншасць верхніх левых.

5 крок - энтрапійнае кадаваньне

Пасля таго, як мы квантавалі дадзеныя (блокі малюнкаў, фрагменты, кадры), усё яшчэ можам сціскаць іх без страт. Існуе шмат алгарытмічных спосабаў сціску дадзеных. Мы збіраемся коратка пазнаёміцца ​​з некаторымі з іх, для больш глыбокага разумення вы можаце прачытаць кнігу "Разбіраемся са сціскам: сціск дадзеных для сучасных распрацоўшчыкаў" («Understanding Compression: Data Compression for Modern Developers»).

Кадаваньне відэа з дапамогай VLC

Дапусцім, у нас ёсць паток сімвалаў: a, e, r и t. Імавернасць (у межах ад 0 да 1) таго, як часта сустракаецца кожны знак у струмені, прадстаўлена ў гэтай табліцы.

a e r t
Верагоднасць 0,3 0,3 0,2 0,2

Мы можам прысвоіць унікальныя двайковыя коды (пераважна малыя) найболей верагодным, а буйнейшыя коды - меней верагодным.

a e r t
Верагоднасць 0,3 0,3 0,2 0,2
Бінарны код 0 10 110 1110

Сціскаем струмень, мяркуючы, што ў выніку выдаткуем 8 біт на кожны знак. Без сціску на сімвал спатрэбілася б 24 біты. Калі кожны знак замяняць на яго код, тое атрымліваецца эканомія!

Першы крок заключаецца ў кадаванні сімвала e, які роўны 10, а другі сімвал - гэта a, які дадаецца (не матэматычным спосабам): [10] [0], і, нарэшце, трэці сімвал t, які робіць наш фінальны сціснуты бітавы струмень роўным [10] [0] [1110] ці ж 1001110, для чаго патрабуецца ўсяго 7 біт (у 3,4 разы менш месцы, чым у арыгінале).

Звярніце ўвагу, што кожны код павінен быць унікальным кодам з прэфіксам. Алгарытм Хафмана дапаможа знайсці гэтыя лічбы. Хоць дадзены спосаб не без заган, існуюць відэакодэкі, якія ўсё яшчэ прапануюць гэты алгарытмічны метад для сціску.

І кодэр, і дэкодэр павінны мець доступ да табліцы сімвалаў са сваімі бінарнымі кодамі. Таму таксама неабходна адправіць ва ўваходных дадзеных і табліцу.

Арыфметычнае кадаваньне

Дапусцім, у нас ёсць паток сімвалаў: a, e, r, s и t, І іх верагоднасць прадстаўлена гэтай табліцай.

a e r s t
Верагоднасць 0,3 0,3 0,15 0,05 0,2

З гэтай табліцай пабудуем дыяпазоны, якія змяшчаюць усе магчымыя знакі, адсартаваныя па найвялікай колькасці.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Цяпер давайце закадуем паток з трох сімвалаў: ёсць.

Спачатку выбіраемы першы сімвал e, Які знаходзіцца ў паддыяпазоне ад 0,3 да 0,6 (не ўключаючы). Бярэм гэты паддыяпазон і зноў дзелім яго ў тых жа прапорцыях, што і раней, але ўжо для гэтага новага дыяпазону.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Давайце працягнем кадзіраваць наш паток ёсць. Цяпер бярэм другі сімвал a, які знаходзіцца ў новым паддыяпазоне ад 0,3 да 0,39, а затым бярэм наш апошні сімвал t і, паўтараючы той жа працэс зноў, атрымліваем апошні паддыяпазон ад 0,354 да 0,372.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Нам проста трэба абраць лік у апошнім паддыяпазоне ад 0,354 да 0,372. Давайце абярэм 0,36 (але можна абраць і любы іншы лік у гэтым паддыяпазоне). Толькі з гэтым лікам зможам аднавіць наш арыгінальны паток. Гэта як калі б мы малявалі лінію ў межах дыяпазонаў для кадавання нашага патоку.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Зваротная аперацыя (то бок дэкадаванне) гэтак жа простая: з нашым лікам 0,36 і нашым зыходным дыяпазонам можам запусціць той жа працэс. Але зараз, выкарыстоўваючы гэты лік, выяўляем струмень, закадаваны з дапамогай гэтага ліку.

З першым дыяпазонам заўважаем, што наша колькасць адпавядае зрэзу, такім чынам, гэта наш першы сімвал. Цяпер зноў падзяляем гэты паддыяпазон, выконваючы той жа працэс, што і раней. Тут можна заўважыць, што 0,36 адпавядае знаку a, і пасля паўтарэння працэсу мы прыйшлі да апошняга сімвала t (фармуючы наш зыходны кадаваны струмень ёсць).

І для кодэра і для дэкодэра павінна быць у наяўнасці табліца верагоднасцяў знакаў, таму неабходна ва ўваходных дадзеных адправіць і яе.

Даволі элегантна, ці не так? Хтосьці, які прыдумаў гэтае рашэнне, быў страшэнна разумны. Некаторыя відэакодэкі выкарыстоўваюць гэтую тэхніку (ці, ва ўсякім разе, прапануюць яе ў якасці опцыі).

Ідэя складаецца ў тым, каб сціснуць без страт квантаваны бітавы струмень. Напэўна, у гэтым артыкуле адсутнічаюць тоны дэталяў, прычын, кампрамісаў і г.д. Але вы, калі з'яўляецеся распрацоўшчыкам, павінны ведаць больш. Новыя кодэкі спрабуюць выкарыстоўваць розныя алгарытмы энтрапійнага кадавання, такія як ANS.

6 крок - фармат бітавага патоку

Пасля таго, як зрабілі ўсё гэта, засталося распакаваць сціснутыя кадры ў кантэксце выкананых крокаў. Неабходна відавочна інфармаваць дэкодэр аб рашэннях, прынятых кодэрам. Дэкодэру павінна быць прадстаўлена ўся неабходная інфармацыя: бітавая глыбіня, каляровая прастора, дазвол, інфармацыя аб прагнозах (вектары руху, накіраванае INTER-прагназаванне), профіль, узровень, частата кадраў, тып кадра, нумар кадра і шматлікае іншае.

Мы павярхоўна азнаёмімся з бітавай плынню H.264. Нашым першым крокам з'яўляецца стварэнне мінімальнага бітавага струменя H.264 (FFmpeg па змаўчанні дадае ўсе параметры кадавання, такія як SEI NAL - ледзь далей даведаемся, што гэта такое). Можам зрабіць гэта, выкарыстоўваючы наш уласны рэпазітар і FFmpeg.

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

Дадзеная каманда згенеруе неапрацаваны бітавы паток. H.264 з адным кадрам, дазволам 64×64, з каляровай прасторай YUV420. Пры гэтым выкарыстоўваецца ў якасці кадра наступны малюнак.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Бітовы паток H.264

Стандарт AVC (H.264) вызначае, што інфармацыя будзе адпраўляцца ў макрокадрах (у разуменні сеткі), званых НАЛ (гэта такі ўзровень абстракцыі сеткі). Асноўнай мэтай NAL з'яўляецца прадастаўленне "дружалюбнага да сеткі" прадстаўлення відэа. Гэты стандарт павінен працаваць на тэлевізарах (на аснове патокаў), у Інтэрнеце (на аснове пакетаў).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Існуе маркер сінхранізацыі для вызначэння межаў элементаў NAL. Кожны маркер сінхранізацыі змяшчае значэнне 0x00 0x00 0x01, за выключэннем самага першага, які роўны 0x00 0x00 0x00 0x01. Калі запусцім шаснаццатковы дамп для згенераванага бітавага струменя H.264, то ідэнтыфікуем па меншай меры тры патэрна NAL ў пачатку файла.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Як гаварылася, дэкодэр павінен ведаць не толькі дадзеныя выявы, але таксама і дэталі відэа, кадра, колеры, выкарыстоўваныя параметры і шматлікае іншае. Першы байт кожнага NAL вызначае яго катэгорыю і тып.

Ідэнтыфікатар тыпу NAL Апісанне
0 Невядомы тып
1 Кадаваны фрагмент выявы без IDR
2 Кадаваны раздзел дадзеных зрэзу A
3 Кадаваны раздзел дадзеных зрэзу B
4 Кадаваны раздзел дадзеных зрэзу C
5 Кадаваны IDR-фрагмент IDR-малюнка
6 Дадатковая інфармацыя аб пашырэнні SEI
7 Набор параметраў SPS-паслядоўнасці
8 Набор параметраў PPS-малюнка
9 Раздзяляльнік доступу
10 Канец паслядоўнасці
11 Канец патоку
... ...

Звычайна першым NAL бітавага патоку з'яўляецца PLC. Гэты тып NAL адказвае за інфармаванне аб агульных зменных кадавання, такіх як профіль, узровень, дазвол і іншае.

Калі прапусціць першы маркер сінхранізацыі, то можам дэкадаваць першы байт, каб пазнаць, які тып NAL з'яўляецца першым.

Напрыклад, першы байт пасля маркера сінхранізацыі роўны. 01100111, дзе першы біт (0) знаходзіцца ў полі forbidden_zero_bit. Наступныя 2 біта (11) паведамляе нам поле nal_ref_idc, якое паказвае, ці з'яўляецца гэты NAL спасылкавым полем ці не. І астатнія 5 біт (00111) паведамляе нам поле nal_unit_type, у дадзеным выпадку гэта блок SPS (7) NAL.

Другі байт (двайковы=01100100, шаснаццатковы=0x64, сьнежня=100) у SPS NAL — гэтае поле profile_idc, якое паказвае профіль, які выкарыстоўваў кодэр. У дадзеным выпадку выкарыстоўваўся абмежаваны высокі профіль (г.зн. высокі профіль без падтрымкі двунакіраванага B-сегмента).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Калі азнаёміцца ​​са спецыфікацыяй бітавага струменя H.264 для SPS NAL, то выявім шмат значэнняў для імя параметра, катэгорыі і апісанні. Напрыклад, давайце паглядзім на палі pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

Назва параметра катэгорыя Апісанне
pic_width_in_mbs_minus_1 0 ue(v)
pic_height_in_map_units_minus_1 0 ue(v)

Калі выканаць некаторыя матэматычныя аперацыі са значэннямі гэтых палёў, то атрымаем дазвол. Можна ўявіць 1920 x 1080, выкарыстоўваючы pic_width_in_mbs_minus_1 са значэннем 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Ізноў жа, эканомячы месца, замест кадавання 1920 зрабілі гэта са 119.

Калі працягнуць праверку нашага створанага відэа ў двайковым выглядзе (напрыклад: xxd -b -c 11 v/minimal_yuv420.h264), то можна перайсці да апошняга NAL, які з'яўляецца самім кадрам.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Тут бачым яго першыя 6 байтавых значэнняў: 01100101 10001000 10000100 00000000 00100001 11111111. Паколькі вядома, што першы байт паказвае на тып NAL, у дадзеным выпадку (00101) гэта IDR фрагмент (5), і тады атрымаецца дадаткова даследаваць яго:

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Выкарыстоўваючы інфармацыю спецыфікацыі, атрымаецца дэкадаваць тып фрагмента (slice_type) і нумар кадра (frame_num) сярод іншых важных палёў.

Каб атрымаць значэння некаторых палёў (ue(v), me(v), se(v) або te(v)), нам трэба дэкадаваць фрагмент, выкарыстоўваючы спецыяльны дэкодэр, заснаваны на экспанентным кодзе Голомба. Гэты метад вельмі эфектыўны для кадавання значэнняў зменных, асабліва калі ёсць шмат значэнняў па змаўчанні.

Значэнні slice_type и frame_num гэтага відэа роўныя 7 (I-фрагмент) і 0 (першы кадр).

Бітовы струмень можна разглядаць як пратакол. Калі жадаеце пазнаць больш аб бітавым струмені, варта звярнуцца да спецыфікацыі ITU H.264. Вось макрасхема, якая паказвае, дзе знаходзяцца дадзеныя выявы (YUV у сціснутым выглядзе).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Можна даследаваць і іншыя бітавыя патокі, такія як VP9, H.265 (HEVC) ці нават наш новы лепшы бітавы паток AV1. Ці ўсе яны падобныя? Не, але разабраўшыся хаця б з адным - значна прасцей зразумець астатнія.

Жадаеце папрактыкавацца? Даследуйце струмень бітаў H.264

Можна згенераваць аднакадровае відэа і выкарыстоўваць MediaInfo для даследавання патоку бітаў H.264. Фактычна, нішто не мяшае нават паглядзець зыходны код, які аналізуе струмень бітаў H.264 (AVC).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Для практыкі можна выкарыстоўваць Intel Video Pro Analyzer (я ўжо накшталт казаў, што праграма платная, але ёсць бясплатная выпрабавальная версія, з абмежаваннем на 10 кадраў?).

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Агляд

Адзначым, што многія сучасныя кодэкі выкарыстоўваюць тую ж самую мадэль, якую толькі што вывучылі. Вось, давайце зірнем на блок-схему відэакодэка Тора. Яна змяшчае ўсе крокі, намі пройдзеныя. Увесь сэнс гэтай нататкі ў тым, каб вы, прынамсі, лепш разумелі інавацыі і дакументацыю з гэтай вобласці.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Раней разлічылі, што запатрабуецца 139 Гб дыскавай прасторы для захоўвання відэафайла працягласцю адну гадзіну пры якасці 720p і 30 fps. Калі выкарыстоўваць метады, якія разабралі ў гэтым артыкуле (міжкадравыя і ўнутраныя прагнозы, пераўтварэнне, квантаванне, энтрапійнае кадаваньне і да т.п.), то можна дасягнуць (зыходзячы з таго, што трацім 0,031 біт на піксель), відэа цалкам здавальняючай якасці, якое займае усяго 367,82 Мб, а не 139 Гб памяці.

Як H.265 дасягае лепшай ступені сціску, чым H.264?

Цяпер, калі вядома больш пра тое, як працуюць кодэкі, прасцей разбірацца, як новыя кодэкі здольныя забяспечваць больш высокае дазвол з меншай колькасцю бітаў.

Калі параўноўваць AVC и HEVC, варта не забываць, што гэта амаль заўсёды выбар паміж большай нагрузкай на CPU і ступенню сціску.

HEVC мае больш варыянтаў раздзелаў (і падраздзелаў), чым AVC, больш напрамкаў унутранага прагназавання, палепшанае энтрапійнае кадаваньне і многае іншае. Усе гэтыя паляпшэнні зрабілі H.265 здольным сціскаць на 50% больш, чым H.264.

Як працуе відэакодэк. Частка 2. Што, для чаго, як

Першая частка: Асновы працы з відэа і выявамі

Крыніца: habr.com

Дадаць каментар