Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бірінші бөлім: Бейне және бейнелермен жұмыс істеу негіздері

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Не? Бейне кодек - бұл сандық бейнені қысатын және/немесе ашатын бағдарламалық құрал/аппараттық құрал.

Не үшін? Белгілі бір шектеулерге қарамастан өткізу қабілеттілігі жағынан да
және деректерді сақтау кеңістігі тұрғысынан нарық бейненің жоғары сапасын талап етеді. Соңғы постта 30x24 рұқсатымен секундына 480 кадр, пиксельге 240 бит үшін қажетті минимумды қалай есептегеніміз есіңізде ме? Біз қысусыз 82,944 Мбит/с алдық. Қазіргі уақытта сығымдау HD/FullHD/4K форматын теледидар экрандары мен Интернетке жалпы жіберудің жалғыз жолы болып табылады. Бұған қалай қол жеткізілді? Енді негізгі әдістерге қысқаша тоқталайық.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Аударма EDISON Software қолдауымен жасалды.

Біз айналысамыз бейнебақылау жүйелерін біріктіру, және де біз микротомограф жасап жатырмыз.

Кодек және контейнер

Жаңадан бастаушылар жиі жіберетін қателік - сандық бейне кодек пен сандық бейне контейнерін шатастыру. Контейнер - белгілі бір пішім. Бейне (және мүмкін аудио) метадеректері бар қаптама. Қысылған бейнені контейнердің пайдалы жүктемесі ретінде қарастыруға болады.

Әдетте, бейне файлдың кеңейтімі оның контейнер түрін көрсетеді. Мысалы, video.mp4 файлы контейнер болуы мүмкін MPEG-4 14 бөлігі, және video.mkv деп аталатын файл болуы ықтимал матрешка. Кодек пен контейнер пішіміне толық сенімді болу үшін пайдалануға болады FFmpeg немесе MediaInfo.

Біраз тарих

Біз жеткенше Қалай?, кейбір ескі кодектерді жақсырақ түсіну үшін тарихқа аздап шолу жасайық.

Бейне кодек H.261 1990 жылы пайда болды (техникалық - 1988 жылы) және 64 Кбит/с деректерді беру жылдамдығымен жұмыс істеу үшін құрылды. Ол қазірдің өзінде түстерді таңдау, макроблоктар және т.б. сияқты идеяларды қолданды. Бейне кодек стандарты 1995 жылы жарияланды H.2632001 жылға дейін дамыған.

Бірінші нұсқасы 2003 жылы аяқталды H.264 / AVC. Сол жылы TrueMotion өзінің тегін жоғалтқан бейне кодегін шығарды VP3. Google компанияны 2008 жылы сатып алып, шығарды VP8 сол жылы. 2012 жылдың желтоқсанында Google шығарды VP9, және ол браузер нарығының шамамен ¾ бөлігінде (мобильді құрылғыларды қоса) қолдау көрсетеді.

AV1 әзірлеген жаңа тегін және ашық бастапқы бейне кодек болып табылады Ашық БАҚ үшін альянс (AOMedia), оған ең танымал компаниялар кіреді, мысалы: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel және Cisco. Кодектің бірінші нұсқасы 0.1.0 7 жылдың 2016 сәуірінде жарияланды.

AV1 туылуы

2015 жылдың басында Google жұмыс істеді VP10Xiph (Mozilla-ға тиесілі) жұмыс істеп жатыр Дала, және Cisco өзінің тегін бейне кодектерін жасады Thor.

содан кейін MPEG LA үшін алғашқы жарияланған жылдық шектеулер HEVC (H.265) және төлем H.8 үшін қарағанда 264 есе жоғары, бірақ олар көп ұзамай ережелерді қайтадан өзгертті:

жылдық шектеу жоқ,
контент үшін төлем (табыстың 0,5%) және
бірлік ақысы H.10-тен шамамен 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 оны 64x64 етіп орнатады, ал AVC 16x16 пайдаланады және ішкі бөлімдерді 4x4 өлшемге дейін бөлуге болады.

Соңғы мақаладағы жақтаудың түрлері есіңізде ме?! Блоктарға да қолдануға болады, сондықтан бізде I-фрагменті, В-блок, P-макроблок және т.б.

