Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Bahagian pertama: Asas bekerja dengan video dan imej

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Apa? Codec video ialah sekeping perisian/perkakasan yang memampatkan dan/atau menyahmampat video digital.

Untuk apa? Walaupun batasan tertentu baik dari segi lebar jalur dan
dan dari segi ruang penyimpanan data, pasaran menuntut video yang lebih berkualiti. Adakah anda masih ingat bagaimana dalam catatan terakhir kami mengira minimum yang diperlukan untuk 30 bingkai sesaat, 24 bit setiap piksel, dengan resolusi 480x240? Kami menerima 82,944 Mbit/s tanpa pemampatan. Pada masa ini, pemampatan merupakan satu-satunya cara untuk menghantar HD/FullHD/4K secara amnya ke skrin televisyen dan Internet. Bagaimana ini dicapai? Sekarang mari kita lihat secara ringkas kaedah utama.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Terjemahan dibuat dengan sokongan Perisian EDISON.

Kami bertunang penyepaduan sistem pengawasan videoDan kami sedang membangunkan mikrotomograf.

Codec lwn Container

Kesilapan biasa yang dilakukan oleh pemula ialah codec video digital dan bekas video digital yang mengelirukan. Bekas adalah format tertentu. Pembalut yang mengandungi metadata video (dan mungkin audio). Video yang dimampatkan boleh dianggap sebagai muatan kontena.

Biasanya, sambungan fail video menunjukkan jenis bekasnya. Contohnya, fail video.mp4 mungkin sebuah bekas MPEG-4 Bahagian 14, dan fail bernama video.mkv berkemungkinan besar matryoshka. Untuk memastikan sepenuhnya codec dan format bekas, anda boleh gunakan FFmpeg atau MediaInfo.

Sedikit sejarah

Sebelum kita sampai ke Bagaimana?, mari kita menyelami sedikit sejarah untuk memahami beberapa codec lama dengan lebih baik.

Codec video H.261 muncul pada tahun 1990 (secara teknikal - pada tahun 1988) dan dicipta untuk beroperasi pada kadar pemindahan data 64 Kbps. Ia sudah menggunakan idea seperti pensubsampelan warna, blok makro, dsb. Piawaian codec video telah diterbitkan pada tahun 1995 H.263, yang dibangunkan sehingga 2001.

Versi pertama telah siap pada tahun 2003 H.264 / AVC. Pada tahun yang sama, TrueMotion mengeluarkan codec video lossy percuma yang dipanggil VP3. Google membeli syarikat itu pada tahun 2008, mengeluarkannya VP8 pada tahun yang sama. Pada Disember 2012, Google mengeluarkannya VP9, dan ia disokong dalam kira-kira ΒΎ pasaran penyemak imbas (termasuk peranti mudah alih).

AV1 ialah codec video sumber terbuka dan percuma baharu yang dibangunkan oleh Perikatan untuk Media Terbuka (AOMedia), yang merangkumi syarikat yang paling terkenal, seperti: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel dan Cisco. Versi pertama codec, 0.1.0, diterbitkan pada 7 April 2016.

Kelahiran AV1

Pada awal 2015, Google sedang berusaha VP10Xiph (yang dimiliki oleh Mozilla) sedang berusaha Daala, dan Cisco membuat codec video percuma sendiri dipanggil Thor.

kemudian MPEG LA pertama kali mengumumkan had tahunan untuk HEVC (H.265) dan yuran 8 kali lebih tinggi daripada H.264, tetapi mereka tidak lama kemudian menukar peraturan sekali lagi:

tiada had tahunan,
yuran kandungan (0,5% daripada hasil) dan
yuran unit adalah kira-kira 10 kali lebih tinggi daripada H.264.

Perikatan untuk Media Terbuka telah dicipta oleh syarikat dari bidang yang berbeza: pengeluar peralatan (Intel, AMD, ARM, Nvidia, Cisco), penyedia kandungan (Google, Netflix, Amazon), pencipta penyemak imbas (Google, Mozilla) dan lain-lain.

Syarikat-syarikat itu mempunyai matlamat yang sama - codec video tanpa royalti. Kemudian muncul AV1 dengan lesen paten yang lebih mudah. Timothy B. Terryberry memberikan persembahan yang menakjubkan yang menjadi asal usul konsep AV1 semasa dan model pelesenannya.

