Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Una nga bahin: Mga sukaranan sa pagtrabaho sa video ug mga imahe

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Unsa? Ang video codec usa ka piraso sa software/hardware nga nag-compress ug/o nag-decompress sa digital video.

Para unsa? Bisan pa sa pipila ka mga limitasyon pareho sa mga termino sa bandwidth ug
ug sa mga termino sa data storage space, ang merkado nagkinahanglan sa mas taas nga kalidad nga video. Nahinumdom ka ba kung giunsa sa katapusan nga post among gikalkulo ang gikinahanglan nga minimum alang sa 30 ka mga frame kada segundo, 24 bits kada pixel, nga adunay resolusyon nga 480x240? Nakadawat kami og 82,944 Mbit/s nga walay compression. Ang compression sa pagkakaron mao lamang ang paagi sa kasagarang pagpasa sa HD/FullHD/4K sa mga screen sa telebisyon ug sa Internet. Giunsa kini pagkab-ot? Karon atong tan-awon sa makadiyot ang mga nag-unang pamaagi.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ang paghubad gihimo uban ang suporta sa EDISON Software.

Engaged na mi paghiusa sa mga sistema sa pagbantay sa videoUg naghimo kami usa ka microtomograph.

Codec vs Container

Usa ka kasagarang sayop nga nahimo sa mga bag-ohan mao ang makalibog nga digital video codec ug digital video container. Ang usa ka sudlanan usa ka piho nga porma. Usa ka wrapper nga adunay video (ug posible nga audio) metadata. Ang compressed video mahimong mahunahuna nga usa ka container payload.

Kasagaran, ang extension sa usa ka video file nagpakita sa matang sa sudlanan niini. Pananglitan, ang file nga video.mp4 lagmit usa ka sudlanan MPEG-4 Bahin 14, ug usa ka file nga ginganlag video.mkv lagmit matryoshka. Aron hingpit nga sigurado sa codec ug format sa sudlanan, mahimo nimong gamiton FFmpeg o MediaInfo.

Usa ka gamay nga kasaysayan

Sa dili pa kita moabut Sa unsang paagi?, magsusi kita og gamay sa kasaysayan aron mas masabtan ang pipila ka mga tigulang nga codec.

Video codec H.261 nagpakita sa 1990 (technically - sa 1988) ug gimugna aron sa pag-operate sa usa ka data transfer rate sa 64 Kbps. Gigamit na niini ang mga ideya sama sa color subsampling, macroblocks, etc. Ang video codec standard gipatik niadtong 1995. H.263, nga naugmad hangtod sa 2001.

Ang unang bersyon nahuman sa 2003 H.264 / AVC. Nianang tuiga, gipagawas sa TrueMotion ang libre nga nawala nga video codec nga gitawag VP3. Gipalit sa Google ang kompanya kaniadtong 2008, gipagawas VP8 sa samang tuig. Niadtong Disyembre 2012, gipagawas sa Google VP9, ug gisuportahan kini sa mga ¾ sa merkado sa browser (lakip ang mga mobile device).

AV1 mao ang usa ka bag-o nga libre ug bukas nga tinubdan video codec nga gihimo sa Alliance alang sa Open Media (AOMedia), nga naglakip sa labing inila nga mga kompanya, sama sa: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel ug Cisco. Ang unang bersyon sa codec, 0.1.0, gimantala niadtong Abril 7, 2016.

Pagkatawo sa AV1

Sa sayong bahin sa 2015, ang Google nagtrabaho VP10Ang Xiph (nga gipanag-iya sa Mozilla) nagtrabaho Daala, ug ang Cisco naghimo sa kaugalingon nga libre nga video codec nga gitawag Thor.

unya MPEG LA unang gipahibalo nga tinuig nga limitasyon para sa HEVC (H.265) ug bayad nga 8 ka pilo nga mas taas kaysa sa H.264, apan sa wala madugay giusab nila pag-usab ang mga lagda:

walay tinuig nga limitasyon,
bayad sa sulod (0,5% sa kita) ug
ang bayad sa yunit mga 10 ka beses nga mas taas kaysa H.264.