Жаттығуды қалайтындар үшін кескіннің бөлімдер мен бөлімдерге қалай бөлінгенін қараңыз. Мұны істеу үшін сіз алдыңғы мақалада айтылғанды ​​пайдалана аласыз. Intel Video Pro Analyzer (ақылы, бірақ алғашқы 10 кадрмен шектелген тегін сынақ нұсқасымен). Мұнда бөлімдер талданады VP9:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

2-ші қадам – болжау

Бөлімдерді алғаннан кейін біз олар үшін астрологиялық болжамдар жасай аламыз. Үшін INTER болжамдары аударылуы керек қозғалыс векторлары ал қалғаны, ал INTRA болжау үшін ол беріледі болжам бағыты және қалғаны.

3-ші қадам – трансформация

Бізде қалдық блок (болжамды бөлім → нақты бөлім) болғаннан кейін оны жалпы сапаны сақтай отырып, қандай пикселдерді жоюға болатынын білетін етіп түрлендіруге болады. Нақты мінез-құлықты қамтамасыз ететін кейбір түрлендірулер бар.

Басқа әдістер бар болса да, оларды толығырақ қарастырайық. дискретті косинус түрлендіру (DCT Қайдан дискретті косинус түрлендіру). DCT негізгі функциялары:

  • Пиксель блоктарын жиілік коэффициенттерінің бірдей өлшемді блоктарына түрлендіреді.
  • Кеңістіктегі артықшылықты жоюға көмектесу үшін қуатты конденсациялайды.
  • Қайтымдылықты қамтамасыз етеді.

2 ақпан 2017 ж. Sintra R.J. (Cintra, RJ) және Bayer F.M. (Bayer FM) тек 14 толықтыруды қажет ететін кескінді қысу үшін DCT тәрізді түрлендіру туралы мақала жариялады.

Әрбір заттың пайдасын түсінбесеңіз, уайымдамаңыз. Енді олардың нақты құнын көру үшін нақты мысалдарды қолданайық.

Осы 8x8 пиксел блогын алайық:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бұл блок келесі 8-8 пиксельдік кескінге беріледі:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Осы пикселдер блогына DCT қолданыңыз және 8x8 коэффициенттер блогын алыңыз:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Ал егер осы коэффициенттер блогын шығарсақ, келесі суретті аламыз:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Көріп отырғаныңыздай, ол бастапқы суретке ұқсамайды. Бірінші коэффициенттің басқаларынан айтарлықтай ерекшеленетінін көруге болады. Бұл бірінші коэффициент тұрақты ток коэффициенті ретінде белгілі, ол кіріс массивіндегі барлық үлгілерді көрсетеді, орташа сияқты.

Бұл коэффициенттер блогының қызықты қасиеті бар: ол жоғары жиілікті құрамдастарды төмен жиіліктен ажыратады.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Кескінде қуаттың көп бөлігі төменгі жиіліктерде шоғырланған, сондықтан кескінді оның жиілік құрамдастарына түрлендірсеңіз және жоғары жиілік коэффициенттерін алып тастасаңыз, тым көп сурет сапасын жоғалтпай кескінді сипаттау үшін қажетті деректер көлемін азайтуға болады.

Жиілік сигналдың қаншалықты жылдам өзгеретінін білдіреді.

Тест жағдайында алынған білімді DCT көмегімен бастапқы кескінді оның жиілігіне (коэффициенттер блогына) түрлендіру, содан кейін маңызды емес коэффициенттердің бір бөлігін алып тастау арқылы қолдануға тырысайық.

Алдымен оны жиілік доменіне түрлендіреміз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Содан кейін біз коэффициенттердің бір бөлігін (67%), негізінен төменгі оң жақ бөлігін алып тастаймыз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Соңында, біз осы тасталған коэффициенттер блогынан кескінді қалпына келтіреміз (есіңізде болсын, ол инвертивті болуы керек) және оны түпнұсқамен салыстырыңыз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Оның бастапқы суретке ұқсайтынын көреміз, бірақ түпнұсқадан көптеген айырмашылықтар бар. Біз 67,1875% лақтырдық және әлі де түпнұсқаға ұқсас нәрсе алдық. Одан да жоғары сапалы кескінді алу үшін коэффициенттерді мұқият алып тастауға болады, бірақ бұл келесі тақырып.

