2017-02-06 83 views
1

我想知道在H.264編碼中丟失了什麼。我使用libx264對視頻進行編碼,並用ffmpeg對其進行解碼,然後使用相同的參數對結果視頻進行編碼,並使用相同的參數對其進行解碼,然後再對其進行第二次解碼。我預計第一個和第二個解碼視頻的大小和外觀必須相同,但是,它不是!例如,我在第一個編碼幀中的第一個片NAL單元中有13000個字節,在第二個編碼幀中有12000個字節,這是奇數。因爲在第一個編碼過程中,幀中存在的任何有損信息都應該被消除,並且第二個編碼應該是其結果相同的NAL單元的過程。我錯了,還是在我的實現中我錯了?libx264和ffmpeg如何對H.264進行編碼和解碼

+0

大多數有損壓縮算法並不能保證使用相同參數進行解碼和重新編碼將產生相同的輸出。 – cdhowie

+0

有沒有任何官方的參考文件發佈過這個問題? –

+0

是什麼讓你覺得這是一個問題? – cdhowie

回答

6

這個問題是不可能回答的。有損編解碼器實際上應該被稱爲世代有損。像複印機一樣,有史以來的一代都稍有改動。要「確切」知道將會丟失什麼的唯一方法是實際運行該算法。現代壓縮由幾個步驟組成。運動估計/補償,量化,環路濾波和解塊。並且在每個步驟去除多少信息由速率控制算法決定。根據參數和內容,這些步驟中的每一個都可能會丟失甚至添加信息。編解碼器的實現甚至可能不同。

+0

謝謝。除量化步驟外,你能解釋一下,其他部分如何處理信息丟失? –

+0

有很多關於這個主題的書籍,以及可能在互聯網上的資源,你應該從那些開始,然後問在stackoverflow上的具體問題。 – szatmary