Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Birinci hissə: Video və şəkillərlə işləməyin əsasları

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Nə? Video kodek rəqəmsal videonu sıxan və/və ya açan proqram/aparat parçasıdır.

Nə üçün? Həm bant genişliyi baxımından, həm də müəyyən məhdudiyyətlərə baxmayaraq
və məlumat saxlama sahəsi baxımından bazar getdikcə daha yüksək keyfiyyətli video tələb edir. Son yazıda 30x24 təsvir ölçüsü ilə saniyədə 480 kadr, piksel başına 240 bit üçün tələb olunan minimumu necə hesabladığımızı xatırlayırsınızmı? Biz sıxılmadan 82,944 Mbit/s aldıq. Sıxılma hazırda HD/FullHD/4K-nı televiziya ekranlarına və İnternetə ötürməyin yeganə yoludur. Buna necə nail olunur? İndi əsas üsullara qısaca nəzər salaq.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Tərcümə EDISON Software-in dəstəyi ilə həyata keçirilib.

Biz nişanlıyıq video müşahidə sistemlərinin inteqrasiyasımikrotomoqraf hazırlayırıq.

Kodek və Konteyner

Yeni başlayanların ümumi səhvi rəqəmsal video kodek və rəqəmsal video konteynerini qarışdırmaqdır. Konteyner müəyyən bir formatdır. Video (və ola bilsin audio) metadatasını ehtiva edən sarğı. Sıxılmış videonu konteyner yükü kimi düşünmək olar.

Tipik olaraq, video faylın genişləndirilməsi onun konteyner növünü göstərir. Məsələn, video.mp4 faylı yəqin ki, konteynerdir MPEG-4 hissəsi 14, və video.mkv adlı fayl böyük ehtimalla matryoshka. Codec və konteyner formatından tam əmin olmaq üçün istifadə edə bilərsiniz FFmpeg və ya Mediaİnfo.

Bir az tarixi

Gəlməzdən əvvəl Necə?, bəzi köhnə kodekləri bir az daha yaxşı başa düşmək üçün tarixə bir az nəzər salaq.

Videokodek H.261 1990-cı ildə (texniki cəhətdən - 1988-ci ildə) meydana çıxdı və 64 Kbps məlumat ötürmə sürətində işləmək üçün yaradılmışdır. O, artıq rənglərin seçilməsi, makrobloklar və s. kimi ideyalardan istifadə edib. Video kodek standartı 1995-ci ildə nəşr edilmişdir H.2632001-ci ilə qədər inkişaf etmişdir.

İlk versiya 2003-cü ildə tamamlandı H.264 / AVC. Elə həmin il TrueMotion adlı pulsuz itkili video kodekini buraxdı VP3. Google şirkəti 2008-ci ildə satışa çıxararaq satın aldı VP8 eyni il. 2012-ci ilin dekabrında Google buraxıldı VP9, və o, brauzer bazarının təxminən ¾ hissəsində dəstəklənir (mobil cihazlar daxil olmaqla).

AV1 tərəfindən hazırlanmış yeni pulsuz və açıq mənbəli video kodekdir Açıq Media üçün Alyans (AOMedia), Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel və Cisco kimi ən məşhur şirkətləri əhatə edir. Kodekin ilk versiyası, 0.1.0, 7 aprel 2016-cı ildə nəşr olundu.

AV1-in doğulması

2015-ci ilin əvvəlində Google üzərində işləyirdi VP10Xiph (Mozilla-ya məxsusdur) üzərində işləyirdi Daala, və Cisco adlı öz pulsuz video kodekini yaratdı Thor.

Sonra MPEG LA üçün ilk elan edilmiş illik limitlər HEVC (H.265) və H.8-dən 264 dəfə yüksək ödəniş, lakin tezliklə qaydaları yenidən dəyişdilər:

illik məhdudiyyət yoxdur,
məzmun haqqı (gəlirin 0,5%-i) və
vahid haqqı H.10-dən təxminən 264 dəfə yüksəkdir.