Anda akan terkejut apabila mengetahui bahawa anda boleh menganalisis codec AV1 melalui penyemak imbas (mereka yang berminat boleh pergi ke aomanalyzer.org).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Codec universal

Mari kita lihat mekanisme utama yang mendasari codec video universal. Kebanyakan konsep ini berguna dan digunakan dalam codec moden seperti VP9, AV1 ΠΈ HEVC. Saya memberi amaran kepada anda bahawa banyak perkara yang dijelaskan akan dipermudahkan. Kadangkala contoh dunia sebenar (seperti H.264) akan digunakan untuk menunjukkan teknologi.

Langkah pertama - membelah imej

Langkah pertama ialah membahagikan bingkai kepada beberapa bahagian, subseksyen dan seterusnya.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Untuk apa? Terdapat banyak sebab. Apabila kita membelah imej, kita boleh meramalkan vektor gerakan dengan lebih tepat dengan menggunakan bahagian kecil untuk bahagian bergerak kecil. Manakala untuk latar belakang statik anda boleh mengehadkan diri anda kepada bahagian yang lebih besar.

Codec biasanya menyusun bahagian ini ke dalam bahagian (atau ketulan), makroblock (atau pengekodan blok pokok) dan berbilang subseksyen. Saiz maksimum partition ini berbeza-beza, HEVC menetapkannya kepada 64x64 manakala AVC menggunakan 16x16, dan subpartition boleh dibahagikan kepada saiz 4x4.

Adakah anda masih ingat jenis bingkai dari artikel lepas?! Perkara yang sama boleh digunakan pada blok, jadi kita boleh mempunyai serpihan I, blok B, blok makro P, dll.

Bagi mereka yang ingin berlatih, tonton bagaimana imej dibahagikan kepada bahagian dan subseksyen. Untuk melakukan ini, anda boleh menggunakan yang telah disebutkan dalam artikel sebelumnya. Penganalisis Video Intel Intel (yang berbayar, tetapi dengan versi percubaan percuma yang terhad kepada 10 bingkai pertama). Bahagian dianalisis di sini VP9:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Langkah ke-2 - ramalan

Sebaik sahaja kami mempunyai bahagian, kami boleh membuat ramalan astrologi untuk bahagian tersebut. Untuk ramalan INTER mesti dipindahkan vektor gerakan dan selebihnya, dan untuk ramalan INTRA ia dihantar arah ramalan dan selebihnya.

Langkah ke-3 - transformasi

Sebaik sahaja kita mempunyai blok baki (bahagian yang diramalkan β†’ bahagian sebenar), adalah mungkin untuk mengubahnya sedemikian rupa sehingga kita tahu piksel mana yang boleh dibuang sambil mengekalkan kualiti keseluruhan. Terdapat beberapa transformasi yang memberikan tingkah laku yang tepat.

Walaupun terdapat kaedah lain, mari kita lihat dengan lebih terperinci. penjelmaan kosinus diskret (DCT - dari penjelmaan kosinus diskret). Fungsi utama DCT:

  • Menukar blok piksel kepada blok pekali frekuensi yang sama saiz.
  • Merapatkan kuasa untuk membantu menghapuskan lebihan ruang.
  • Menyediakan kebolehbalikan.

2 Februari 2017 Sintra R.J. (Cintra, RJ) dan Bayer F.M. (Bayer FM) menerbitkan artikel tentang transformasi seperti DCT untuk pemampatan imej yang memerlukan hanya 14 penambahan.

Jangan risau jika anda tidak memahami faedah setiap mata. Sekarang mari kita gunakan contoh khusus untuk melihat nilai sebenar mereka.

Mari kita ambil blok piksel 8x8 ini:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Blok ini diberikan kepada imej 8 kali 8 piksel berikut:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Gunakan DCT pada blok piksel ini dan dapatkan blok pekali 8x8:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Dan jika kita membuat blok pekali ini, kita akan mendapat imej berikut:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Seperti yang anda lihat, ia tidak kelihatan seperti imej asal. Anda dapat melihat bahawa pekali pertama sangat berbeza daripada yang lain. Pekali pertama ini dikenali sebagai pekali DC, yang mewakili semua sampel dalam tatasusunan input, sesuatu seperti purata.

