Kepiye cara kerja codec video? Bagean 1: Dhasar

Bagéan kapindho: Cara kerja codec video

Sembarang raster gambar bisa diwakili ing wangun matriks rong dimensi. Nalika nerangake werna, idea bisa dikembangaké dening looking ing gambar minangka matriks telung dimensi, kang dimensi tambahan digunakake kanggo nyimpen data kanggo saben werna.

Yen kita nganggep warna pungkasan minangka kombinasi sing diarani. werna utami (abang, ijo lan biru), ing matriks telung dimensi kita nemtokake telung bidang: pisanan kanggo abang, kaloro kanggo ijo lan pungkasan kanggo biru.
Kepiye cara kerja codec video? Bagean 1: Dhasar
Kita bakal nelpon saben titik ing matriks iki piksel (unsur gambar). Saben piksel ngemot informasi babagan intensitas (biasane minangka nilai numerik) saben werna. Tuladhane, piksel abang tegese ngandhut 0 ijo, 0 biru lan abang maksimum. Piksel pink bisa kawangun nggunakake kombinasi telung werna. Nggunakake sawetara angka saka 0 kanggo 255, piksel pink ditetepake minangka Abang = 255, Ijo = 192 и Biru = 203.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Artikel iki diterbitake kanthi dhukungan saka EDISON.

Kita ngembangaken aplikasi kanggo video ndjogo, video streaming, lan uga kita melu ngrekam video ing kamar bedhah.

Cara alternatif kanggo encode gambar warna

Ana akeh model liyane kanggo makili werna sing nggawe gambar. Contone, sampeyan bisa nggunakake palet sing diindeks, sing mbutuhake mung siji bait kanggo makili saben piksel, tinimbang telung sing dibutuhake nalika nggunakake model RGB. Ing model kasebut, bisa nggunakake matriks 2D tinimbang matriks 3D kanggo makili saben warna. Iki ngirit memori, nanging menehi gamut warna sing luwih cilik.

Kepiye cara kerja codec video? Bagean 1: Dhasar

RGB

Contone, deleng gambar ing ngisor iki. Pasuryan pisanan wis rampung dicet. Sing liyane yaiku bidang abang, ijo lan biru (intensitas warna sing cocog ditampilake ing skala abu-abu).

Kepiye cara kerja codec video? Bagean 1: Dhasar

Kita weruh yen warna abang ing asline bakal ana ing papan sing padha ing ngendi bagean paling padhang saka pasuryan kapindho diamati. Nalika kontribusi biru utamané bisa katon mung ing mripat Mario (pasuryan pungkasan) lan unsur sandhangané. Wigati ing ngendi kabeh telung warna pesawat nyumbang paling sithik (bagian paling peteng ing gambar) - kumis Mario.

Kanggo nyimpen intensitas saben werna, sawetara bit dibutuhake - jumlah kasebut diarani ambane dicokot. Ayo dadi ngomong 8 bit ngginakaken (adhedhasar nilai saka 0 kanggo 255) saben bidang werna. Banjur kita duwe ambane warna 24 bit (8 bit * 3 pesawat R / G / B).

Sifat liya saka gambar yaiku Résolusi, yaiku jumlah piksel ing siji dimensi. Asring dituduhake minangka jembar × dhuwur, kaya ing 4 dening 4 conto gambar ing ngisor iki.
Kepiye cara kerja codec video? Bagean 1: Dhasar

Properti liyane sing ditindakake nalika nggarap gambar / video yaiku rasio aspek, nggambarake hubungan proporsional normal antarane jembar lan dhuwur saka gambar utawa piksel.

Nalika padha ngomong yen film utawa gambar tartamtu ukurane 16 dening 9, biasane tegese rasio aspek tampilan (DAR - saka Rasio Aspek Tampilan). Nanging, kadhangkala bisa uga ana macem-macem wujud piksel individu - ing kasus iki kita ngomong babagan rasio piksel (PAR - saka Rasio aspek piksel).

Kepiye cara kerja codec video? Bagean 1: Dhasar

Kepiye cara kerja codec video? Bagean 1: Dhasar

Cathetan kanggo nyonya rumah: DVD соответствует DAR 4 nganti 3

Sanajan resolusi DVD sing nyata yaiku 704x480, nanging isih njaga rasio aspek 4:3 amarga PAR 10:11 (704x10 / 480x11).

