Platform videonya adalah ffmpeg dan kualitas encoding video. Bagian 2


Lenna sangat suka berpenampilan bagus - seorang model fesyen. Ada legenda yang menambahkannya ke judul artikel yang terkait dengan pemrosesan data visual memberi peluang +5 untuk plus.

Saya terus mengungkapkan fitur layanan video. Hari ini mencatat tentang opsi pengkodean dan pilihannya.

Bagian pertama

Sebagian besar codec menawarkan nilai default yang cukup seimbang, memungkinkan Anda untuk mendapatkan hasil normal tanpa banyak pilihan parameter. Namun, ketika datang ke arsip besar materi video, batasan bitrate, pertimbangan kompatibilitas dengan peralatan klien dan keinginan yang masuk akal untuk menjaga kualitas aslinya, semuanya menjadi lebih menarik.

Sayangnya, tombol ajaib "penyandian sangat baik" tidak disediakan. Seperti analog caniuse untuk parameter enkode. Harus mengerti fitur dari codec.

Pendahuluan: Profil


Ada begitu banyak pengaturan dan parameter untuk H264 sehingga pengembang sendiri, agar tidak bingung, memutuskan untuk membuat daftar profil - konfigurasi "baik" untuk tujuan yang berbeda. Profil standar banyak diidentifikasi; Selain itu, dengan mengatur parameter pengodean Anda sendiri, Anda, pada kenyataannya, membuat profil Anda sendiri, membingungkan semua orang sepenuhnya. Jadi, sayangnya, ternyata seperti biasa.



Pada awalnya, profil dibuat untuk menentukan apakah video final akan diputar pada jenis perangkat yang diinginkan, tetapi sekarang tidak ada pemisahan pemain yang jelas berdasarkan jenis perangkat dan profil.

Dalam praktiknya, saya akan memilih, dengan tingkat intensitas sumber daya decoding, tiga kelompok parameter:

  • dengan CABAC dinonaktifkan; profil utama dan baseline bersyarat. Mereka masih dapat digunakan untuk streaming sensitif terhadap penundaan;
  • dengan CABAC diaktifkan; profil yang relatif tinggi. Untuk semuanya. Kebanyakan peralatan modern (dan tidak demikian) dapat memainkan hal seperti itu. Peningkatan efisiensi dibandingkan dengan utama - 20% +;
  • dengan dukungan untuk pengambilan sampel sepuluh-bit dan parameter lanjutan lainnya. Kondisional Hi10P. Masalah dengan profil tersebut adalah hampir tidak adanya dukungan perangkat keras dan peningkatan persyaratan untuk peralatan decoding; Ponsel, bahkan yang top-end, tidak dapat mengatasi file seperti itu. Ini dapat digunakan untuk perpustakaan pribadi jika Anda yakin dengan peralatan Anda. Peningkatan efisiensi 10-20% lainnya.

Konsep profil untuk codec lain tidak dikembangkan seperti pada H264. Bagi mereka, kita dapat mengasumsikan bahwa jika codec didukung, maka sepenuhnya didukung, dan pembatasan selama pemutaran hanya dapat bitrate terlalu tinggi, atau parameter lain yang jelas dibesar-besarkan. Namun, dengan menjamurnya decoder perangkat keras VP8 dan VP9, ​​situasinya dapat berubah.

Sekarang ke parameter individual.

Ruang warna


Pilihan ruang warna hampir tidak berpengaruh pada efisiensi pengkodean; parameter ini dapat diserahkan kepada pilihan codec (penting ketika memproses data mentah, tidak dikodekan) jika itu bukan untuk satu fitur: banyak pemain memproses informasi ruang warna dengan sangat khusus, sehingga bagi sebagian besar pengguna video dapat ditampilkan dengan distorsi warna (dalam kebanyakan hijau).

Untuk mempertahankan warna bagi sebagian besar pemain, video H264 yang berbeda perlu dikodekan dalam ruang yang berbeda:

  • untuk SD (lebar <1280) - BT.601
  • untuk HD (lebar> = 1280) - BT.709

Ada studi yang sangat baik dari 2012. tentang hal ini. Sayangnya, situasi dengan bug seperti itu berubah sangat lambat, dan meskipun beberapa hasil tes dari artikel itu tidak lagi relevan, fitur seperti itu masih perlu diperhitungkan. Ada kemungkinan Anda menonton video dengan warna yang salah selama ini - dan ternyata ini bukan keputusan sutradara.
Masalahnya dikenal untuk decoder H264; format lain mungkin tidak memiliki masalah ini.

Frame rate