Әрбір коэффициент барлық пикселдердің көмегімен жасалады

Маңызды: әрбір коэффициент бір пиксельге тікелей салыстырылмайды, бірақ барлық пикселдердің өлшенген сомасы болып табылады. Бұл таңғажайып график бірінші және екінші коэффициенттердің әрбір индекске тән салмақтар арқылы қалай есептелетінін көрсетеді.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Сондай-ақ, сіз оған негізделген қарапайым кескіннің қалыптасуына қарап, DCT-ті визуализациялауға тырысуға болады. Мысалы, мұнда әрбір салмақ коэффициентінің көмегімен жасалған А таңбасы берілген:

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

4-ші қадам – кванттау

Алдыңғы қадамда кейбір коэффициенттерді лақтырып тастағаннан кейін, соңғы қадамда (трансформация) кванттаудың арнайы түрін орындаймыз. Бұл кезеңде ақпаратты жоғалтуға болады. Немесе, қарапайымырақ, біз қысуға қол жеткізу үшін коэффициенттерді кванттаймыз.

Коэффициенттер блогын қалай кванттауға болады? Қарапайым әдістердің бірі - біркелкі кванттау, блокты алған кезде оны бір мәнге (10-ға) бөліп, нәтижені дөңгелектейміз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бұл коэффициенттер блогын кері қайтара аламыз ба? Иә, біз бөлген мәнге көбейте аламыз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бұл тәсіл ең жақсы емес, өйткені ол әрбір коэффициенттің маңыздылығын ескермейді. Бір мәннің орнына кванттауыштардың матрицасын қолдануға болады және бұл матрица төменгі оң жақтың көпшілігін және жоғарғы сол жақтың азшылығын кванттау арқылы DCT қасиетін пайдалана алады.

5-қадам – энтропияны кодтау

Деректерді (сурет блоктары, фрагменттер, кадрлар) кванттаудан кейін біз оны жоғалтпай қыса аламыз. Деректерді сығудың көптеген алгоритмдік тәсілдері бар. Біз олардың кейбірін жылдам қарастырамыз, тереңірек түсіну үшін «Сығымдауды түсіну: қазіргі заманғы әзірлеушілерге арналған деректерді қысу» кітабын оқуға болады.Қысуды түсіну: Қазіргі әзірлеушілерге арналған деректерді қысу«).

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. Біз іске қоссақ hexdump жасалған H.264 биттік ағыны үшін файлдың басында кемінде үш NAL үлгісін анықтаймыз.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Айтылғандай, декодер тек сурет деректерін ғана емес, сонымен қатар бейненің мәліметтерін, кадрды, түстерді, пайдаланылатын параметрлерді және т.б. білуі керек. Әрбір NAL бірінші байты оның категориясы мен түрін анықтайды.

NAL түрінің идентификаторы сипаттамасы
0 Белгісіз түрі
1 IDR жоқ кодталған кескін фрагменті
2 Кодталған кесінді деректер бөлімі A
3 Кодталған кесінді деректер бөлімі B
4 Кодталған кесінді деректер бөлімі C
5 IDR кескінінің кодталған IDR фрагменті
6 SEI кеңейтімі туралы қосымша ақпарат
7 SPS Sequence Parameter Set
8 PPS кескін параметрлерінің жинағы
9 Кіру бөлгіші
10 Тізбектің соңы
11 Жіптің соңы
... ...

Әдетте разрядтың бірінші NAL мәні болып табылады SPS. NAL бұл түрі профиль, деңгей, ажыратымдылық және т.б. сияқты жалпы кодтау айнымалылары туралы ақпарат беруге жауапты.

Бірінші синхрондау маркерін өткізіп жіберсек, қай NAL түрі бірінші екенін білу үшін бірінші байтты декодтауымызға болады.

