Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang pangalawang bahagi: Paano gumagana ang video codec

Anumang raster larawan maaaring katawanin sa anyo dalawang-dimensional na matris. Pagdating sa mga kulay, ang ideya ay maaaring mabuo sa pamamagitan ng pagtingin sa isang imahe bilang tatlong-dimensional na matris, kung saan ginagamit ang mga karagdagang dimensyon upang mag-imbak ng data para sa bawat isa sa mga kulay.

Kung isasaalang-alang natin ang pangwakas na kulay bilang isang kumbinasyon ng tinatawag na. pangunahing mga kulay (pula, berde at asul), sa aming tatlong-dimensional na matrix ay tinukoy namin ang tatlong eroplano: ang una para sa pula, ang pangalawa para sa berde at ang huli para sa asul.
Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman
Tatawagin namin ang bawat punto sa matrix na ito na isang pixel (elemento ng imahe). Ang bawat pixel ay naglalaman ng impormasyon tungkol sa intensity (karaniwan bilang isang numeric na halaga) ng bawat kulay. Halimbawa, pulang pixel nangangahulugan na naglalaman ito ng 0 berde, 0 asul at maximum na pula. Pink na pixel maaaring mabuo gamit ang kumbinasyon ng tatlong kulay. Gamit ang isang numeric range mula 0 hanggang 255, ang isang pink na pixel ay tinukoy bilang Pula = 255, Berde = 192 ΠΈ Asul = 203.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Na-publish ang artikulong ito sa suporta ng EDISON.

Kami ay umuunlad mga application para sa video surveillance, video streaming, at engaged na rin kami pag-record ng video sa surgical room.

Mga alternatibong paraan upang mag-encode ng isang kulay na imahe

Mayroong maraming iba pang mga modelo para sa kumakatawan sa mga kulay na bumubuo sa isang imahe. Halimbawa, maaari kang gumamit ng naka-index na palette, na nangangailangan lamang ng isang byte upang kumatawan sa bawat pixel, sa halip na tatlong kinakailangan kapag ginagamit ang modelong RGB. Sa gayong modelo, posibleng gumamit ng 2D matrix sa halip na isang 3D matrix upang kumatawan sa bawat kulay. Nagse-save ito ng memorya, ngunit nagbibigay ng mas maliit na kulay gamut.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

RGB

Halimbawa, tingnan ang larawang ito sa ibaba. Ang unang mukha ay ganap na pininturahan. Ang iba ay ang pula, berde at asul na mga eroplano (ang mga intensity ng kaukulang mga kulay ay ipinapakita sa grayscale).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Nakikita namin na ang mga kulay ng pula sa orihinal ay nasa parehong mga lugar kung saan ang pinakamaliwanag na bahagi ng pangalawang mukha ay sinusunod. Habang ang kontribusyon ni blue ay makikita lamang sa mga mata (huling mukha) at elemento ng kanyang pananamit. Pansinin kung saan lahat ng tatlong kulay na eroplano ay may pinakamababang kontribusyon (ang pinakamadidilim na bahagi ng mga larawan) - Ang bigote ni Mario.

Upang maiimbak ang intensity ng bawat kulay, kinakailangan ang isang tiyak na bilang ng mga bits - tinatawag ang dami na ito kaunting lalim. Sabihin nating 8 bits ang ginugol (batay sa isang halaga mula 0 hanggang 255) bawat color plane. Pagkatapos ay mayroon kaming lalim na kulay na 24 bits (8 bits * 3 R/G/B na eroplano).

Ang isa pang katangian ng isang imahe ay Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, na ang bilang ng mga pixel sa isang dimensyon. Madalas na tinutukoy bilang lapad Γ— taas, tulad ng sa 4 by 4 na halimbawang larawan sa ibaba.
Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang isa pang ari-arian na aming kinakaharap kapag nagtatrabaho sa mga larawan/video ay aspect ratio, na naglalarawan sa normal na proporsyonal na relasyon sa pagitan ng lapad at taas ng isang imahe o pixel.