Açıq Media üçün Alyans müxtəlif sahələrdən olan şirkətlər tərəfindən yaradılmışdır: avadanlıq istehsalçıları (Intel, AMD, ARM, Nvidia, Cisco), məzmun provayderləri (Google, Netflix, Amazon), brauzer yaradıcıları (Google, Mozilla) və s.

Şirkətlərin ümumi məqsədi var idi - qonorarsız video kodek. Sonra görünür AV1 daha sadə patent lisenziyası ilə. Timothy B. Terryberry cari AV1 konsepsiyasının və onun lisenziyalaşdırma modelinin mənşəyinə çevrilmiş heyrətamiz təqdimat etdi.

AV1 kodekini brauzer vasitəsilə təhlil edə biləcəyinizi bilmək sizi təəccübləndirəcək (maraqlananlar aomanalyzer.org).

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Universal kodek

Universal video kodekinin əsasını təşkil edən əsas mexanizmlərə baxaq. Bu anlayışların əksəriyyəti faydalıdır və kimi müasir kodeklərdə istifadə olunur VP9, AV1 и HEVC. Sizi xəbərdar edirəm ki, izah edilənlərin çoxu sadələşdiriləcək. Bəzən texnologiyaları nümayiş etdirmək üçün real dünya nümunələri (H.264 ilə olduğu kimi) istifadə olunacaq.

1-ci addım - təsvirin bölünməsi

İlk addım çərçivəni bir neçə hissəyə, alt hissələrə və kənara bölməkdir.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Nə üçün? Çoxlu səbəblər var. Şəkili böldükdə, kiçik hərəkət edən hissələr üçün kiçik hissələrdən istifadə etməklə hərəkət vektorunu daha dəqiq proqnozlaşdıra bilərik. Statik bir fon üçün özünüzü daha böyük hissələrlə məhdudlaşdıra bilərsiniz.

Kodeklər adətən bu bölmələri bölmələrə (yaxud hissələrə), makrobloklara (və ya kodlaşdırma ağacı bloklarına) və çoxlu alt bölmələrə təşkil edir. Bu bölmələrin maksimum ölçüsü dəyişir, HEVC onu 64x64-ə təyin edir, AVC isə 16x16 istifadə edir və alt bölmələr 4x4 ölçülərinə qədər bölünə bilər.

Son məqalədəki çərçivələrin növlərini xatırlayırsınızmı?! Eyni şeyi bloklara da tətbiq etmək olar, buna görə də bizdə I fraqmenti, B bloku, P-makroblok və s.

Təcrübə etmək istəyənlər üçün təsvirin bölmələrə və alt bölmələrə necə bölündüyünə baxın. Bunu etmək üçün əvvəlki məqalədə qeyd olunandan istifadə edə bilərsiniz. Intel Video Pro Analizatoru (ödənişli, lakin ilk 10 çərçivə ilə məhdudlaşan pulsuz sınaq versiyası ilə). Bölmələr burada təhlil edilir VP9:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

2-ci addım - proqnozlaşdırma

Bölmələrimiz olduqdan sonra onlar üçün astroloji proqnozlar verə bilərik. üçün INTER proqnozları köçürülməlidir hərəkət vektorları qalanı isə İNTRA proqnozu üçün ötürülür proqnoz istiqaməti və qalan.

3-cü addım - transformasiya

Qalıq blokumuz (proqnozlaşdırılan bölmə → real bölmə) olduqdan sonra onu elə çevirmək olar ki, ümumi keyfiyyəti qoruyarkən hansı piksellərin atılacağını bilək. Dəqiq davranışı təmin edən bəzi transformasiyalar var.

Başqa üsullar olsa da, onlara daha ətraflı baxaq. diskret kosinus çevrilməsi (DCT - dən diskret kosin çevrilməsi). DCT-nin əsas funksiyaları:

  • Piksel bloklarını bərabər ölçülü tezlik əmsalları bloklarına çevirir.
  • Məkan artıqlığını aradan qaldırmağa kömək etmək üçün gücü sıxlaşdırır.
  • Geri dönmə qabiliyyətini təmin edir.