Blok pekali ini mempunyai sifat yang menarik: ia memisahkan komponen frekuensi tinggi daripada komponen frekuensi rendah.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Dalam imej, kebanyakan kuasa tertumpu pada frekuensi yang lebih rendah, jadi jika anda menukar imej kepada komponen frekuensinya dan membuang pekali frekuensi yang lebih tinggi, anda boleh mengurangkan jumlah data yang diperlukan untuk menerangkan imej tanpa mengorbankan terlalu banyak kualiti gambar.

Kekerapan merujuk kepada seberapa cepat isyarat berubah.

Mari cuba gunakan pengetahuan yang diperoleh dalam kes ujian dengan menukar imej asal kepada frekuensinya (blok pekali) menggunakan DCT dan kemudian membuang sebahagian daripada pekali yang paling tidak penting.

Mula-mula kita menukarnya kepada domain frekuensi.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Seterusnya, kami membuang sebahagian (67%) pekali, terutamanya bahagian bawah kanan.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Akhir sekali, kami membina semula imej daripada blok pekali yang dibuang ini (ingat, ia mesti boleh terbalik) dan membandingkannya dengan yang asal.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Kami melihat ia menyerupai imej asal, tetapi terdapat banyak perbezaan daripada yang asal. Kami membuang 67,1875% dan masih mendapat sesuatu yang menyerupai yang asal. Adalah mungkin untuk membuang pekali dengan lebih teliti untuk mendapatkan imej yang lebih berkualiti, tetapi itu adalah topik seterusnya.

Setiap pekali dijana menggunakan semua piksel

Penting: setiap pekali tidak dipetakan terus kepada satu piksel, tetapi merupakan jumlah wajaran semua piksel. Graf yang menakjubkan ini menunjukkan cara pekali pertama dan kedua dikira menggunakan pemberat unik untuk setiap indeks.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Anda juga boleh cuba memvisualisasikan DCT dengan melihat pembentukan imej mudah berdasarkannya. Sebagai contoh, berikut ialah simbol A yang dijana menggunakan setiap berat pekali:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Langkah ke-4 - kuantisasi

Selepas kita membuang beberapa pekali pada langkah sebelumnya, pada langkah terakhir (transformasi) kita melakukan bentuk kuantisasi khas. Pada peringkat ini adalah boleh diterima untuk kehilangan maklumat. Atau, lebih mudah, kami akan mengukur pekali untuk mencapai pemampatan.

Bagaimanakah anda boleh mengukur satu blok pekali? Salah satu kaedah paling mudah ialah pengkuantitian seragam, apabila kita mengambil blok, bahagikannya dengan satu nilai (dengan 10) dan bulatkan hasilnya.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Bolehkah kita membalikkan blok pekali ini? Ya, kita boleh, mendarab dengan nilai yang sama yang kita bahagikan.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Pendekatan ini bukanlah yang terbaik kerana ia tidak mengambil kira kepentingan setiap pekali. Seseorang boleh menggunakan matriks pengkuantiti dan bukannya satu nilai, dan matriks ini boleh mengeksploitasi sifat DCT dengan mengukur majoriti bahagian kanan bawah dan minoriti kiri atas.

Langkah 5 - pengekodan entropi

Sebaik sahaja kami telah mengukur data (blok imej, serpihan, bingkai), kami masih boleh memampatkannya tanpa kehilangan. Terdapat banyak cara algoritma untuk memampatkan data. Kami akan melihat dengan pantas beberapa daripadanya, untuk pemahaman yang lebih mendalam anda boleh membaca buku Memahami Pemampatan: Pemampatan Data untuk Pembangun Moden ("Memahami Pemampatan: Pemampatan Data untuk Pembangun Moden").

Pengekodan video menggunakan VLC

Katakan kita mempunyai aliran watak: a, e, r ΠΈ t. Kebarangkalian (antara 0 hingga 1) kekerapan setiap aksara muncul dalam aliran ditunjukkan dalam jadual ini.

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

Kami boleh menetapkan kod binari unik (sebaik-baiknya yang kecil) kepada yang paling berkemungkinan, dan kod yang lebih besar kepada yang kurang berkemungkinan.

a e r t
Kebarangkalian 0,3 0,3 0,2 0,2
Kod binari 0 10 110 1110

Kami memampatkan aliran, dengan mengandaikan bahawa kami akan menghabiskan 8 bit untuk setiap aksara. Tanpa pemampatan, 24 bit diperlukan setiap aksara. Jika anda menggantikan setiap aksara dengan kodnya, anda mendapat penjimatan!