Kapag sinabi nila na ang isang partikular na pelikula o larawan ay 16 by 9 ang laki, karaniwan nilang ibig sabihin display aspect ratio (Dar - mula sa Ipakita ang Ratio ng Aspeto). Gayunpaman, kung minsan ay maaaring may iba't ibang mga hugis ng mga indibidwal na pixel - sa kasong ito ay pinag-uusapan natin ratio ng pixel (PAR - mula sa Pixel Aspect Ratio).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Paalala sa babaing punong-abala: DVD tumutugma sa DAR 4 hanggang 3

Bagama't ang aktwal na resolution ng DVD ay 704x480, nagpapanatili pa rin ito ng 4:3 aspect ratio dahil ang PAR ay 10:11 (704x10 / 480x11).

At sa wakas, matutukoy natin video tulad ng isang pagkakasunod-sunod ng n mga frame para sa panahon oras, na maaaring ituring na isang karagdagang dimensyon. A n pagkatapos ay ang frame rate o ang bilang ng mga frame bawat segundo (FPS - mula sa Mga Frame bawat Segundo).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang bilang ng mga bit sa bawat segundo na kinakailangan upang ipakita ang isang video ay nito bilis ng transmission - bitrate.

bitrate = lapad * taas * bit depth * mga frame bawat segundo

Halimbawa, ang isang 30 fps, 24 bps, 480x240 na video ay mangangailangan ng 82,944,000 bps o 82,944 Mbps (30x480x240x24) - ngunit iyon ay kung walang compression na paraan ang gagamitin.

Kung ang bilis ng paglipat halos pare-pareho, pagkatapos ito ay tinatawag na pare-pareho ang bilis ng paghahatid (CBR - mula sa pare-pareho ang bit rate). Ngunit maaari rin itong mag-iba, sa kasong ito ito ay tinatawag variable na baud rate (VBR - mula sa variable na bit rate).

Ang graph na ito ay nagpapakita ng limitadong VBR, kung saan hindi masyadong maraming bit ang nasasayang sa kaso ng isang ganap na madilim na frame.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang mga inhinyero sa simula ay bumuo ng isang paraan upang doblehin ang nakikitang frame rate ng isang video display nang hindi gumagamit ng karagdagang bandwidth. Ang pamamaraang ito ay kilala bilang interlaced na video; Karaniwan, nagpapadala ito ng kalahati ng screen sa unang "frame" at ang kalahati sa susunod na "frame".

Sa kasalukuyan, ang mga eksena ay kadalasang nai-render gamit progresibong teknolohiya sa pag-scan. Ito ay isang paraan ng pagpapakita, pag-iimbak o pagpapadala ng mga gumagalaw na larawan kung saan ang lahat ng mga linya ng bawat frame ay iginuhit nang sunud-sunod.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Well! Ngayon alam na natin kung paano kinakatawan ng digital ang isang imahe, kung paano nakaayos ang mga kulay nito, kung gaano karaming mga bit bawat segundo ang ginugugol natin upang magpakita ng video, kung pare-pareho ang bit rate (CBR) o variable (VBR). Alam namin ang tungkol sa ibinigay na resolution gamit ang ibinigay na frame rate, pamilyar kami sa maraming iba pang termino, gaya ng interlaced na video, PAR at ilang iba pa.

Pag-aalis ng redundancy

Ito ay kilala na ang video na walang compression ay hindi maaaring gamitin nang normal. Ang isang oras na video sa 720p na resolusyon at 30 mga frame bawat segundo ay aabot ng 278 GB. Dumating tayo sa halagang ito sa pamamagitan ng pag-multiply ng 1280 x 720 x 24 x 30 x 3600 (lapad, taas, mga bit bawat pixel, FPS at oras sa mga segundo).

Gamitin lossless compression algorithm, tulad ng DEFLATE (ginamit sa PKZIP, Gzip at PNG), ay hindi babawasan ang kinakailangang bandwidth nang sapat. Kailangan nating maghanap ng iba pang mga paraan upang i-compress ang video.

Upang gawin ito, maaari mong gamitin ang mga tampok ng aming paningin. Mas mahusay tayo sa pagkilala sa liwanag kaysa sa kulay. Ang video ay isang serye ng mga sunud-sunod na larawan na umuulit sa paglipas ng panahon. Mayroong maliit na pagkakaiba sa pagitan ng mga katabing frame ng parehong eksena. Bukod pa rito, ang bawat frame ay naglalaman ng maraming lugar na gumagamit ng pareho (o katulad) na kulay.