Lan pungkasanipun, kita bisa nemtokake видео kaya urutan saka n pigura kanggo periode wektu, sing bisa dianggep minangka ukuran tambahan. A n banjur iku frame rate utawa jumlah pigura per detik (fps - saka Bingkai saben Detik).

Kepiye cara kerja codec video? Bagean 1: Dhasar

Jumlah bit per detik sing dibutuhake kanggo nampilake video yaiku kacepetan transmisi - bitrate.

bitrate = jembaré * dhuwur * ambane bit * pigura per detik

Contone, video 30 fps, 24 bps, 480x240 mbutuhake 82,944,000 bps utawa 82,944 Mbps (30x480x240x24) - nanging yen ora ana cara kompresi sing digunakake.

Yen kacepetan transfer meh pancet, banjur diarani kacepetan transmisi pancet (Ninja - saka bit rate pancet). Nanging bisa uga beda-beda, ing kasus iki diarani baud rate variabel (VBR - saka tingkat bit variabel).

Grafik iki nuduhake VBR winates, ing ngendi ora kakehan bit boroske ing cilik saka pigura rampung peteng.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Insinyur wiwitane ngembangake cara kanggo ngganda tingkat pigura sing dirasakake saka tampilan video tanpa nggunakake bandwidth tambahan. Cara iki dikenal minangka video interlaced; Sejatine, iku ngirim setengah layar ing "pigura" pisanan lan setengah liyane ing "pigura" sabanjuré.

Saiki, pemandangan biasane digawe nggunakake teknologi scanning progresif. Iki minangka cara kanggo nampilake, nyimpen utawa ngirim gambar obah ing ngendi kabeh garis saben pigura digambar kanthi urutan.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Inggih! Saiki kita ngerti kepiye gambar diwakili kanthi digital, kepiye warnane disusun, pirang-pirang bit per detik sing digunakake kanggo nuduhake video, yen tingkat bit konstan (CBR) utawa variabel (VBR). Kita ngerti babagan resolusi sing diwenehake nggunakake tingkat pigura sing diwenehake, kita kenal karo akeh istilah liyane, kayata video interlaced, PAR lan sawetara liyane.

Mbusak redundansi

Dikenal yen video tanpa kompresi ora bisa digunakake kanthi normal. Video dawa jam kanthi resolusi 720p lan 30 pigura per detik bakal njupuk 278 GB. Kita teka ing Nilai iki dening multiply 1280 x 720 x 24 x 30 x 3600 (jembaré, dhuwur, bit saben piksel, FPS lan wektu ing detik).

Gunakake algoritma kompresi lossless, kaya DEFLATE (digunakake ing PKZIP, Gzip lan PNG), ora bakal ngurangi bandwidth sing dibutuhake cukup. Kita kudu golek cara liya kanggo ngompres video.

Kanggo nindakake iki, sampeyan bisa nggunakake fitur saka sesanti kita. Kita luwih apik kanggo mbedakake padhang tinimbang warna. Video minangka seri gambar urutan sing bola-bali liwat wektu. Ana beda cilik antarane pigura jejer saka pemandangan padha. Kajaba iku, saben pigura ngemot akeh wilayah kanthi warna sing padha (utawa padha).

Werna, padhang lan mripat kita

Mripat kita luwih sensitif marang padhang tinimbang warna. Sampeyan bisa ndeleng dhewe kanthi ndeleng gambar iki.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Yen sampeyan ora weruh sing ing sisih kiwa gambar werna kothak A и B asline padha, banjur iku normal. Otak kita meksa supaya luwih fokus marang cahya lan iyub-iyub tinimbang warna. Ing sisih tengen antarane kothak sing ditemtokake ana jumper kanthi warna sing padha - supaya kita (yaiku otak kita) kanthi gampang nemtokake manawa, nyatane, padha warna.

Ayo ndeleng (kanthi cara sing disederhanakake) babagan cara kerja mata. Mripate minangka organ kompleks sing kasusun saka pirang-pirang bagean. Nanging, kita paling kasengsem ing cones lan rod. Mripate ngandhut kira-kira 120 yuta rod lan 6 yuta cones.

Ayo dadi nimbang pemahaman werna lan padhang minangka fungsi kapisah saka bagean tartamtu saka mripat (nyatane, kabeh iku Luwih rumit, nanging kita bakal nyederhanakake). Sel rod tanggung jawab utamane kanggo padhang, dene sel kerucut tanggung jawab kanggo warna. Cones dipérang dadi telung jinis, gumantung saka pigmen sing ana: S-cones (biru), M-cones (ijo), lan L-cones (abang).

