Membaca tentang kualitas video saya menemukan bahwa itu tergantung pada resolusi, frame per detik dan bitrate, yang menentukan ukuran video.
Pertanyaan saya adalah bagaimana bitrate dihitung dan bagaimana perbedaannya.
Katakanlah video memiliki resolusi 360x240. Dibutuhkan 86400 piksel per bingkai. Frame rate adalah 30 Hz. Jadi video membutuhkan 86400 × 30 = 2592000 piksel per detik.
Jadi katakanlah 1 pixel adalah 3 Bytes (24 Bits) data: kami memiliki video 2592000 × 24 bit per detik (62208000 Bits), yaitu 62208 kBits (Ini kedengarannya tidak benar, mungkin ada masalah dalam perhitungan saya).
Tetapi bagaimana perbedaannya dan bagaimana perbedaannya dalam kualitas?
video
codec
video-conversion
vincent mathew
sumber
sumber
Jawaban:
Yang Anda hitung adalah bitrate untuk video mentah dan tidak terkompresi. Anda biasanya tidak akan menemukan ini kecuali dalam penelitian atau aplikasi khusus lainnya. Bahkan penyiar menggunakan video terkompresi, meskipun pada bitrate jauh lebih tinggi daripada video YouTube khas Anda.
Jadi, kualitas video banyak hubungannya dengan bagaimana video itu dikompresi. Semakin banyak Anda kompres, semakin sedikit bit yang dibutuhkan per frame. Juga, semakin Anda kompres, semakin buruk kualitasnya. Sekarang, beberapa video jauh lebih mudah untuk dikompres daripada yang lain - pada dasarnya, inilah sebabnya mereka memiliki bitrate yang lebih rendah walaupun mereka memiliki resolusi dan framerate yang sama.
Untuk memahami mengapa hal ini terjadi, Anda harus mengetahui dua prinsip utama penggunaan kompresi video. Ini disebut "spasial" dan "redundansi temporal".
Redundansi spasial
Redundansi spasial ada dalam gambar yang menunjukkan konten alami. Inilah alasan JPEG bekerja dengan sangat baik - ini memampatkan data gambar karena blok piksel dapat dikodekan bersama. Ini adalah 8 × 8 piksel, misalnya. Ini disebut "makroblok".
Codec video modern melakukan hal yang sama: Mereka pada dasarnya menggunakan algoritma yang mirip dengan JPEG untuk mengompres bingkai, blok demi blok. Jadi Anda tidak menyimpan bit per piksel lagi, tetapi bit per macroblock, karena Anda "meringkas" piksel ke dalam grup yang lebih besar. Dengan meringkasnya, algoritme juga akan membuang informasi yang tidak terlihat oleh mata manusia - di sinilah Anda dapat mengurangi sebagian besar bitrate. Ini bekerja dengan mengukur data. Ini akan mempertahankan frekuensi yang lebih mudah dipahami dan "membuang" yang tidak bisa kita lihat. Faktor kuantisasi dinyatakan sebagai "QP" di sebagian besar codec, dan itu adalah tombol kontrol utama untuk kualitas.
Anda sekarang bahkan dapat melanjutkan dan memprediksi makroblok dari makroblok yang sebelumnya telah dikodekan dalam gambar yang sama. Ini disebut prediksi intra . Sebagai contoh, bagian dari dinding abu-abu sudah dikodekan di sudut kiri atas bingkai, jadi kita bisa menggunakan makroblok itu di frame yang sama lagi, misalnya untuk makroblok tepat di sebelahnya. Kami hanya akan menyimpan perbedaannya dengan yang sebelumnya dan menyimpan data. Dengan cara ini, kita tidak perlu menyandikan dua makroblok yang sangat mirip satu sama lain.
Mengapa bitrate berubah untuk ukuran gambar yang sama? Beberapa gambar lebih mudah untuk dikodekan daripada yang lain. Semakin tinggi aktivitas spasial, semakin banyak Anda harus menyandikan. Tekstur yang halus membutuhkan bit lebih sedikit daripada yang detail. Hal yang sama berlaku untuk prediksi intra: Bingkai dinding abu-abu akan memungkinkan Anda untuk menggunakan satu blok makro untuk memprediksi yang lainnya, sedangkan bingkai air yang mengalir mungkin tidak bekerja dengan baik.
Redundansi temporal
Ini ada karena bingkai yang mengikuti bingkai lain mungkin sangat mirip dengan pendahulunya. Sebagian besar, hanya sedikit perubahan kecil, dan itu tidak masuk akal untuk sepenuhnya menyandikannya. Apa yang dilakukan encoders video hanyalah mengkodekan perbedaan antara dua frame berikutnya, seperti yang bisa mereka lakukan untuk macroblocks.
Mengambil contoh dari artikel Wikipedia tentang kompensasi gerak , katakanlah ini adalah kerangka asli Anda:
Maka perbedaan ke frame berikutnya hanya ini:
Encoder sekarang hanya menyimpan perbedaan yang sebenarnya , bukan nilai pixel-by-pixel. Inilah sebabnya mengapa bit yang digunakan untuk setiap frame tidak sama setiap waktu. Frame "perbedaan" ini bergantung pada frame yang disandikan sepenuhnya, dan inilah mengapa setidaknya ada dua jenis frame untuk codec modern:
Anda sesekali perlu memasukkan frame-I ke dalam video. Bitrate aktual juga tergantung pada jumlah I-frame yang digunakan. Selain itu, semakin banyak perbedaan gerak antara dua frame berikutnya, semakin banyak encoder yang harus disimpan. Video bergerak "tidak ada" akan lebih mudah untuk disandikan daripada video olahraga, dan menggunakan lebih sedikit bit per bingkai.
sumber
Saya percaya matematika Anda sebenarnya benar, tetapi ada sedikit lebih dari itu; kompresi adalah tautan yang hilang di sini.
Anda menghitung laju bit tidak terkompresi, dan muncul dengan alasan kompresi ada. Kecepatan bit menjadi sangat besar dengan video yang tidak terkompresi. Jadi, mereka memampatkan video di sumbernya, dan membuka kompresi di penerima, dan kemudian laju bit menjadi terkelola. Anda hanya perlu dekompresor yang cukup cepat, yang mungkin berupa perangkat keras atau perangkat lunak.
Jadi, masalahnya menjadi seberapa banyak kompresi dapat ditoleransi - biasanya tidak lossless, jadi Anda kehilangan informasi, tetapi mereka mencoba membuatnya cukup cerdas untuk kehilangan data yang kurang penting yang tidak akan begitu terlihat. Biasanya cukup mudah sampai ada banyak gerakan, maka menjadi lebih rumit.
Sunting: Lupa untuk menambahkan, tetapi bagian yang menerapkan metode kompresi adalah codec; Saya perhatikan bahwa Anda menggunakan ini sebagai tag di pos Anda.
sumber