Kulay, liwanag at ating mga mata

Ang ating mga mata ay mas sensitibo sa liwanag kaysa sa kulay. Makikita mo ito para sa iyong sarili sa pamamagitan ng pagtingin sa larawang ito.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Kung hindi mo nakikita na sa kaliwang kalahati ng larawan ang mga kulay ng mga parisukat A ΠΈ B ay talagang pareho, at iyon ay normal. Pinipilit tayo ng ating utak na bigyang pansin ang liwanag at lilim kaysa sa kulay. Sa kanang bahagi sa pagitan ng mga itinalagang parisukat mayroong isang lumulukso ng parehong kulay - kaya madali nating (i.e. ang ating utak) na matukoy na, sa katunayan, ang mga ito ay magkaparehong kulay.

Tingnan natin (sa pinasimpleng paraan) kung paano gumagana ang ating mga mata. Ang mata ay isang kumplikadong organ na binubuo ng maraming bahagi. Gayunpaman, kami ay pinaka-interesado sa cones at rods. Ang mata ay naglalaman ng humigit-kumulang 120 milyong mga baras at 6 milyong mga kono.

Isaalang-alang natin ang pang-unawa ng kulay at ningning bilang magkahiwalay na pag-andar ng ilang bahagi ng mata (sa katunayan, ang lahat ay medyo mas kumplikado, ngunit gagawin natin itong pasimplehin). Ang mga rod cell ay pangunahing responsable para sa liwanag, habang ang mga cone cell ay responsable para sa kulay. Ang mga cone ay nahahati sa tatlong uri, depende sa pigment na taglay nito: S-cones (asul), M-cones (berde), at L-cones (pula).

Dahil mas marami tayong mga rod (liwanag) kaysa cones (kulay), maaari nating tapusin na mas may kakayahan tayong makilala ang mga transition sa pagitan ng madilim at liwanag kaysa sa mga kulay.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Mga Tampok ng Contrast Sensitivity

Ang mga mananaliksik sa pang-eksperimentong sikolohiya at marami pang ibang larangan ay nakabuo ng maraming teorya ng pangitain ng tao. At isa sa kanila ang tinatawag mga function ng contrast sensitivity. Ang mga ito ay nauugnay sa spatial at temporal na pag-iilaw. Sa madaling salita, ito ay tungkol sa kung gaano karaming mga pagbabago ang kinakailangan bago ito mapansin ng isang tagamasid. Pansinin ang maramihan ng salitang "function". Ito ay dahil sa katotohanan na masusukat natin ang mga function ng contrast sensitivity hindi lamang para sa mga itim at puti na larawan, kundi pati na rin para sa mga may kulay. Ang mga resulta ng mga eksperimentong ito ay nagpapakita na sa karamihan ng mga kaso ang ating mga mata ay mas sensitibo sa liwanag kaysa sa kulay.

Dahil alam naming mas sensitibo kami sa liwanag ng larawan, maaari naming subukang gamitin ang katotohanang ito.

Modelo ng kulay

Naisip namin nang kaunti kung paano magtrabaho sa mga larawang may kulay gamit ang RGB scheme. Mayroon ding iba pang mga modelo. Mayroong isang modelo na naghihiwalay sa luminance mula sa chroma at ito ay kilala bilang YCbCr. Sa pamamagitan ng paraan, may iba pang mga modelo na gumagawa ng isang katulad na dibisyon, ngunit isasaalang-alang lamang namin ang isang ito.

Sa ganitong modelo ng kulay Y ay isang representasyon ng liwanag, at gumagamit din ng dalawang channel ng kulay: Cb (mayaman na asul) at Cr (mayaman na pula). Maaaring makuha ang YCbCr mula sa RGB, at posible rin ang reverse conversion. Gamit ang modelong ito maaari tayong lumikha ng buong kulay na mga imahe tulad ng nakikita natin sa ibaba:

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

I-convert sa pagitan ng YCbCr at RGB

May tututol: paano makukuha ang lahat ng kulay kung hindi ginagamit ang berde?