Awit kita duwe luwih akeh rod (padhang) tinimbang cones (werna), kita bisa nyimpulake yen kita luwih bisa mbedakake transisi antarane peteng lan cahya tinimbang werna.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Fitur Sensitivitas Kontras

Peneliti ing psikologi eksperimen lan akeh bidang liyane wis ngembangake akeh teori babagan visi manungsa. Lan salah sijine diarani fungsi sensitivitas kontras. Padha ana hubungane karo katerangan spasial lan temporal. Cekakipun, punika bab carane akeh owah-owahan sing dibutuhake sadurunge pengamat sok dong mirsani. Wigati jamak saka tembung "fungsi". Iki amarga kasunyatan manawa kita bisa ngukur fungsi sensitivitas kontras ora mung kanggo gambar ireng lan putih, nanging uga kanggo warna. Asil eksperimen kasebut nuduhake yen ing pirang-pirang kasus mripat kita luwih sensitif marang padhang tinimbang warna.

Amarga kita ngerti yen kita luwih sensitif marang padhang gambar, kita bisa nyoba nggunakake kasunyatan iki.

Model warna

We figured metu sethitik carane bisa karo gambar werna nggunakake skema RGB. Ana uga model liyane. Ana model sing misahake luminance saka chroma lan dikenal minangka YCbCr. Miturut cara, ana model liyane sing nggawe divisi sing padha, nanging kita mung bakal nimbang iki.

Ing model werna iki Y minangka perwakilan padhang, lan uga nggunakake rong saluran warna: Cb (biru sugih) lan Cr (abang sugih). YCbCr bisa asalé saka RGB, lan konversi mbalikke uga bisa. Nggunakake model iki, kita bisa nggawe gambar warna lengkap kaya sing kita deleng ing ngisor iki:

Kepiye cara kerja codec video? Bagean 1: Dhasar

Ngonversi antarane YCbCr lan RGB

Ana sing bakal mbantah: kepiye carane entuk kabeh warna yen ijo ora digunakake?

Kanggo njawab pitakonan iki, ayo ngowahi RGB dadi YCbCr. Ayo nggunakake koefisien sing diadopsi ing standar kasebut BT.601, kang dianjurake dening unit ITU-R. Divisi iki nyetel standar kanggo video digital. Contone: apa 4K? Apa sing kudu dadi frame rate, resolusi, model warna?

Pisanan ayo ngetung padhange. Ayo nggunakake konstanta sing diusulake dening ITU lan ngganti nilai RGB.

Y = 0.299R + 0.587G + 0.114B

Sawise padhang, kita bakal misahake warna biru lan abang:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

Lan kita uga bisa ngowahi maneh lan malah dadi ijo nggunakake YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Biasane, tampilan (monitor, TV, layar, lsp) mung nggunakake model RGB. Nanging model iki bisa diatur kanthi cara sing beda:

Kepiye cara kerja codec video? Bagean 1: Dhasar

Subsampling warna

Kanthi gambar sing dituduhake minangka kombinasi luminance lan chrominance, kita bisa ngeksploitasi sensitivitas sistem visual manungsa sing luwih gedhe kanggo luminance tinimbang chrominance kanthi mbusak informasi kanthi selektif. Chroma subsampling minangka cara ngodhe gambar kanthi resolusi kurang kanggo kroma tinimbang luminance.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Pira sing diidini nyuda resolusi warna?! Pranyata wis ana sawetara diagram sing njlèntrèhaké cara nangani résolusi lan gabung (Warna Asil = Y + Cb + Cr).

Skema kasebut dikenal minangka sistem downsampling lan dituduhake minangka rasio 3 kali lipat - a:x:y, sing nemtokake jumlah sampel luminance lan sinyal prabédan werna.

a - standar sampling horisontal (biasane padha karo 4)
x — jumlah sampel kroma ing baris pisanan piksel (resolusi horisontal relatif marang a)
y - jumlah owah-owahan ing conto kroma antarane baris pisanan lan kaloro piksel.

Pangecualian punika 4:1:0, nyedhiyakake siji sampel kroma ing saben blok resolusi luminance 4-by-4.

Skema umum sing digunakake ing codec modern:

  • 4:4:4 (ora ana downsampling)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - conto fusi