2 fevral 2017-ci il Sintra R.J. (Cintra, RJ) və Bayer F.M. (Bayer FM) yalnız 14 əlavə tələb edən təsvirin sıxılması üçün DCT-yə bənzər transformasiya haqqında məqalə dərc etdi.

Hər bir maddənin faydalarını başa düşmürsənsə, narahat olmayın. İndi onların həqiqi dəyərini görmək üçün konkret nümunələrdən istifadə edək.

Bu 8x8 piksel blokunu götürək:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bu blok aşağıdakı 8x8 piksel təsvirə çevrilir:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bu piksel blokuna DCT tətbiq edin və 8x8 əmsal bloku əldə edin:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Və bu əmsallar blokunu göstərsək, aşağıdakı şəkli alacağıq:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Göründüyü kimi, orijinal görüntüyə bənzəmir. Birinci əmsalın bütün digərlərindən çox fərqli olduğunu görə bilərsiniz. Bu birinci əmsal, giriş massivindəki bütün nümunələri təmsil edən DC əmsalı kimi tanınır, orta kimi bir şeydir.

Bu əmsallar blokunun maraqlı bir xüsusiyyəti var: yüksək tezlikli komponentləri aşağı tezliklilərdən ayırır.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Şəkildə gücün çox hissəsi daha aşağı tezliklərdə cəmlənir, buna görə də şəkli onun tezlik komponentlərinə çevirsəniz və daha yüksək tezlik əmsallarından imtina etsəniz, çox şəkil keyfiyyətini itirmədən təsviri təsvir etmək üçün lazım olan məlumatların miqdarını azalda bilərsiniz.

Tezlik siqnalın nə qədər tez dəyişməsinə aiddir.

DCT-dən istifadə edərək orijinal təsviri onun tezliyinə (əmsallar bloku) çevirərək və daha sonra ən az əhəmiyyətli əmsalların bir hissəsini ataraq test işində əldə edilmiş bilikləri tətbiq etməyə çalışaq.

Əvvəlcə onu tezlik domeninə çeviririk.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Sonra, əmsalların bir hissəsini (67%), əsasən aşağı sağ hissədən atırıq.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Nəhayət, bu atılmış əmsallar blokundan təsviri yenidən qururuq (unutmayın ki, o, tərsinə çevrilməlidir) və onu orijinalla müqayisə edirik.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Görürük ki, orijinal təsvirə bənzəyir, lakin orijinaldan çoxlu fərqlər var. Biz 67,1875% atdıq və yenə də orijinala bənzəyən bir şey əldə etdik. Daha yaxşı keyfiyyətli bir görüntü əldə etmək üçün əmsalları daha düşünülmüş şəkildə atmaq mümkün idi, lakin bu, növbəti mövzudur.

Hər bir əmsal bütün piksellərdən istifadə etməklə yaradılır

Vacibdir: hər bir əmsal birbaşa bir pikselə uyğunlaşdırılmır, lakin bütün piksellərin çəkili cəmidir. Bu heyrətamiz qrafik hər bir indeksə xas olan çəkilərdən istifadə etməklə birinci və ikinci əmsalların necə hesablandığını göstərir.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Siz həmçinin DCT-yə əsaslanan sadə təsvirin formalaşmasına baxaraq onu vizuallaşdırmağa cəhd edə bilərsiniz. Məsələn, hər bir çəki əmsalından istifadə edərək yaradılan A simvolu:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

4-cü addım - kvantlaşdırma

Əvvəlki addımda bəzi əmsalları atdıqdan sonra, sonuncu mərhələdə (çevirmə) kvantlaşdırmanın xüsusi formasını həyata keçiririk. Bu mərhələdə məlumatın itirilməsi məqbuldur. Və ya daha sadə desək, sıxılma əldə etmək üçün əmsalları kvantlaşdıracağıq.