Langkah pertama ialah mengekod aksara e, yang bersamaan dengan 10, dan aksara kedua ialah a, yang ditambah (bukan dalam cara matematik): [10][0], dan akhirnya aksara ketiga t, yang menjadikan aliran bit termampat terakhir kami sama dengan [10][0][1110] atau 1001110, yang memerlukan hanya 7 bit (3,4 kali kurang ruang daripada yang asal).

Sila ambil perhatian bahawa setiap kod mestilah kod unik dengan awalan. Algoritma Huffman akan membantu anda mencari nombor ini. Walaupun kaedah ini bukan tanpa kelemahannya, terdapat codec video yang masih menawarkan kaedah algoritma ini untuk pemampatan.

Kedua-dua pengekod dan penyahkod mesti mempunyai akses kepada jadual simbol dengan kod binari mereka. Oleh itu, ia juga perlu menghantar jadual sebagai input.

Pengekodan aritmetik

Katakan kita mempunyai aliran watak: a, e, r, s ΠΈ t, dan kebarangkalian mereka dibentangkan dalam jadual ini.

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

Menggunakan jadual ini, kami akan membina julat yang mengandungi semua aksara yang mungkin, diisih mengikut nombor terbesar.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Sekarang mari kita mengekod aliran tiga aksara: makan.

Mula-mula pilih watak pertama e, yang berada dalam subjulat dari 0,3 hingga 0,6 (tidak termasuk). Kami mengambil subjulat ini dan membahagikannya semula dalam perkadaran yang sama seperti sebelumnya, tetapi untuk julat baharu ini.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Mari teruskan pengekodan aliran kami makan. Sekarang ambil watak kedua a, yang berada dalam subjulat baharu daripada 0,3 hingga 0,39, dan kemudian ambil aksara terakhir kami t dan mengulangi proses yang sama sekali lagi, kita mendapat sub-julat terakhir dari 0,354 hingga 0,372.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Kita hanya perlu memilih nombor dalam subjulat terakhir dari 0,354 hingga 0,372. Mari pilih 0,36 (tetapi anda boleh memilih mana-mana nombor lain dalam subjulat ini). Hanya dengan nombor ini kami akan dapat memulihkan strim asal kami. Seolah-olah kami melukis garisan dalam julat untuk mengekod aliran kami.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Operasi terbalik (iaitu, penyahkodan) adalah semudah: dengan nombor kami 0,36 dan julat awal kami, kami boleh menjalankan proses yang sama. Tetapi sekarang, menggunakan nombor ini, kami mengenal pasti aliran yang dikodkan menggunakan nombor ini.

Dengan julat pertama, kami mendapati bahawa nombor kami sepadan dengan kepingan, oleh itu ini adalah watak pertama kami. Sekarang kita bahagikan sub-julat ini sekali lagi dengan mengikuti proses yang sama seperti sebelum ini. Di sini anda boleh melihat bahawa 0,36 sepadan dengan simbol a, dan selepas mengulangi proses kami tiba di watak terakhir t (membentuk aliran dikodkan asal kami makan).

Kedua-dua pengekod dan penyahkod mesti mempunyai jadual kebarangkalian simbol, jadi ia perlu menghantarnya dalam data input juga.

Agak elegan, bukan? Sesiapa yang datang dengan penyelesaian ini sangat bijak. Sesetengah codec video menggunakan teknik ini (atau sekurang-kurangnya menawarkannya sebagai pilihan).

Ideanya adalah untuk memampatkan aliran bit terkuantisasi tanpa kehilangan. Pastinya artikel ini kehilangan banyak butiran, sebab, pertukaran, dsb. Tetapi jika anda seorang pembangun, anda harus mengetahui lebih lanjut. Codec baharu cuba menggunakan algoritma pengekodan entropi yang berbeza seperti Jawapan.

Langkah 6 - format aliran bit

Selepas melakukan semua ini, yang tinggal hanyalah membongkar bingkai termampat dalam konteks langkah yang dilakukan. Penyahkod mesti dimaklumkan secara jelas tentang keputusan yang dibuat oleh pengekod. Penyahkod mesti disediakan dengan semua maklumat yang diperlukan: kedalaman bit, ruang warna, resolusi, maklumat ramalan (vektor gerakan, ramalan INTER berarah), profil, tahap, kadar bingkai, jenis bingkai, nombor bingkai dan banyak lagi.