Alliance alang sa Open Media gimugna sa mga kompanya gikan sa lainlaing natad: mga tiggama sa kagamitan (Intel, AMD, ARM, Nvidia, Cisco), mga taghatag sa sulud (Google, Netflix, Amazon), mga tiglalang sa browser (Google, Mozilla) ug uban pa.

Ang mga kompanya adunay usa ka komon nga tumong - usa ka royalty-free video codec. Unya makita AV1 nga adunay mas simple nga lisensya sa patente. Naghatag si Timothy B. Terryberry og usa ka makabungog nga presentasyon nga nahimong gigikanan sa kasamtangang konsepto sa AV1 ug ang modelo sa paglilisensya niini.

Mahibulong ka nga mahibal-an nga mahimo nimong analisahon ang AV1 codec pinaagi sa usa ka browser (kadtong interesado mahimong moadto sa aomanalyzer.org).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Universal codec

Atong tan-awon ang mga nag-unang mekanismo nga nagpahipi sa universal video codec. Kadaghanan niini nga mga konsepto mapuslanon ug gigamit sa modernong mga codec sama sa VP9, AV1 и HEVC. Gipasidan-an ko ikaw nga daghan sa mga butang nga gipatin-aw mahimong pasimplehon. Usahay ang tinuod nga mga ehemplo sa kalibutan (sama sa H.264) gamiton aron ipakita ang teknolohiya.

1st nga lakang - pagbahin sa imahe

Ang una nga lakang mao ang pagbahin sa frame sa daghang mga seksyon, mga subsection ug sa unahan.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Para unsa? Adunay daghang mga hinungdan. Kung atong gibahin ang usa ka imahe, mas tukma natong matagna ang motion vector pinaagi sa paggamit sa gagmay nga mga seksyon alang sa gagmay nga mga bahin nga naglihok. Samtang alang sa usa ka static nga background mahimo nimong limitahan ang imong kaugalingon sa dagkong mga seksyon.

Ang mga codec kasagarang mag-organisar niini nga mga seksyon ngadto sa mga seksyon (o mga tipik), mga macroblock (o mga bloke sa kahoy nga coding), ug daghang mga subseksyon. Ang pinakataas nga gidak-on niini nga mga partisyon managlahi, ang HEVC nagtakda niini sa 64x64 samtang ang AVC naggamit sa 16x16, ug ang mga subpartisyon mahimong bahinon ngadto sa 4x4 nga gidak-on.

Nahinumdom ka ba sa mga matang sa mga frame gikan sa miaging artikulo?! Ang sama nga magamit sa mga bloke, aron kita adunay usa ka I-fragment, usa ka B-block, usa ka P-macroblock, ug uban pa.

Para sa mga gusto magpraktis, tan-awa kung giunsa pagbahin ang imahe sa mga seksyon ug mga subseksyon. Aron mahimo kini, mahimo nimong gamiton ang nahisgotan na sa miaging artikulo. Intel Video Pro Analyzer (ang usa nga gibayran, apan adunay usa ka libre nga bersyon sa pagsulay nga limitado sa una nga 10 nga mga bayanan). Mga seksyon nga gi-analisa dinhi VP9:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

2nd lakang - forecasting

Sa higayon nga aduna na kitay mga seksyon, makahimo kita ug astrolohiya nga mga panagna alang kanila. Alang sa Mga panagna sa INTER kinahanglan ibalhin mga vector sa paglihok ug ang nahabilin, ug alang sa INTRA forecasting kini gipasa direksyon sa forecast ug ang nahibilin.

Ika-3 nga lakang - pagbag-o

Sa higayon nga aduna na kitay nahabilin nga block (gitagna nga seksyon → tinuod nga seksyon), posible nga mabag-o kini sa paagi nga nahibal-an nato kung unsang mga pixel ang mahimong ilabay samtang nagpabilin ang kinatibuk-ang kalidad. Adunay pipila ka mga pagbag-o nga naghatag sa eksakto nga pamatasan.