Jika sumber Anda bukan aliran game atau video aksi, maka masuk akal untuk membatasi frame rate atas menjadi 25-30 frame - semakin sedikit, semakin banyak data yang menggambarkan frame tunggal. Lebih baik mengurangi nilai ini dengan faktor - sehingga frame skip seragam, jika tidak, video dapat mengalami pelambatan.

Ada yang namanya frame rate variabel. Bekerja dengan VFR tidak nyaman karena dua alasan: pertama, ia memberikan puncak bitrate di area frekuensi tinggi yang langsung mengosongkan buffer; kedua, VFR mempersulit persiapan rencana konversi, memaksa penggunaan parameter-Q (saya menulis tentang mereka di artikel pertama).

Ukuran Gop


Grup gambar adalah blok di mana beberapa gambar dapat merujuk ke data orang lain. Peningkatan ukuran GOP meningkatkan kinerja codec dengan imbalan peningkatan kebutuhan memori. Nilai yang lebih besar sangat efektif untuk file dengan jenis gerakan siklis yang sama (Anda tahu maksud saya). Juga, dengan nilai besar, mungkin ada masalah dengan memutar ulang video, karena lebih banyak data perlu dipulihkan.
Nama parameter, serta unit pengukuran, mungkin berbeda dari codec ke codec - lihat dokumentasi.

Irisan


Untuk mempercepat decoding (dan encoding), video dapat dibagi menjadi beberapa bagian dengan resolusi lebih rendah. Idenya adalah bahwa memproses empat video dengan resolusi, misalnya, 1280x720 lebih mudah dari satu, tetapi 2560x1440. Masuk akal pada resolusi yang lebih tinggi dari FHD. Semakin banyak bagian, semakin rendah efisiensi codec. Juga, penggunaan pemisahan ini menyederhanakan pemrosesan multi-utas.

Pixel anamorphic


Piksel persegi panjang muncul ketika rasio aspek dan rasio lebar piksel terhadap tinggi berbeda - DVD layar lebar, di mana video 16: 9 memiliki resolusi 704 × 480 (3: 2 dengan PPN analog dan dikoreksi angin). Memutar video semacam itu tidak akan menimbulkan masalah, namun, ketika menyandikan, Anda harus mempertimbangkan resolusi dan rasio aspek, jika tidak mudah untuk mengubah anamorphic menjadi piksel persegi standar dengan kehilangan efisiensi (hingga ~ 35%!), Atau bahkan mendapatkan sesuatu yang rata secara horizontal.

Kontrol Bitrate


Ada tiga mode utama codec yang terkait dengan bitrate:

  • bitrate konstan, CBR, ketika kualitas turun sebanding dengan kompleksitas adegan;
  • kualitas konstan, const Q VBR, ketika bitrate meningkat sebanding dengan kompleksitas adegan;
  • bitrate dan kualitas terbatas - VBR klasik.

Perlu dicatat bahwa sebagian besar penyandi (termasuk ffmpeg) tidak mengatur codec ke mode CBR ketika mengatur bitrate - file dibuat oleh VBR, dengan batasan yang tidak selalu ditentukan dalam dokumentasi (mode CBR diaktifkan, biasanya dengan mengatur minrate dan maxrate yang sama).

Untuk pemutaran online (dan untuk streaming) VBR terbatas sangat cocok. itu memberikan kualitas yang lebih baik daripada CBR dan memungkinkan Anda menyesuaikan aliran ke saluran Internet.

Pilihan maxrate / minrate tergantung pada saluran klien, penyebaran lebih dari 20% lebih baik tidak dilakukan.

Pengodean multi lulus


Sulit untuk memprediksi distribusi data pada file dalam mode VBR, codec harus menebak apa yang terjadi tidak selalu. Dalam mode multi-pass, codec pertama memetakan laju bit yang diperlukan, dan kemudian mengkodekan. Dengan cara ini, kualitas video dalam adegan yang kompleks dan dinamis ditingkatkan ( misalnya . Perhatikan jumlah elemen "moiré" dan jumlah transisi di antara adegan). Karena pada pass pertama codec hanya menganalisis file sumber, bertentangan dengan kepercayaan populer, pemrosesan dalam mode ini tidak memerlukan waktu lebih dari dua kali lipat, tetapi hanya 10-15%.

-Tune


Untuk berbagai jenis bahan sumber, beberapa preset telah disiapkan yang menyempurnakan beberapa parameter pengkodean dasar - seperti level filter deblocking, parameter optimasi psiko-visual. Menggunakan preset ini meningkatkan persepsi video dan bekerja dengan baik jika Anda mengetahui jenis sumbernya di muka, atau jika Anda memiliki seperangkat video terstruktur (dalam hal pemrosesan massal).