Kami akan melihat dengan pantas pada aliran bit H.264. Langkah pertama kami ialah mencipta aliran bit H.264 yang minimum (FFmpeg secara lalai menambah semua pilihan pengekodan seperti SEI NAL β€” kita akan mengetahui lebih jauh lagi). Kita boleh melakukan ini menggunakan repositori dan FFmpeg kita sendiri.

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

Perintah ini akan menghasilkan aliran bit mentah H.264 dengan satu bingkai, resolusi 64Γ—64, dengan ruang warna YUV420. Dalam kes ini, imej berikut digunakan sebagai bingkai.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

H.264 bitstream

Standard AVC (H.264) menentukan bahawa maklumat akan dihantar dalam makroframe (dalam pengertian rangkaian), dipanggil nal (ini ialah tahap abstraksi rangkaian). Matlamat utama NAL adalah untuk menyediakan persembahan video "mesra web". Piawaian ini harus berfungsi pada TV (berasaskan aliran), Internet (berasaskan paket).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Terdapat penanda penyegerakan untuk menentukan sempadan unsur NAL. Setiap token penyegerakan mengandungi nilai 0x00 0x00 0x01, kecuali yang pertama, yang sama dengan 0x00 0x00 0x00 0x01. Jika kita melancarkan hexdump untuk aliran bit H.264 yang dihasilkan, kami mengenal pasti sekurang-kurangnya tiga corak NAL pada permulaan fail.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Seperti yang dinyatakan, penyahkod mesti mengetahui bukan sahaja data imej, tetapi juga butiran video, bingkai, warna, parameter yang digunakan dan banyak lagi. Bait pertama setiap NAL mentakrifkan kategori dan jenisnya.

pengecam jenis NAL ОписаниС
0 Jenis tidak diketahui
1 Serpihan imej yang dikodkan tanpa IDR
2 Bahagian data kepingan berkod A
3 Bahagian data kepingan berkod B
4 Bahagian data kepingan berkod C
5 Serpihan IDR yang dikodkan bagi imej IDR
6 Maklumat lanjut tentang sambungan SEI
7 Set Parameter Jujukan SPS
8 Set parameter imej PPS
9 Pemisah akses
10 Akhir urutan
11 Hujung benang
... ...

Biasanya NAL pertama bitstream ialah SPS. NAL jenis ini bertanggungjawab untuk memaklumkan tentang pembolehubah pengekodan biasa seperti profil, tahap, resolusi, dsb.

Jika kita melangkau penanda penyegerakan pertama, kita boleh menyahkod bait pertama untuk mengetahui jenis NAL yang pertama.

Sebagai contoh, bait pertama selepas token penyegerakan ialah 01100111, di mana bit pertama (0) berada di medan forbidden_zero_bit. 2 bit seterusnya (11) memberitahu kami bidang itu nal_ref_idc, yang menunjukkan sama ada NAL ini adalah medan rujukan atau tidak. Dan baki 5 bit (00111) memberitahu kami bidang itu nal_unit_type, dalam kes ini ia adalah blok SPS (7) NAL.

Bait kedua (perduaan=01100100, heks=0x64, disember=100) dalam SPS NAL ialah medan profile_idc, yang menunjukkan profil yang digunakan oleh pengekod. Dalam kes ini, profil tinggi terhad telah digunakan (iaitu, profil tinggi tanpa sokongan segmen B dua hala).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Jika anda melihat spesifikasi aliran bit H.264 untuk SPS NAL, kami akan menemui banyak nilai untuk nama parameter, kategori dan penerangan. Sebagai contoh, mari kita lihat bidang pic_width_in_mbs_tolak_1 ΠΈ pic_height_in_map_units_tolak_1.

Nama parameter Kategori ОписаниС
pic_width_in_mbs_tolak_1 0 ue(v)
pic_height_in_map_units_tolak_1 0 ue(v)

Jika kami melakukan beberapa operasi matematik dengan nilai medan ini, kami akan memperoleh penyelesaian. Seseorang boleh mewakili 1920 x 1080 menggunakan pic_width_in_mbs_tolak_1 dengan nilai 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Sekali lagi, untuk menjimatkan ruang, bukannya pengekodan 1920, kami melakukannya dengan 119.