Əmsallar blokunu necə kvantlaşdırmaq olar? Ən sadə üsullardan biri vahid kvantlaşdırmadır, blok götürdükdə onu bir qiymətə (10-a) bölün və nəticəni yuvarlaqlaşdırın.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bu əmsallar blokunu tərsinə çevirə bilərikmi? Bəli, bölə biləcəyimiz eyni dəyərə vura bilərik.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bu yanaşma ən yaxşısı deyil, çünki hər bir əmsalın əhəmiyyətini nəzərə almır. Tək bir dəyər əvəzinə kvantlaşdırıcılar matrisindən istifadə edilə bilər və bu matris aşağı sağın əksəriyyətini və yuxarı solun azlığını kvantlaşdırmaqla DCT xassəsindən istifadə edə bilər.

Addım 5 - entropiyanın kodlaşdırılması

Verilənləri (şəkil blokları, fraqmentlər, çərçivələr) kvantlaşdırdıqdan sonra biz yenə də onu itkisiz sıxışdıra bilərik. Məlumatları sıxışdırmağın bir çox alqoritmik üsulları var. Biz onlardan bəzilərinə qısaca nəzər salacağıq, daha dərindən başa düşmək üçün Sıxılmanın Anlanması: Müasir Tərtibatçılar üçün Məlumatların Sıxılması kitabını oxuya bilərsiniz ("Sıxılmanın Anlanması: Müasir Tərtibatçılar üçün Məlumatların Sıxılması").

VLC istifadə edərək video kodlaşdırma

Deyək ki, xarakter axınımız var: a, e, r и t. Hər bir simvolun axında nə qədər tez-tez görünməsi ehtimalı (0-dan 1-ə qədər) bu cədvəldə təqdim olunur.

a e r t
Ehtimal 0,3 0,3 0,2 0,2

Biz unikal ikili kodları (tercihen kiçik olanlar) ən çox ehtimal olunanlara, daha böyük kodlar isə daha az ehtimal olunanlara təyin edə bilərik.

a e r t
Ehtimal 0,3 0,3 0,2 0,2
İkili kod 0 10 110 1110

Hər bir simvol üçün 8 bit xərcləyəcəyimizi düşünərək axını sıxışdırırıq. Sıxılma olmadan hər simvol üçün 24 bit lazım olacaq. Hər simvolu onun kodu ilə əvəz etsəniz, qənaət əldə edəcəksiniz!

İlk addım xarakterin kodlaşdırılmasıdır e, 10-a bərabərdir və ikinci simvoldur a, əlavə olunan (riyazi şəkildə deyil): [10][0] və nəhayət üçüncü simvol t, bu da son sıxılmış bit axınımızı [10][0][1110] və ya bərabər edir 1001110, bu, yalnız 7 bit tələb edir (orijinaldan 3,4 dəfə az yer).

Nəzərə alın ki, hər bir kod prefiksi olan unikal kod olmalıdır. Huffman alqoritmi bu nömrələri tapmağa kömək edəcək. Bu üsul qüsursuz olmasa da, hələ də sıxılma üçün bu alqoritmik metodu təklif edən video kodeklər var.

Həm kodlayıcının, həm də dekoderin ikili kodları olan simvol cədvəlinə çıxışı olmalıdır. Buna görə də giriş kimi cədvəl göndərmək lazımdır.

Arifmetik kodlaşdırma

Deyək ki, xarakter axınımız var: a, e, r, s и t, və onların ehtimalı bu cədvəldə təqdim olunur.

a e r s t
Ehtimal 0,3 0,3 0,15 0,05 0,2

Bu cədvəldən istifadə edərək, ən böyük rəqəmə görə çeşidlənmiş bütün mümkün simvolları ehtiva edən diapazonlar quracağıq.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

İndi üç simvoldan ibarət axını kodlayaq: yemək.