Bisan kung adunay uban nga mga pamaagi, atong tan-awon kini sa mas detalyado. discrete cosine pagbag-o (Ang DCT - gikan sa discrete cosine pagbag-o). Panguna nga mga gimbuhaton sa DCT:

  • Gi-convert ang mga bloke sa mga pixel ngadto sa managsama nga gidak-on nga mga bloke sa frequency coefficient.
  • Gipamub-an ang gahum aron makatabang sa pagwagtang sa spatial redundancy.
  • Naghatag og kabaliktaran.

Pebrero 2, 2017 Sintra R.J. (Cintra, RJ) ug Bayer F.M. (Bayer FM) nagpatik sa usa ka artikulo bahin sa usa ka DCT-sama sa pagbag-o alang sa kompresiyon sa imahe nga nanginahanglan lamang sa 14 nga pagdugang.

Ayaw kabalaka kung dili nimo masabtan ang mga benepisyo sa matag punto. Karon atong gamiton ang piho nga mga pananglitan aron makita ang ilang tinuod nga bili.

Atong kuhaon kini nga 8x8 block sa mga pixel:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Kini nga block gihubad ngadto sa mosunod nga 8 by 8 pixel nga hulagway:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ibutang ang DCT sa kini nga bloke sa mga pixel ug pagkuha usa ka 8x8 block sa mga coefficient:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ug kung atong i-render kini nga bloke sa mga coefficient, makuha nato ang mosunod nga hulagway:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Sama sa imong nakita, dili kini sama sa orihinal nga imahe. Imong makita nga ang unang coefficient lahi kaayo sa tanan. Kining unang coefficient nailhan nga DC coefficient, nga nagrepresentar sa tanang sample sa input array, sama sa average.

Kini nga bloke sa mga coefficient adunay usa ka makapaikag nga kabtangan: kini nagbulag sa mga high-frequency nga sangkap gikan sa mga low-frequency.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Sa usa ka imahe, kadaghanan sa gahum gikonsentrar sa mas ubos nga mga frequency, mao nga kung imong i-convert ang imahe sa mga frequency nga sangkap niini ug isalikway ang mas taas nga frequency coefficient, mahimo nimong pakunhuran ang gidaghanon sa datos nga gikinahanglan aron mahulagway ang imahe nga dili isakripisyo ang sobra nga kalidad sa litrato.

Ang frequency nagtumong kung unsa kadali ang pagbag-o sa signal.

Atong sulayan ang paggamit sa kahibalo nga nakuha sa kaso sa pagsulay pinaagi sa pag-convert sa orihinal nga imahe sa frequency niini (block of coefficients) gamit ang DCT ug dayon isalikway ang bahin sa labing gamay nga hinungdanon nga mga coefficient.

Una among gi-convert kini sa frequency domain.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Sunod, gisalikway namon ang bahin (67%) sa mga coefficient, labi na ang ubos nga tuo nga bahin.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Sa katapusan, among gitukod pag-usab ang imahe gikan niining gilabay nga bloke sa mga coefficients (hinumdomi, kini kinahanglan nga balihon) ug itandi kini sa orihinal.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Nakita namon nga kini susama sa orihinal nga imahe, apan adunay daghang mga kalainan gikan sa orihinal. Gilabay namo ang 67,1875% ug nakuha gihapon ang usa ka butang nga susama sa orihinal. Posible nga mas mahunahunaon nga isalikway ang mga coefficient aron makakuha usa ka imahe nga labi ka maayo nga kalidad, apan kana usa ka sunod nga hilisgutan.

Ang matag coefficient gihimo gamit ang tanan nga mga pixel

Importante: ang matag coefficient dili direkta nga mapa sa usa ka pixel, apan usa ka gibug-aton nga suma sa tanang pixel. Kining talagsaon nga graph nagpakita kung giunsa ang una ug ikaduha nga mga coefficient gikalkula gamit ang mga gibug-aton nga talagsaon sa matag indeks.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Mahimo usab nimong sulayan ang paghanduraw sa DCT pinaagi sa pagtan-aw sa usa ka yano nga pagporma sa imahe base niini. Pananglitan, ania ang simbolo A nga namugna gamit ang matag coefficient weight:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ika-4 nga lakang - quantization