Punika gambar gabungan nggunakake YCbCr 4:2:0. Elinga yen kita mung mbuwang 12 bit saben piksel.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Iki minangka gambar sing padha, dienkode karo jinis utama subsampling warna. Baris pisanan yaiku YCbCr pungkasan, baris ngisor nuduhake resolusi kroma. Asil banget prayoga, considering mundhut tipis ing kualitas.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Elinga nalika kita ngetung 278 GB ruang panyimpenan kanggo nyimpen file video sing dawane jam kanthi resolusi 720p lan 30 pigura per detik? Yen kita nggunakake YCbCr 4: 2: 0, banjur ukuran iki bakal suda setengah - 139 GB. Nganti saiki, isih adoh saka asil sing bisa ditampa.

Sampeyan bisa entuk histogram YCbCr dhewe nggunakake FFmpeg. Ing gambar iki, biru ndominasi abang, sing katon jelas ing histogram dhewe.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Werna, padhang, gamut warna - review video

Disaranake nonton video sing apik tenan iki. Iku nerangake apa padhange, lan umume kabeh titik burik ё bab padhang lan werna.

Jinis pigura

Ayo nerusake. Ayo dadi nyoba kanggo mbusak redundansi wektu. Nanging pisanan, ayo nemtokake sawetara terminologi dhasar. Contone, kita duwe film kanthi 30 frame per detik, iki 4 bingkai pertama:

Kepiye cara kerja codec video? Bagean 1: Dhasar Kepiye cara kerja codec video? Bagean 1: Dhasar Kepiye cara kerja codec video? Bagean 1: Dhasar Kepiye cara kerja codec video? Bagean 1: Dhasar

Kita bisa ndeleng akeh pengulangan ing pigura: contone, latar mburi biru sing ora owah saka pigura menyang pigura. Kanggo ngatasi masalah iki, kita bisa abstrak klasifikasi menyang telung jinis pigura.

Aku-frame (Intro Frame)

I-frame (bingkai referensi, pigura kunci, pigura njero) mandhiri. Preduli saka apa sing pengin digambarake, pigura-I iku sejatine foto statis. Pigura pisanan biasane I-pigura, nanging kita bakal ajeg mirsani I-pigura malah antarane ora pigura pisanan.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Rangka P (PBingkai redicted)

Pigura P (bingkai prediktif) njupuk kauntungan saka kasunyatan sing meh tansah gambar saiki bisa maleh nggunakake pigura sadurungé. Contone, ing pigura kapindho mung owah-owahan werni maju. Kita bisa njaluk pigura 2 dening mung rada ngowahi pigura 1, mung nggunakake prabédan antarane pigura iki. Kanggo mbangun pigura 2, kita waca pigura 1 sadurunge.

Kepiye cara kerja codec video? Bagean 1: DhasarKepiye cara kerja codec video? Bagean 1: Dhasar

Rangka B (Bi-predictive Frame)

Apa bab pranala ora mung kanggo kepungkur, nanging uga kanggo pigura mangsa kanggo nyedhiyani komprèsi malah luwih apik?! Iki Sejatine B-pigura (pigura bidirectional).

Kepiye cara kerja codec video? Bagean 1: DhasarKepiye cara kerja codec video? Bagean 1: DhasarKepiye cara kerja codec video? Bagean 1: Dhasar

Penarikan penengah

Jinis pigura iki digunakake kanggo nyedhiyakake kompresi sing paling apik. Kita bakal ndeleng kepiye kedadeyan kasebut ing bagean sabanjure. Saiki, ayo padha Wigati sing paling "larang" ing syarat-syarat memori migunakaken I-pigura, P-pigura katon luwih murah, nanging pilihan paling duwe bathi kanggo video punika B-pigura.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Redundansi temporal (prediksi antar-bingkai)

Ayo goleki opsi apa sing kudu diminimalisir pengulangan saka wektu. Kita bisa ngatasi jinis redundansi iki nggunakake metode prediksi silang.

Kita bakal nyoba nggunakake sawetara bit kanggo ngode urutan pigura 0 lan 1.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Kita bisa ngasilake pangurangan, kita mung nyuda pigura 1 saka pigura 0. We njaluk pigura 1, mung nggunakake prabédan antarane iku lan pigura sadurungé, nyatane kita mung encode seko asil.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Nanging apa yen aku ngandhani yen ana cara sing luwih apik sing nggunakake bit sing luwih sithik?! Pisanan, ayo ngrusak pigura 0 dadi kothak sing jelas sing kalebu blok. Banjur kita bakal nyoba kanggo cocog pamblokiran saka pigura 0 karo pigura 1. Ing tembung liyane, kita bakal ngira gerakan antarane pigura.