Мысалы, синхрондау белгісінен кейінгі бірінші байт 01100111, мұнда бірінші бит (0) f өрісіндеорbidden_нөл_бит. Келесі 2 бит (11) бізге өрісті айтады nal_ref_idc, бұл NAL анықтамалық өріс екенін немесе емес екенін көрсетеді. Ал қалған 5 бит (00111) бізге өрісті айтады бірлік_түрі, бұл жағдайда бұл SPS блогы (7) NAL.

Екінші байт (екілік=01100100, алтыбақан=0x64, Dec=100) SPS-те NAL өріс болып табылады profile_idc, ол кодтаушы пайдаланған профильді көрсетеді. Бұл жағдайда шектеулі жоғары профиль пайдаланылды (яғни, екі бағытты В сегментін қолдаусыз жоғары профиль).

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Егер сіз биттік спецификацияға қарасаңыз H.264 SPS NAL үшін біз параметр атауы, санат және сипаттама үшін көптеген мәндерді табамыз. Мысалы, өрістерді қарастырайық сурет_ені_мбс_минус_1 и картадағы_сурет_биіктігі_бірлік_минус_1.

Параметр атауы санат сипаттамасы
сурет_ені_мбс_минус_1 0 ue(v)
картадағы_сурет_биіктігі_бірлік_минус_1 0 ue(v)

Егер біз осы өрістердің мәндерімен кейбір математикалық операцияларды орындасақ, біз рұқсат аламыз. Қолдану арқылы 1920 x 1080 көрсетуге болады сурет_ені_мбс_минус_1 мәні 119 ((119 + 1) * макроблок_өлшемі = 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-бөлім. Не, неге, қалай

Спецификация ақпаратын пайдалана отырып, фрагмент түрін декодтау мүмкін болады (тілім_түрі) және кадр нөмірі (кадр_саны) басқа маңызды салалармен қатар.

Кейбір өрістердің мәндерін алу үшін (ue(v), me(v), se(v) немесе te(v)), негізінде арнайы декодер көмегімен фрагментті декодтауымыз керек экспоненциалды Голомб коды. Бұл әдіс айнымалы мәндерді кодтау үшін өте тиімді, әсіресе әдепкі мәндер көп болған кезде.

Мәндер тілім_түрі и кадр_саны Бұл бейненің 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-бөлім. Не, неге, қалай

қайта қарау

Көптеген заманауи кодектер біз зерттеген модельді қолданатынын ескеріңіз. Мұнда бейне кодек блок-схемасын қарастырайық Thor. Онда біз өткен барлық қадамдар бар. Бұл жазбаның мәні - кем дегенде, сізге осы саладағы инновациялар мен құжаттаманы жақсырақ түсіну.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бұрын 139p сапасында және 720 кадр/сек жылдамдықта бір сағатқа созылатын бейне файлды сақтау үшін 30 ГБ дискілік кеңістік қажет болатыны есептелген. Егер сіз осы мақалада қарастырылған әдістерді қолдансаңыз (кадраралық және ішкі болжамдар, түрлендіру, кванттау, энтропияны кодтау және т. қанағаттанарлық сапа, 0,031 ГБ жад емес, 367,82 МБ ғана алады.

H.265 қалай H.264 қарағанда жақсырақ қысу коэффициентіне қол жеткізеді?

Енді біз кодектер қалай жұмыс істейтіні туралы көбірек білетіндіктен, жаңа кодектер аз биттермен жоғары ажыратымдылықты қалай жеткізе алатынын түсіну оңайырақ.

Салыстырсақ AVC и HEVC, бұл әрқашан үлкен CPU жүктемесі мен қысу коэффициенті арасындағы таңдау екенін есте ұстаған жөн.

HEVC қарағанда көбірек бөлім (және ішкі бөлім) опциялары бар AVC, көбірек ішкі болжау бағыттары, жақсартылған энтропия кодтауы және т.б. Бұл жақсартулардың барлығы жасалды H.265 қарағанда 50% артық сығуға қабілетті H.264.

Бейне кодек қалай жұмыс істейді? 2-бөлім. Не, неге, қалай

Бірінші бөлім: Бейне және бейнелермен жұмыс істеу негіздері

Ақпарат көзі: www.habr.com

пікір қалдыру