Əvvəlcə ilk simvolu seçin e, bu 0,3-dən 0,6-ya qədər olan alt diapazondadır (daxil deyil). Biz bu alt diapazonu götürürük və onu əvvəlki nisbətlərdə yenidən bölürük, lakin bu yeni diapazon üçün.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Gəlin axınımızı kodlamağa davam edək yemək. İndi ikinci simvolu götürün a0,3-dən 0,39-a qədər olan yeni alt diapazonda olan və sonra sonuncu simvolumuzu götürün t və eyni prosesi yenidən təkrarlayaraq, 0,354-dən 0,372-yə qədər son alt diapazonu alırıq.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bizə sadəcə 0,354-dən 0,372-ə qədər olan son alt diapazonda bir nömrə seçməliyik. Gəlin 0,36-nı seçək (lakin bu alt diapazonda istənilən başqa nömrə seçə bilərsiniz). Yalnız bu nömrə ilə biz orijinal yayımımızı bərpa edə biləcəyik. Sanki biz axınımızı kodlaşdırmaq üçün diapazonlar daxilində bir xətt çəkirik.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Əks əməliyyat (yəni, dekodlaşdırma) sadədir: 0,36 rəqəmimiz və ilkin diapazonumuzla eyni prosesi icra edə bilərik. Amma indi bu nömrədən istifadə edərək biz bu nömrədən istifadə edərək kodlaşdırılmış axını müəyyən edirik.

Birinci diapazonla nömrəmizin dilimə uyğun olduğunu görürük, buna görə də bu bizim ilk xarakterimizdir. İndi əvvəlki kimi eyni prosesi izləyərək bu alt diapazonu yenidən bölürük. Burada 0,36-nın simvola uyğun olduğunu görə bilərsiniz a, və prosesi təkrar etdikdən sonra son simvola gəldik t (orijinal kodlanmış axınımızı formalaşdırır yemək).

Həm kodlayıcıda, həm də dekoderdə simvol ehtimalları cədvəli olmalıdır, ona görə də onu giriş məlumatlarına göndərmək lazımdır.

Olduqca zərif, elə deyilmi? Bu həlli kim tapdısa, lənətə gəlmiş ağıllı idi. Bəzi video kodeklər bu texnikadan istifadə edirlər (və ya ən azı onu seçim kimi təklif edirlər).

İdeya, kvantlaşdırılmış bit axını itkisiz sıxışdırmaqdır. Şübhəsiz ki, bu məqalədə tonlarla təfərrüatlar, səbəblər, mübadilələr və s. çatışmır. Ancaq bir tərtibatçısınızsa, daha çox bilməlisiniz. Yeni kodeklər kimi müxtəlif entropiya kodlaşdırma alqoritmlərindən istifadə etməyə çalışırlar ANS.

Addım 6 - bit axını formatı

Bütün bunları etdikdən sonra, yerinə yetirilən addımlar kontekstində sıxılmış çərçivələri açmaq qalır. Kodlayıcının qəbul etdiyi qərarlar barədə dekoderə açıq şəkildə məlumat verilməlidir. Dekoder bütün lazımi məlumatlarla təmin edilməlidir: bit dərinliyi, rəng sahəsi, ayırdetmə qabiliyyəti, proqnozlaşdırma məlumatı (hərəkət vektorları, istiqamətli INTER proqnozu), profil, səviyyə, kadr sürəti, kadr növü, kadr nömrəsi və daha çox.

Bit axınına qısaca nəzər salacağıq H.264. İlk addımımız minimal H.264 bit axını yaratmaqdır (FFmpeg standart olaraq bütün kodlaşdırma seçimlərini əlavə edir, məsələn SEI NAL - bunun nə olduğunu bir az daha öyrənəcəyik). Biz bunu öz depomuzdan və FFmpeg-dən istifadə edərək edə bilərik.

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

Bu əmr xam bit axını yaradacaq H.264 bir çərçivə ilə, 64×64 təsvir ölçüsündə, rəng sahəsi ilə YUV420. Bu halda çərçivə kimi aşağıdakı şəkil istifadə olunur.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

H.264 bit axını

Standart AVC (H.264) adlanan makro çərçivələrdə (şəbəkə mənasında) məlumatın göndəriləcəyini müəyyən edir AT (bu şəbəkə abstraksiya səviyyəsidir). NAL-ın əsas məqsədi "veb-dostu" video təqdimatını təmin etməkdir. Bu standart televizorlarda (axın əsaslı), İnternetdə (paket əsaslı) işləməlidir.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