Human nato ilabay ang pipila ka mga coefficient sa miaging lakang, sa kataposang lakang (pagbag-o) atong gihimo ang usa ka espesyal nga porma sa quantization. Niini nga yugto madawat ang pagkawala sa kasayuran. O, mas yano, atong i-quantize ang mga coefficient aron makab-ot ang compression.

Unsaon nimo pag-quantize ang block sa coefficients? Usa sa pinakasimple nga mga pamaagi mao ang uniporme nga quantization, kung magkuha kami usa ka bloke, bahinon kini sa usa ka kantidad (sa 10) ug lingin ang resulta.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Mahimo ba naton balihon kini nga bloke sa mga coefficient? Oo, mahimo naton, pagpadaghan sa parehas nga kantidad nga atong gibahin.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Kini nga pamaagi dili ang labing maayo tungod kay wala kini magtagad sa kamahinungdanon sa matag coefficient. Mahimong mogamit ang usa ka matrix sa mga quantizer imbes sa usa ka kantidad, ug kini nga matrix mahimo’g pahimuslan ang kabtangan sa DCT pinaagi sa pag-quantize sa kadaghanan sa ubos nga tuo ug ang minorya sa wala sa ibabaw.

Lakang 5 - entropy coding

Kung na-quantize na namo ang data (mga bloke sa imahe, mga tipik, mga frame), mahimo gihapon namo kining i-compress nga walay pagkawala. Adunay daghang algorithmic nga mga paagi sa pag-compress sa datos. Atong tan-awon dayon ang pipila niini, para sa mas lawom nga pagsabot mahimo nimong basahon ang librong Understanding Compression: Data Compression for Modern Developers ("Pagsabot sa Compression: Data Compression para sa Modernong mga Developer").

Pag-encode sa video gamit ang VLC

Ingnon ta nga kita adunay usa ka sapa sa mga karakter: a, e, r и t. Ang kalagmitan (gikan sa 0 hangtod 1) kung unsa kasubsob ang matag karakter nga makita sa usa ka sapa gipresentar niini nga lamesa.

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

Mahimo natong i-assign ang talagsaon nga binary code (mas maayo nga gagmay) ngadto sa labing lagmit, ug mas dagkong mga code ngadto sa dili kaayo posible.

a e r t
kalagmitan 0,3 0,3 0,2 0,2
Binary code 0 10 110 1110

Gi-compress namo ang sapa, nga nagtuo nga mogasto kami og 8 bits alang sa matag karakter. Kung walay compression, 24 bits ang gikinahanglan kada karakter. Kung imong ilisan ang matag karakter sa code niini, makakuha ka mga tinipigan!

Ang unang lakang mao ang pag-encode sa karakter e, nga katumbas sa 10, ug ang ikaduha nga karakter mao ang a, nga gidugang (dili sa matematika nga paagi): [10][0], ug sa kataposan ang ikatulo nga karakter t, nga naghimo sa atong katapusang compressed bitstream nga katumbas sa [10][0][1110] o 1001110, nga nagkinahanglan lamang ug 7 ka bits (3,4 ka beses nga mas gamay nga luna kay sa orihinal).

Palihug timan-i nga ang matag code kinahanglan usa ka talagsaon nga code nga adunay prefix. Huffman algorithm makatabang kanimo sa pagpangita niini nga mga numero. Bisan kung kini nga pamaagi wala’y mga sayup, adunay mga video codec nga nagtanyag gihapon kini nga algorithmic nga pamaagi alang sa pag-compress.

Ang encoder ug ang decoder kinahanglang adunay access sa simbolo nga lamesa uban sa ilang binary code. Busa, kinahanglan usab nga magpadala usa ka lamesa ingon input.

Aritmetikong coding

Ingnon ta nga kita adunay usa ka sapa sa mga karakter: a, e, r, s и t, ug ang ilang kalagmitan gipresentar niini nga lamesa.

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

Gamit kini nga lamesa, maghimo kami og mga han-ay nga adunay tanan nga posible nga mga karakter, nga gisunud sa labing kadaghan nga numero.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Karon atong i-encode ang usa ka stream sa tulo ka mga karakter: Kan-a.

