Bagaimana perbedaan bitrate untuk resolusi dan framerate yang sama?


15

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?


Jika video adalah urutan gambar bitmap. Matematika Anda sudah mati untuk file gambar png / jpg.
Daniel Beck

Dua jawaban yang ada tidak menekankan atribut yang menonjol tentang kompresi video: sebagian besar (jika tidak semua) semua codec video menggunakan kompresi lossy . Artinya, beberapa informasi gambar dibuang ketika video mentah dikompresi dan disandikan. Jumlah atau tingkat informasi / detail gambar yang dibuang dan hilang ditentukan oleh faktor kualitas . Adapun kompresi audio, ada teknik kompresi lossy dan lossless.
serbuk kayu

@sawdust: Mereka tidak? Saya pikir paragraf ketiga saya membuatnya cukup jelas. Bagaimanapun, memberi terlalu banyak informasi terkadang tidak begitu baik; Saya percaya memberi cukup untuk memungkinkan penanya belajar lebih banyak, jika diinginkan. Kalau tidak, saya bisa mengatakan posting Anda tidak menekankan mengapa seseorang akan memilih satu kompresor di atas yang lain, atau mengapa ada begitu banyak metode yang berbeda, dll, dll.
Marty Fried

@sawdust Anda benar, ini agak terkubur di bagian JPEG. Saya menambahkan sedikit lebih detail.
slhck

Jawaban:


21

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:

  • I-frames (alias keyframes) - ini adalah yang sepenuhnya disandikan
  • P-frame - ini adalah yang hanya menyimpan perbedaannya

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.


+1 - itulah yang saya maksudkan, tetapi algoritma kompresi saya sedikit tertinggal. :)
Marty Fried

+1 Ini semua yang saya butuhkan. Terutama kompensasi gerak. Terima kasih
vincent mathew

6

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.


3
Ditambah fakta bahwa kompresi video biasanya tidak berbasis piksel, tetapi bekerja pada blok piksel, disebut makroblok .
slhck
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.