NAL elementlərinin sərhədlərini təyin etmək üçün sinxronizasiya markeri var. Hər bir sinxronizasiya nişanı bir dəyər ehtiva edir 0x00 0x00 0x01, bərabər olan birincisi istisna olmaqla 0x00 0x00 0x00 0x01. Başlasaq hexdump yaradılan H.264 bit axını üçün biz faylın əvvəlində ən azı üç NAL nümunəsini müəyyən edirik.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Qeyd edildiyi kimi, dekoder təkcə görüntü məlumatlarını deyil, həm də videonun təfərrüatlarını, kadrları, rəngləri, istifadə olunan parametrləri və daha çox şeyi bilməlidir. Hər NAL-ın ilk baytı onun kateqoriyasını və növünü müəyyən edir.

NAL tipli identifikator Təsvir
0 Naməlum növ
1 IDR olmadan kodlaşdırılmış şəkil parçası
2 Kodlanmış dilim məlumat bölməsi A
3 Kodlanmış dilim məlumat bölməsi B
4 Kodlanmış dilim məlumat bölməsi C
5 IDR təsvirinin kodlaşdırılmış IDR fraqmenti
6 SEI uzadılması haqqında ətraflı məlumat
7 SPS Sequence Parameter Set
8 PPS şəkil parametrləri dəsti
9 Giriş ayırıcısı
10 Ardıcıllığın sonu
11 İpin sonu
... ...

Tipik olaraq bit axınının ilk NAL-ı olur PLC. Bu tip NAL profil, səviyyə, qətnamə və s. kimi ümumi kodlaşdırma dəyişənləri haqqında məlumat verməkdən məsuldur.

İlk sinxronizasiya markerini atlasaq, hansı NAL növünün birinci olduğunu öyrənmək üçün ilk baytı deşifrə edə bilərik.

Məsələn, sinxronizasiya işarəsindən sonra ilk baytdır 01100111, harada ilk bit (0) f sahəsindədirorbidden_zero_bit. Növbəti 2 bit (11) sahəni bizə izah edir nal_ref_idc, bu NAL-ın istinad sahəsi olub-olmadığını göstərir. Və qalan 5 bit (00111) sahəni bizə izah edir nal_vahid_növü, bu halda SPS blokudur (7) NAL.

İkinci bayt (binar=01100100, hex=0x64, dec=100) SPS-də NAL sahədir profile_idc, kodlayıcının istifadə etdiyi profili göstərir. Bu halda, məhdud yüksək profil (yəni, iki istiqamətli B-seqment dəstəyi olmadan yüksək profil) istifadə edilmişdir.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Bit axınının spesifikasiyasına baxsanız H.264 SPS NAL üçün parametr adı, kateqoriya və təsvir üçün bir çox dəyər tapacağıq. Məsələn, sahələrə baxaq pic_en_in_mbs_minus_1 и şəkil_hündürlüyü_xəritədə_vahidlər_minus_1.

Parametr adı Kateqoriya Təsvir
pic_en_in_mbs_minus_1 0 ue(v)
şəkil_hündürlüyü_xəritədə_vahidlər_minus_1 0 ue(v)

Bu sahələrin qiymətləri ilə bəzi riyazi əməliyyatlar yerinə yetirsək, həllini əldə edəcəyik. Bir istifadə edərək 1920 x 1080 təmsil edə bilər pic_en_in_mbs_minus_1 119 dəyəri ilə ((119 + 1) * makroblok_ölçüsü = 120 * 16 = 1920). Yenə yerə qənaət etmək üçün 1920-ni kodlaşdırmaq əvəzinə 119 ilə etdik.

Yaradılmış videomuzu ikili formada yoxlamağa davam etsək (məsələn: xxd -b -c 11 v/minimal_yuv420.h264), onda siz çərçivənin özü olan sonuncu NAL-a keçə bilərsiniz.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Burada onun ilk 6 bayt dəyərlərini görürük: 01100101 10001000 10000100 00000000 00100001 11111111. Birinci baytın NAL tipini göstərdiyi məlum olduğundan, bu halda (00101) IDR fraqmentidir (5) və siz onu daha da araşdıra bilərsiniz:

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Spesifikasiya məlumatlarından istifadə edərək, fraqment tipini deşifrə etmək mümkün olacaq (dilim_növü) və çərçivə nömrəsi (çərçivə_num) digər mühüm sahələr arasında.