Una pilia ang unang karakter e, nga naa sa subrange gikan sa 0,3 hangtod 0,6 (dili apil). Gikuha namon kini nga subrange ug gibahin kini pag-usab sa parehas nga proporsyon sama sa kaniadto, apan alang niining bag-ong range.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ipadayon nato ang coding sa atong stream Kan-a. Karon kuhaa ang ikaduhang karakter a, nga naa sa bag-ong subrange gikan sa 0,3 hangtod 0,39, ug dayon kuhaa ang among katapusang karakter t ug gisubli pag-usab ang parehas nga proseso, makuha namon ang katapusang sub-range gikan sa 0,354 hangtod 0,372.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Kinahanglan lang namon nga magpili usa ka numero sa katapusang subrange gikan sa 0,354 hangtod 0,372. Atong pilion ang 0,36 (apan makapili ka ug lain nga numero niini nga subrange). Pinaagi lamang niini nga numero nga mahimo natong ibalik ang atong orihinal nga sapa. Morag nagdibuho kami og linya sulod sa mga han-ay aron ma-encode ang among sapa.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ang balik nga operasyon (nga mao, decoding) kay yano ra: sa among numero nga 0,36 ug sa among inisyal nga han-ay, mahimo namong modagan ang samang proseso. Apan karon, gamit kini nga numero, among giila ang sapa nga gi-encode gamit kini nga numero.

Sa una nga range, namatikdan namon nga ang among numero katumbas sa slice, busa kini ang among una nga karakter. Karon gibahin namon kini nga sub-range pag-usab pinaagi sa pagsunod sa parehas nga proseso sama kaniadto. Dinhi imong makita nga ang 0,36 katumbas sa simbolo a, ug human sa pagsubli sa proseso miabut kami sa katapusang karakter t (pagporma sa among orihinal nga naka-encode nga sapa Kan-a).

Ang encoder ug ang decoder kinahanglan adunay usa ka lamesa sa mga kalagmitan sa simbolo, mao nga kinahanglan nga ipadala usab kini sa input data.

Nindot kaayo, dili ba? Bisan kinsa ang naghimo niini nga solusyon usa ka maalamon. Ang ubang mga video codec naggamit niini nga teknik (o labing menos itanyag kini isip kapilian).

Ang ideya mao ang pagkawalay pagkawala sa pag-compress sa usa ka quantized bit stream. Sigurado nga kini nga artikulo kulang sa tonelada nga mga detalye, mga hinungdan, mga trade-off, ug uban pa. Apan kung ikaw usa ka developer, kinahanglan nimo nga mahibal-an ang dugang. Bag-ong mga codec misulay sa paggamit sa lain-laing mga entropy encoding algorithms sama sa ANS.

Lakang 6 - format sa bitstream

Human sa pagbuhat niining tanan, ang nahabilin mao ang pag-unpack sa mga compressed frame sa konteksto sa mga lakang nga gihimo. Ang decoder kinahanglan nga tin-aw nga ipahibalo sa mga desisyon nga gihimo sa encoder. Ang decoder kinahanglang hatagan sa tanang gikinahanglang impormasyon: bit depth, color space, resolution, prediction information (motion vectors, directional INTER prediction), profile, level, frame rate, frame type, frame number ug daghan pa.

Atong tan-awon dayon ang bitstream H.264. Ang among una nga lakang mao ang paghimo og gamay nga H.264 bitstream (FFmpeg sa default nagdugang sa tanan nga mga kapilian sa pag-encode sama sa SEI NAL - atong mahibal-an kung unsa kini gamay pa). Mahimo nato kini gamit ang atong kaugalingong repository ug FFmpeg.

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

Kini nga sugo makamugna og hilaw nga bitstream H.264 nga adunay usa ka frame, 64 × 64 nga resolusyon, nga adunay kolor nga luna YUV420. Niini nga kaso, ang mosunod nga hulagway gigamit isip usa ka frame.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

H.264 bitstream