Para masagot ang tanong na ito, i-convert natin ang RGB sa YCbCr. Gamitin natin ang mga coefficient na pinagtibay sa pamantayan BT.601, na inirerekomenda ng unit ITU-R. Ang dibisyong ito ay nagtatakda ng mga pamantayan para sa digital na video. Halimbawa: ano ang 4K? Ano dapat ang frame rate, resolution, color model?

Una, kalkulahin natin ang liwanag. Gamitin natin ang mga constant na iminungkahi ng ITU at palitan ang mga halaga ng RGB.

Y = 0.299R + 0.587G + 0.114B

Pagkatapos naming magkaroon ng liwanag, paghiwalayin namin ang asul at pula na mga kulay:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

At maaari rin tayong mag-convert pabalik at maging berde gamit ang YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Karaniwan, ang mga display (monitor, TV, screen, atbp.) ay gumagamit lamang ng modelong RGB. Ngunit ang modelong ito ay maaaring ayusin sa iba't ibang paraan:

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Color subsampling

Gamit ang isang imahe na kinakatawan bilang isang kumbinasyon ng luminance at chrominance, maaari nating samantalahin ang mas mataas na sensitivity ng visual system ng tao sa luminance kaysa sa chrominance sa pamamagitan ng piling pag-alis ng impormasyon. Ang Chroma subsampling ay isang paraan ng pag-encode ng mga larawan gamit ang mas kaunting resolution para sa chroma kaysa para sa luminance.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Magkano ang pinapayagang bawasan ang resolution ng kulay?! Lumalabas na mayroon nang ilang mga diagram na naglalarawan kung paano pangasiwaan ang resolution at pagsasama (Resulting Color = Y + Cb + Cr).

Ang mga scheme na ito ay kilala bilang downsampling system at ipinahayag bilang isang 3-tiklop na ratio - a:x:y, na tumutukoy sa bilang ng mga sample ng luminance at mga signal ng pagkakaiba ng kulay.

a β€” horizontal sampling standard (karaniwang katumbas ng 4)
x β€” bilang ng mga sample ng chroma sa unang hilera ng mga pixel (pahalang na resolution na nauugnay sa a)
y β€” ang bilang ng mga pagbabago sa mga sample ng chroma sa pagitan ng una at ikalawang hanay ng mga pixel.

Ang exception ay 4:1:0, na nagbibigay ng isang sample ng chroma sa bawat 4-by-4 na bloke ng resolusyon ng luminance.

Mga karaniwang scheme na ginagamit sa mga modernong codec:

  • 4:4:4 (walang downsampling)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - halimbawa ng pagsasanib

Narito ang isang pinagsamang larawan gamit ang YCbCr 4:2:0. Tandaan na gumagastos lang kami ng 12 bits bawat pixel.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ito ang hitsura ng parehong larawan, na naka-encode sa mga pangunahing uri ng color subsampling. Ang unang row ay ang panghuling YCbCr, ang ibabang row ay nagpapakita ng chroma resolution. Napakahusay na mga resulta, isinasaalang-alang ang bahagyang pagkawala sa kalidad.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Tandaan kapag nagbilang kami ng 278 GB na espasyo sa imbakan upang mag-imbak ng isang oras na video file sa 720p na resolusyon at 30 mga frame bawat segundo? Kung gagamitin namin ang YCbCr 4:2:0, ang laki na ito ay mababawasan ng kalahati - 139 GB. Sa ngayon, malayo pa ito sa katanggap-tanggap na resulta.

Makukuha mo mismo ang YCbCr histogram gamit ang FFmpeg. Sa larawang ito, nangingibabaw ang asul sa pula, na malinaw na nakikita sa histogram mismo.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Kulay, liwanag, kulay gamut - pagsusuri ng video

Inirerekomenda naming panoorin ang kahanga-hangang video na ito. Ipinapaliwanag nito kung ano ang liwanag, at sa pangkalahatan ang lahat ng mga tuldok ay may tuldok Ρ‘ tungkol sa liwanag at kulay.

Mga Uri ng Frame

