
閱讀有關視訊品質的內容後,我發現它取決於解析度、每秒幀數和位元率,這決定了影片的大小。
我的問題是比特率是如何計算的以及它有何不同。
假設影片的解析度為 360x240。每個畫面需要 86400 像素。幀速率為 30 Hz。所以影片每秒需要 86400 × 30 = 2592000 像素。
假設 1 像素是 3 位元組(24 位元),我們每秒有 2592000 × 24 位元影片(62208000 位元),即 62208 kBits(這聽起來不對,可能是我的計算有問題)。
但它有何不同以及它如何在品質上產生差異?
答案1
您計算出的是原始未壓縮影片的比特率。除了研究或其他專門應用程式之外,您通常不會找到這些。即使廣播公司也使用壓縮視頻,儘管比特率比典型的 YouTube 視頻高得多。
因此,視訊品質與視訊的壓縮方式有很大關係。壓縮越多,每幀佔用的位數就越少。而且,壓縮得越多,品質就越差。現在,某些影片比其他影片更容易壓縮 - 從本質上講,這就是為什麼它們具有較低的位元率,即使它們具有相同的解析度和幀速率。
為了理解其中的原因,您需要了解視訊壓縮使用的兩個主要原理。這些被稱為“空間冗餘”和“時間冗餘”。
空間冗餘
顯示自然內容的影像中存在空間冗餘。這就是原因JPEG效果很好——它可以壓縮圖像數據,因為像素塊可以編碼在一起。例如,它們是 8 × 8 像素。這些被稱為“宏塊”。
現代視訊編解碼器也這樣做:它們基本上使用與 JPEG 類似的演算法來逐塊壓縮幀。因此,您不再儲存每個像素的位數,而是每個巨集區塊的位數,因為您將像素「匯總」為更大的群組。透過對它們進行總結,演算法還將丟棄人眼不可見的資訊 - 這是您可以降低大部分比特率的地方。它的工作原理是量化數據。這將保留更容易感知的頻率,並「丟棄」我們看不到的頻率。量化因子在大多數編解碼器中表示為“QP”,它是品質的主要控制旋鈕。
現在您甚至可以繼續預測來自先前已編碼在同一圖像中的宏塊的宏塊。這就是所謂的幀內預測。例如,灰色牆壁的一部分已經編碼在幀的左上角,因此我們可以在同一幀中再次使用該宏塊,例如用於它旁邊的宏塊。我們將只儲存它與前一個的差異並保存資料。這樣,我們就不必對兩個非常相似的宏塊進行編碼。
為什麼相同影像尺寸的位元率會改變?嗯,有些圖像比其他圖像更容易編碼。空間活動越高,您實際上需要編碼的內容就越多。平滑的紋理比詳細的紋理佔用更少的位元。幀內預測也是如此:灰牆的框架將允許您使用一個巨集塊來預測所有其他宏塊,而流水的框架可能效果不佳。
時間冗餘
之所以存在這種情況,是因為另一幀之後的幀可能與其前一幀非常相似。大多數情況下,只有一點點變化,對其進行完全編碼是沒有意義的。視訊編碼器所做的只是對不同之處在兩個後續幀之間,就像它們對宏塊所做的那樣。
以維基百科的文章為例運動補償,假設這是您的原始框架:
那麼與下一幀的差別就是這樣的:
編碼器現在只存儲實際的差異,而不是逐像素值。這就是為什麼每幀使用的比特每次都不相同的原因。這些「差異」幀取決於完全編碼的幀,這就是為什麼現代編解碼器至少有兩種類型的幀:
您有時需要將 I 幀插入影片中。實際比特率也取決於所使用的 I 幀的數量。此外,兩個連續幀之間的運動差異越大,編碼器必須儲存的資料就越多。 「沒有」移動的影片比體育影片更容易編碼,每幀使用的位數更少。
答案2
我相信你的數學實際上是正確的,但還有更多內容;壓縮是這裡缺少的環節。
您計算了未壓縮的比特率,並得出了壓縮存在的原因。對於未壓縮的視頻,比特率變得難以置信的大。因此,他們在源處壓縮視頻,並在接收器處解壓縮,然後比特率就變得易於管理。您只需要一個足夠快的解壓縮器,可以是硬體或軟體。
因此,問題變成了可以容忍多少壓縮——通常它不是無損的,所以你會丟失信息,但他們試圖讓它足夠智能,以丟失不太重要的數據,這些數據不會那麼引人注目。它通常相當容易,直到有很多運動,然後它變得更加複雜。
編輯:忘記添加,但實現壓縮方法的部分是編解碼器;我注意到您在帖子中使用了它作為標籤。