Standard AVC (H.264) nagtino nga ang impormasyon ipadala sa macroframes (sa kahulugan sa network), gitawag nal (Kini usa ka lebel sa abstraction sa network). Ang nag-unang tumong sa NAL mao ang paghatag og "web-friendly" nga video presentation. Kini nga sumbanan kinahanglan nga magamit sa mga TV (stream-based), sa Internet (packet-based).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Adunay usa ka synchronization marker aron ipasabut ang mga utlanan sa mga elemento sa NAL. Ang matag sync token adunay usa ka kantidad 0x00 0x00 0x01, gawas sa una, nga katumbas sa 0x00 0x00 0x00 0x01. Kon kita maglunsad hexdump alang sa namugna nga H.264 bitstream, among giila ang labing menos tulo ka NAL patterns sa sinugdanan sa file.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Sama sa giingon, ang decoder kinahanglan mahibal-an dili lamang ang datos sa imahe, apan usab ang mga detalye sa video, frame, kolor, gigamit nga mga parameter, ug daghan pa. Ang una nga byte sa matag NAL naghubit sa kategorya ug tipo niini.

NAL type identifier paghulagway
0 Wala mailhi nga tipo
1 Gi-encode nga fragment sa imahe nga wala’y IDR
2 Gi-code nga seksyon sa datos sa slice A
3 Gi-code nga seksyon sa datos sa slice B
4 Gi-code nga seksyon sa datos sa slice C
5 Gi-encode nga tipik sa IDR sa usa ka imahe sa IDR
6 Dugang nga impormasyon bahin sa SEI extension
7 SPS Sequence Parameter Set
8 Set sa PPS image parameters
9 Access separator
10 Katapusan sa pagkasunodsunod
11 Katapusan sa hilo
... ...

Kasagaran ang una nga NAL sa usa ka gamay nga sapa mao ang SPS. Kini nga matang sa NAL ang responsable sa pagpahibalo bahin sa kasagarang mga variable sa pag-encode sama sa profile, lebel, resolusyon, ug uban pa.

Kung atong laktawan ang unang sync marker, mahimo natong decode ang unang byte aron mahibal-an kung unsang tipo sa NAL ang una.

Pananglitan, ang unang byte human sa sync token mao ang 01100111, diin ang unang bit (0) naa sa uma forbidden_zero_bit. Sunod nga 2 ka bit (11) nagsulti kanato sa uma nal_ref_idc, nga nagpakita kung kini nga NAL usa ka reference field o dili. Ug ang nahabilin nga 5 bits (00111) nagsulti kanato sa uma nal_unit_type, sa niini nga kaso kini mao ang SPS block (7) NAL.

Ikaduha nga byte (binary=01100100, hex=0x64, Dec=100) sa SPS NAL ang field profile_idc, nga nagpakita sa profile nga gigamit sa encoder. Sa kini nga kaso, usa ka limitado nga taas nga profile ang gigamit (ie, usa ka taas nga profile nga wala’y suporta sa bidirectional B-segment).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Kung imong tan-awon ang detalye sa bitstream H.264 alang sa SPS NAL, makit-an namon ang daghang mga kantidad alang sa ngalan sa parameter, kategorya ug paghulagway. Pananglitan, atong tan-awon ang mga uma pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

Ngalan sa parameter nga kategoriya paghulagway
pic_width_in_mbs_minus_1 0 ue(v)
pic_height_in_map_units_minus_1 0 ue(v)

Kung maghimo kami pipila nga mga operasyon sa matematika nga adunay mga kantidad sa kini nga mga natad, makakuha kami resolusyon. Ang usa mahimong magrepresentar sa 1920 x 1080 gamit pic_width_in_mbs_minus_1 nga adunay kantidad nga 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Pag-usab, aron makadaginot sa wanang, imbis nga mag-encode sa 1920, gihimo namon kini sa 119.

Kung magpadayon kita sa pagsusi sa atong gibuhat nga video sa binary nga porma (pananglitan: xxd -b -c 11 v/minimal_yuv420.h264), unya makaadto ka sa katapusang NAL, nga mao ang frame mismo.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Dinhi atong makita ang una nga 6 byte nga kantidad: 01100101 10001000 10000100 00000000 00100001 11111111. Tungod kay ang una nga byte nahibal-an nga nagpaila sa tipo sa NAL, sa kini nga kaso (00101) kay usa ka tipik sa IDR (5), ug mahimo nimo kini dugang nga pagsusi:

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Gamit ang kasayuran sa detalye, mahimo’g ma-decode ang tipo sa tipik (slice_type) ug numero sa frame (frame_num) taliwala sa ubang importanteng mga natad.