Bəzi sahələrin dəyərlərini əldə etmək üçün (ue(v), me(v), se(v) və ya te(v)), əsasında xüsusi dekoderdən istifadə edərək fraqmenti deşifrə etməliyik eksponensial Golomb kodu. Bu üsul dəyişən dəyərləri kodlaşdırmaq üçün çox səmərəlidir, xüsusən də çoxlu standart dəyərlər olduqda.

Mənaları dilim_növü и çərçivə_num bu videonun 7 (I-fragment) və 0 (birinci kadr) var.

Bit axını bir protokol kimi düşünülə bilər. Bit axını haqqında daha çox bilmək istəyirsinizsə, spesifikasiyaya müraciət etməlisiniz ITU H.264. Şəkil məlumatının harada olduğunu göstərən makro diaqramdır (YUV sıxılmış formada).

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

kimi digər bit axınları tədqiq edilə bilər VP9, H.265 (HEVC) və ya hətta yeni ən yaxşı bit axını AV1. Onların hamısı oxşardır? Xeyr, amma ən azı birini başa düşdükdən sonra qalanını başa düşmək daha asan olacaq.

Təcrübə etmək istəyirsiniz? H.264 bit axınını araşdırın

Siz tək çərçivəli video yarada və bit axınını yoxlamaq üçün MediaInfo-dan istifadə edə bilərsiniz H.264. Əslində, bit axını təhlil edən mənbə koduna belə baxmağınıza heç nə mane olmur H.264 (AVC).

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Təcrübə üçün Intel Video Pro Analyzer-dən istifadə edə bilərsiniz (proqramın pullu olduğunu artıq demişəm, lakin 10 kadr limiti olan pulsuz sınaq versiyası var?).

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Review

Qeyd edək ki, bir çox müasir kodeklər indicə öyrəndiyimiz eyni modeldən istifadə edir. Burada video kodekin blok diaqramına nəzər salaq Thor. Bu, keçdiyimiz bütün addımları ehtiva edir. Bu yazının bütün məqsədi ən azı bu sahədəki yeniliklər və sənədləri daha yaxşı başa düşməkdir.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Əvvəllər hesablanmışdı ki, 139p keyfiyyətdə və 720 kadr sürətində bir saat davam edən video faylı saxlamaq üçün 30 GB disk sahəsi tələb olunur. Bu məqalədə müzakirə olunan metodlardan (çərçivələrarası və daxili proqnozlar, transformasiya, kvantlaşdırma, entropiya kodlaşdırması və s.) istifadə etsəniz, o zaman (bir piksel üçün 0,031 bit sərf etdiyimizə əsaslanaraq) kifayət qədər video əldə edə bilərsiniz. qənaətbəxş keyfiyyət, 367,82 GB yaddaş deyil, cəmi 139 MB tutur.

H.265 H.264-dən daha yaxşı sıxılma nisbətinə necə nail olur?

İndi kodeklərin necə işlədiyi haqqında daha çox bildiyimizə görə, daha yeni kodeklərin daha az bitlə daha yüksək qətnamələri necə çatdıra biləcəyini başa düşmək daha asandır.

Müqayisə etsəniz AVC и HEVC, bunun demək olar ki, həmişə daha çox CPU yükü və sıxılma nisbəti arasında seçim olduğunu xatırlamaq lazımdır.

HEVC ilə müqayisədə daha çox bölmə (və yarımbölmə) seçiminə malikdir AVC, daha çox daxili proqnoz istiqamətləri, təkmilləşdirilmiş entropiya kodlaşdırması və s. Bütün bu təkmilləşdirmələr edilmişdir H.265 dən 50% daha çox sıxışdıra bilir H.264.

Video kodek necə işləyir? Hissə 2. Nə, niyə, necə

Birinci hissə: Video və şəkillərlə işləməyin əsasları

Mənbə: www.habr.com

Добавить комментарий