Saka Wikipedia - kompensasi gerakan blok

Kompensasi gerakan pamblokiran mbagi pigura saiki dadi blok sing ora tumpang tindih lan vektor kompensasi gerakan nyatakake asal-usul blok kasebut (misconception umum yaiku sadurunge pigura dipérang dadi pamblokiran non-tumpang tindih, lan vektor ganti rugi gerakan marang ngendi sing pamblokiran pindhah. Nanging nyatane, cara liya - dudu pigura sadurunge sing dianalisis, nanging sabanjure; ora jelas ing ngendi blok kasebut obah, nanging saka ngendi asale). Biasane pamblokiran sumber tumpang tindih ing pigura sumber. Sawetara algoritma komprèsi video nglumpukake pigura saiki saka bagean ora malah siji, nanging sawetara pigura sadurunge ditularaké.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Sajrone proses evaluasi, kita weruh yen bal wis pindhah saka (x= 0, y= 25) nganti (x= 6, y=26), nilai x и y nemtokake vektor gerakan. Langkah liya sing bisa ditindakake kanggo ngreksa bit yaiku ngode mung bedane vektor gerakan antarane posisi blok pungkasan lan sing diprediksi, dadi vektor gerakan pungkasan yaiku (x=6-0=6, y=26-25=1 ).

Ing kahanan nyata, bal iki bakal dipérang dadi n pamblokiran, nanging iki ora ngganti inti saka prakara.

Obyek ing pigura pindhah ing telung dimensi, supaya nalika werni gerakane, iku bisa dadi visual cilik (utawa luwih gedhe yen gerakane menyang panampil). Iku normal sing ora bakal ana match sampurna antarane pamblokiran. Punika tampilan gabungan perkiraan kita lan gambar nyata.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Nanging kita weruh yen kita nggunakake taksiran gerakan, ana data noticeably kurang kanggo coding saka nalika nggunakake cara prasaja kanggo ngitung delta antarane pigura.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Apa kompensasi gerakan nyata bakal katon kaya

Teknik iki ditrapake kanggo kabeh blok sekaligus. Asring bal obah kondisional kita bakal dipérang dadi sawetara blok bebarengan.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Sampeyan bisa ngrasakake konsep kasebut kanthi nggunakake dhewe jupyter.

Kanggo ndeleng vektor gerakan, sampeyan bisa nggawe video prediksi eksternal nggunakake ffmpeg.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Sampeyan uga bisa nggunakake Intel Video Pro Analyzer (iku mbayar, nanging ana nyoba gratis sing diwatesi mung kanggo sepuluh pigura pisanan).

Kepiye cara kerja codec video? Bagean 1: Dhasar

Redundansi spasial (prakiraan internal)

Yen kita nganalisa saben pigura ing video, kita bakal nemokake akeh wilayah sing saling nyambungake.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Ayo dadi liwat conto iki. Pemandangan iki utamané kasusun saka werna biru lan putih.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Iki minangka I-frame. Kita ora bisa njupuk pigura sadurungé kanggo prediksi, nanging kita bisa compress. Ayo encode pilihan saka blok abang. Yen kita katon ing tanggi, kita sok dong mirsani sing ana sawetara tren werna watara.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Kita nganggep yen werna nyebar vertikal ing pigura. Tegese warna piksel sing ora dingerteni bakal ngemot nilai tetanggan.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Ramalan kasebut bisa uga salah. Mulane sampeyan kudu nggunakake metode iki (ramalan internal), banjur nyuda nilai nyata. Iki bakal menehi pemblokiran ampas, sing bakal ngasilake matriks sing luwih dikompres dibandhingake karo asline.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Yen sampeyan pengin latihan karo prediksi internal, sampeyan bisa nggawe video macroblocks lan prediksi nggunakake ffmpeg. Kanggo mangerteni makna saben werna blok, sampeyan kudu maca dokumentasi ffmpeg.

Kepiye cara kerja codec video? Bagean 1: Dhasar

Utawa sampeyan bisa nggunakake Intel Video Pro Analyzer (kaya sing wis kasebut ing ndhuwur, versi nyoba gratis diwatesi ing 10 pigura pisanan, nanging iki bakal cukup kanggo sampeyan ing wiwitan).

Kepiye cara kerja codec video? Bagean 1: Dhasar

Bagéan kapindho: Cara kerja codec video

Source: www.habr.com

Add a comment