Mag-move on na tayo. Subukan nating alisin ang redundancy ng oras. Ngunit una, tukuyin natin ang ilang pangunahing terminolohiya. Sabihin nating mayroon tayong pelikula na may 30 frame bawat segundo, narito ang unang 4 na frame nito:

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Makakakita tayo ng maraming pag-uulit sa mga frame: halimbawa, isang asul na background na hindi nagbabago mula sa frame hanggang sa frame. Upang malutas ang problemang ito, maaari naming abstractly uriin ang mga ito sa tatlong uri ng mga frame.

I-frame (Intro Frame)

Ang I-frame (reference frame, key frame, inner frame) ay self-contained. Anuman ang gusto mong ilarawan sa isip, ang isang I-frame ay mahalagang isang static na litrato. Ang unang frame ay karaniwang isang I-frame, ngunit regular naming obserbahan ang mga I-frame kahit na hindi sa mga unang frame.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

P-frame (Predicted Frame)

Sinasamantala ng P-frame (predictive frame) ang katotohanang halos palaging ang kasalukuyang larawan ay maaaring kopyahin gamit ang nakaraang frame. Halimbawa, sa pangalawang frame ang tanging pagbabago ay ang bola na sumusulong. Makukuha natin ang frame 2 sa pamamagitan lamang ng bahagyang pagbabago ng frame 1, gamit lamang ang pagkakaiba sa pagitan ng mga frame na ito. Upang bumuo ng frame 2, tinutukoy namin ang naunang frame 1.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman ← Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

B-frame (Bi-predictive Frame)

Paano ang tungkol sa mga link hindi lamang sa nakaraan, kundi pati na rin sa hinaharap na mga frame upang magbigay ng mas mahusay na compression?! Ito ay karaniwang isang B-frame (bidirectional frame).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman ← Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman β†’ Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Intermediate na pag-alis

Ang mga uri ng frame na ito ay ginagamit upang magbigay ng pinakamahusay na posibleng compression. Titingnan natin kung paano ito nangyayari sa susunod na seksyon. Sa ngayon, tandaan natin na ang pinaka "mahal" sa mga tuntunin ng memory na natupok ay ang I-frame, ang P-frame ay kapansin-pansing mas mura, ngunit ang pinaka-pinakinabangang opsyon para sa video ay ang B-frame.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Temporal redundancy (inter-frame prediction)

Tingnan natin kung anong mga opsyon ang mayroon tayo upang mabawasan ang pag-uulit sa paglipas ng panahon. Maaari nating lutasin ang ganitong uri ng redundancy gamit ang mga pamamaraan ng cross-prediction.

Susubukan naming gumastos ng ilang piraso hangga't maaari upang mag-encode ng pagkakasunud-sunod ng mga frame 0 at 1.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Makakagawa tayo pagbabawas, binabawasan lang namin ang frame 1 mula sa frame 0. Nakukuha namin ang frame 1, gamitin lamang ang pagkakaiba sa pagitan nito at ng nakaraang frame, sa katunayan ay na-encode lang namin ang resultang natitira.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ngunit paano kung sabihin ko sa iyo na mayroong isang mas mahusay na paraan na gumagamit ng mas kaunting mga piraso?! Una, hatiin natin ang frame 0 sa isang malinaw na grid na binubuo ng mga bloke. At pagkatapos ay susubukan naming itugma ang mga bloke mula sa frame 0 sa frame 1. Sa madaling salita, tatantyahin namin ang paggalaw sa pagitan ng mga frame.

Mula sa Wikipedia - block motion compensation

Hinahati ng block motion compensation ang kasalukuyang frame sa hindi magkakapatong na mga bloke at iniuulat ng motion compensation vector ang pinagmulan ng mga block (isang karaniwang maling kuru-kuro ay na nauna ang frame ay nahahati sa hindi magkakapatong na mga bloke, at sinasabi ng mga vectors ng motion compensation kung saan napupunta ang mga bloke na iyon. Ngunit sa katunayan, ito ay kabaligtaran - hindi ang nakaraang frame ang nasuri, ngunit ang susunod; hindi malinaw kung saan gumagalaw ang mga bloke, ngunit kung saan sila nanggaling). Karaniwan ang mga bloke ng pinagmulan ay nagsasapawan sa pinagmulang frame. Binubuo ng ilang algorithm ng compression ng video ang kasalukuyang frame mula sa mga bahagi ng hindi kahit isa, ngunit ilang naunang naipadala na mga frame.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Sa panahon ng proseso ng pagsusuri, nakita namin na ang bola ay lumipat mula sa (x= 0, y=25) ni (x= 6, y=26), mga halaga x ΠΈ y matukoy ang motion vector. Ang isa pang hakbang na maaari nating gawin upang mapanatili ang mga bit ay ang pag-encode lamang ng pagkakaiba ng mga motion vector sa pagitan ng huling block position at ang hinulaang isa, kaya ang huling motion vector ay magiging (x=6-0=6, y=26-25=1 ).