Jika kami terus menyemak video yang kami buat dalam bentuk binari (contohnya: xxd -b -c 11 v/minimal_yuv420.h264), kemudian anda boleh pergi ke NAL terakhir, iaitu bingkai itu sendiri.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Di sini kita melihat nilai 6 bait pertamanya: 01100101 10001000 10000100 00000000 00100001 11111111. Oleh kerana bait pertama diketahui menunjukkan jenis NAL, dalam kes ini (00101) ialah serpihan IDR (5), dan kemudian anda boleh menerokainya dengan lebih lanjut:

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Menggunakan maklumat spesifikasi, adalah mungkin untuk menyahkod jenis serpihan (slice_type) dan nombor bingkai (bilangan_bingkai) antara bidang penting yang lain.

Untuk mendapatkan nilai beberapa medan (ue(v), me(v), se(v) atau te(v)), kita perlu menyahkod serpihan menggunakan penyahkod khas berdasarkan kod Golomb eksponen. Kaedah ini sangat cekap untuk pengekodan nilai pembolehubah, terutamanya apabila terdapat banyak nilai lalai.

Nilai slice_type ΠΈ bilangan_bingkai daripada video ini ialah 7 (fragmen I) dan 0 (bingkai pertama).

Strim bit boleh dianggap sebagai protokol. Jika anda ingin mengetahui lebih lanjut mengenai aliran bit, anda harus merujuk kepada spesifikasi ITU H.264. Berikut ialah rajah makro yang menunjukkan lokasi data imej (YUV dalam bentuk mampat).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Aliran bit lain boleh diperiksa, seperti VP9, H.265 (HEVC) atau malah aliran bit terbaik baharu kami AV1. Adakah mereka semua serupa? Tidak, tetapi apabila anda memahami sekurang-kurangnya satu, lebih mudah untuk memahami yang lain.

Ingin berlatih? Terokai aliran bit H.264

Anda boleh menjana video bingkai tunggal dan menggunakan MediaInfo untuk memeriksa aliran bit H.264. Malah, tiada apa yang menghalang anda daripada melihat kod sumber yang menganalisis aliran bit H.264 (AVC).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Untuk latihan, anda boleh menggunakan Intel Video Pro Analyzer (adakah saya sudah mengatakan bahawa program itu dibayar, tetapi terdapat versi percubaan percuma dengan had 10 bingkai?).

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Mengkaji

Ambil perhatian bahawa banyak codec moden menggunakan model yang sama yang baru kita pelajari. Di sini, mari kita lihat gambarajah blok codec video Thor. Ia mengandungi semua langkah yang telah kita lalui. Inti dari siaran ini adalah untuk sekurang-kurangnya memberi anda pemahaman yang lebih baik tentang inovasi dan dokumentasi dalam bidang ini.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Sebelum ini, dikira bahawa 139 GB ruang cakera diperlukan untuk menyimpan fail video yang bertahan selama satu jam pada kualiti 720p dan 30 fps. Jika anda menggunakan kaedah yang dibincangkan dalam artikel ini (ramalan antara bingkai dan dalaman, transformasi, kuantisasi, pengekodan entropi, dll.), maka anda boleh mencapai (berdasarkan fakta bahawa kami membelanjakan 0,031 bit setiap piksel), video yang agak kualiti yang memuaskan, hanya menduduki 367,82 MB, bukan 139 GB memori.

Bagaimanakah H.265 mencapai nisbah mampatan yang lebih baik daripada H.264?

Kini setelah kita mengetahui lebih lanjut tentang cara codec berfungsi, lebih mudah untuk memahami cara codec yang lebih baharu boleh menyampaikan resolusi yang lebih tinggi dengan bit yang lebih sedikit.

Jika kita bandingkan AVC ΠΈ HEVC, perlu diingat bahawa ini hampir selalu merupakan pilihan antara beban CPU yang lebih besar dan nisbah mampatan.

HEVC mempunyai lebih banyak pilihan bahagian (dan subseksyen) daripada AVC, lebih banyak arah ramalan dalaman, pengekodan entropi yang dipertingkatkan dan banyak lagi. Semua penambahbaikan ini telah dibuat H.265 mampu memampatkan 50% lebih daripada H.264.

Bagaimanakah codec video berfungsi? Bahagian 2. Apa, kenapa, bagaimana

Bahagian pertama: Asas bekerja dengan video dan imej

Sumber: www.habr.com

Tambah komen