Aron makuha ang mga kantidad sa pipila ka mga natad (ue(v), me(v), se(v) o te(v)), kinahanglan natong i-decode ang tipik gamit ang usa ka espesyal nga decoder base sa exponential Golomb code. Kini nga pamaagi episyente kaayo alang sa pag-encode sa mga variable nga kantidad, labi na kung adunay daghang mga default nga kantidad.

Mga kantidad slice_type и frame_num niini nga video mao ang 7 (I-fragment) ug 0 (unang frame).

Ang usa ka bitstream mahimong mahunahuna nga usa ka protocol. Kung gusto nimo mahibal-an ang dugang bahin sa bitstream, kinahanglan nimo nga tan-awon ang detalye ITU H.264. Ania ang usa ka macro diagram nga nagpakita kung asa ang datos sa imahe (YUV sa compressed nga porma).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Ang ubang mga bitstream mahimong masusi, sama sa VP9, H.265 (HEVC) o bisan ang among bag-ong labing kaayo nga bitstream AV1. Parehas ba silang tanan? Dili, apan sa higayon nga imong masabtan ang bisan usa, mas sayon ​​​​sabton ang uban.

Gusto magpraktis? Susihon ang H.264 bitstream

Makahimo ka og usa ka frame nga video ug gamiton ang MediaInfo aron masusi ang bitstream H.264. Sa tinuud, wala’y makapugong kanimo bisan sa pagtan-aw sa source code nga nag-analisar sa gamay nga sapa H.264 (AVC).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Alang sa praktis, mahimo nimong gamiton ang Intel Video Pro Analyzer (nag-ingon na ba ako nga ang programa gibayran, apan adunay usa ka libre nga bersyon sa pagsulay nga adunay limitasyon sa 10 nga mga frame?).

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

kinatibuk-ang paghulagway

Timan-i nga daghang modernong codec ang naggamit sa samang modelo nga bag-o lang natong gitun-an. Dinhi, atong tan-awon ang block diagram sa video codec Thor. Kini naglangkob sa tanan nga mga lakang nga atong naagian. Ang tibuuk nga punto sa kini nga post mao ang labing menos maghatag kanimo usa ka labi ka maayo nga pagsabut sa mga kabag-ohan ug dokumentasyon sa kini nga lugar.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Kaniadto, gikalkula nga ang 139 GB nga espasyo sa disk kinahanglan nga magtipig usa ka file sa video nga molungtad usa ka oras sa kalidad nga 720p ug 30 fps. Kung gigamit nimo ang mga pamaagi nga gihisgutan sa kini nga artikulo (inter-frame ug internal nga mga panagna, pagbag-o, quantization, entropy coding, ug uban pa), nan mahimo nimong makab-ot (base sa kamatuoran nga naggasto kami og 0,031 bits matag pixel), usa ka video nga medyo makatagbaw nga kalidad, nga nag-okupar lamang sa 367,82 MB, dili 139 GB sa memorya.

Sa unsang paagi makab-ot sa H.265 ang mas maayong ratio sa compression kaysa H.264?

Karon nga nahibal-an na namon kung giunsa ang mga codec molihok, mas dali masabtan kung giunsa ang mga bag-ong codec makahatag mas taas nga mga resolusyon nga adunay gamay nga mga piraso.

Kung atong itandi AVC и HEVC, angay nga hinumdoman nga kini halos kanunay nga usa ka pagpili tali sa mas dako nga CPU load ug compression ratio.

HEVC adunay daghang mga kapilian sa seksyon (ug subsection) kaysa AVC, dugang nga internal nga mga direksyon sa panagna, gipaayo nga entropy coding, ug daghan pa. Kining tanan nga mga pag-uswag nahimo na H.265 makahimo sa pag-compress sa 50% labaw pa sa H.264.

Sa unsang paagi molihok ang usa ka video codec? Part 2. Unsa, ngano, giunsa

Una nga bahin: Mga sukaranan sa pagtrabaho sa video ug mga imahe

Source: www.habr.com

Idugang sa usa ka comment