Sa totoong sitwasyon, ang bolang ito ay mahahati sa n mga bloke, ngunit hindi nito binabago ang kakanyahan ng bagay.

Ang mga bagay sa frame ay gumagalaw sa tatlong dimensyon, kaya kapag gumagalaw ang bola, maaari itong maging biswal na mas maliit (o mas malaki kung ito ay gumagalaw patungo sa tumitingin). Normal na walang perpektong tugma sa pagitan ng mga bloke. Narito ang isang pinagsamang view ng aming pagtatantya at ang tunay na larawan.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ngunit nakikita namin na kapag gumagamit kami ng motion estimation, may kapansin-pansing mas kaunting data para sa coding kaysa kapag gumagamit ng mas simpleng paraan ng pagkalkula ng delta sa pagitan ng mga frame.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ano ang magiging hitsura ng totoong motion compensation

Ang pamamaraan na ito ay inilalapat sa lahat ng mga bloke nang sabay-sabay. Kadalasan ang ating conditional na gumagalaw na bola ay mahahati sa ilang mga bloke nang sabay-sabay.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Maaari mong madama ang mga konseptong ito sa iyong sarili gamit jupyter.

Upang makita ang mga motion vector, maaari kang gumawa ng external na prediction video gamit ang ffmpeg.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Maaari mo ring gamitin Intel Video Pro Analyzer (ito ay binabayaran, ngunit mayroong isang libreng pagsubok na limitado sa unang sampung frame lamang).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Spatial redundancy (panloob na pagtataya)

Kung susuriin natin ang bawat frame sa isang video, makakakita tayo ng maraming magkakaugnay na lugar.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Tingnan natin ang halimbawang ito. Ang eksenang ito ay pangunahing binubuo ng asul at puti na mga kulay.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ito ay isang I-frame. Hindi namin maaaring kunin ang mga nakaraang frame para sa hula, ngunit maaari naming i-compress ito. I-encode natin ang pagpili ng pulang bloke. Kung titingnan natin ang mga kapitbahay nito, mapapansin natin na may mga usong kulay sa paligid nito.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ipinapalagay namin na ang mga kulay ay kumakalat nang patayo sa frame. Na nangangahulugan na ang kulay ng hindi kilalang mga pixel ay maglalaman ng mga halaga ng mga kapitbahay nito.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang gayong hula ay maaaring lumabas na hindi tama. Ito ay para sa kadahilanang ito na kailangan mong ilapat ang pamamaraang ito (panloob na pagtataya), at pagkatapos ay ibawas ang mga tunay na halaga. Magbibigay ito sa amin ng natitirang bloke, na magreresulta sa isang mas naka-compress na matrix kumpara sa orihinal.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Kung gusto mong magsanay gamit ang mga panloob na hula, maaari kang lumikha ng isang video ng mga macroblock at ang kanilang mga hula gamit ang ffmpeg. Upang maunawaan ang kahulugan ng bawat kulay ng bloke, kakailanganin mong basahin ang dokumentasyon ng ffmpeg.

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

O maaari mong gamitin ang Intel Video Pro Analyzer (tulad ng nabanggit ko sa itaas, ang libreng bersyon ng pagsubok ay limitado sa unang 10 mga frame, ngunit ito ay magiging sapat para sa iyo sa simula).

Paano gumagana ang isang video codec? Bahagi 1: Mga Pangunahing Kaalaman

Ang pangalawang bahagi: Paano gumagana ang video codec

Pinagmulan: www.habr.com

Magdagdag ng komento