Preset:

  • film - untuk film dan semuanya dengan struktur bingkai yang kompleks. Ini jelas sebuah film;
  • animasi - untuk video dengan area padat yang besar. Artinya, lebih baik untuk kode dengan preset animasi, dan ini adalah film, terlepas dari kenyataan bahwa animasi;
  • stillimage - untuk video di mana hampir tidak ada gerakan; optimisasi yang baik untuk lagu-lagu dalam format mp4, di mana sampul album adalah seluruh latar belakang video (seseorang, beri tahu mereka bahwa bahkan flac tidak dapat menimbang 300MB selama 10 menit!);
  • grain - untuk mengkodekan sumber "berisik", seperti kamera pengintai;
  • psnr / ssim - untuk mengevaluasi efektivitas parameter yang tersisa dari codec;
  • fastdecode - profil utama paksa untuk perangkat yang lemah;
  • zerolatency - seperti namanya, untuk streaming latensi rendah.

Format piksel


Format dan bitness sangat memengaruhi bagaimana file dikompresi dan tidak dikompres, dalam kualitas form apa yang hilang. Parameter utama yang dijelaskan oleh format piksel adalah:

  • cara penguraian warna menjadi komponen - YUV, RGB;
  • parameter subsampling warna (oh bagaimana! chroma subsampling lebih akrab) ketika beberapa komponen warna disimpan dengan resolusi lebih rendah;
  • kedalaman komponen warna dalam bit.

Pilihan sadar dari format piksel memerlukan analisis terpisah, kumpulan bahan dan sangat tergantung pada jenis bahan sumber.

Secara singkat:

  • tidak semua codec (dan, yang paling penting, decoder) mendukung format yang mungkin;
  • bekerja dengan beberapa format lebih menuntut pada sumber daya - Hi10P berbeda dari hanya profil tinggi dalam hal ini;
  • bekerja dengan format sub-sampel dapat memberikan peningkatan nyata dalam efisiensi kompresi, tetapi lebih sulit untuk mengontrol kehilangan kualitas.

Interlacing


Interlacing diciptakan untuk menggandakan frame rate yang dirasakan dengan biaya minimum - bitrate dan resolusi adalah sama, tetapi frekuensinya lebih tinggi. Namun, dengan gerakan cepat, gigi menjadi terlihat - garis-garis bingkai sebelumnya. Anda dapat menyingkirkan efek tanpa menjatuhkan bingkai dan tidak mengurangi resolusi vertikal dengan filter, tetapi mereka akan mengurangi kejelasan. Jika video akan diputar di browser, lebih baik untuk menyaring interlacing selama encoding, seperti pemfilteran waktu-nyata pada klien tidak akan memberikan hasil visual terbaik.

Menyatukan semuanya


Contoh untuk x264:

ffmpeg -i [] -c:v libx264 -b:v [bitrate] #  -maxrate [bitrate] #   -r [framerate] -g [size] #GOP   -aspect [,  16:9] #   -profile high #    CABAC -color_primaries bt709 #   ,     -color_trc bt709 -colorspace bt709 -slices 4 #     -threads 4 -tune [value] -map_metadata:g -1 # ,      -map_metadata:s:v -1 -map_metadata:s:a -1 -map_chapters -1 -pass [1|2] #   -passlogfile [file] #    #-map ... -a:c ... -ac ... -a:b ..., ,  -   [] 

Tentu saja, dalam satu artikel itu tidak mungkin untuk mencakup semuanya, tetapi saya yakin materi ini akan cukup untuk meningkatkan kualitas banyak video.

Baca dokumentasi dan eksperimen.

Bahan:

ffmpeg.org/ffmpeg-all.html
en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profile
en.wikipedia.org/wiki/Chroma_subsampling
en.wikipedia.org/wiki/Color_space
en.wikipedia.org/wiki/YUV

Selain contoh dari artikel terakhir, saya belajar tentang pemasangan kode saya yang lain - klik . Saya mencoba mengambil contoh dalam artikel dari situs-situs ini, tetapi meskipun demikian:
* Saya tidak memiliki hubungan langsung dengan penulis situs yang disebutkan dan tidak boleh berbagi pandangan dan pendapat mereka. Saya tidak dapat mengomentari keputusan tentang siapa dan bagaimana akses ke kode diberikan.

Siap menjawab pertanyaan.

Source: https://habr.com/ru/post/id437936/


All Articles