FFmpeg 中的「sameq」或「same_quant」選項是什麼?是「同等品質」的意思嗎?

FFmpeg 中的「sameq」或「same_quant」選項是什麼?是「同等品質」的意思嗎?

我經常看到 FFmpeg 命令使用該sameq選項,例如

ffmpeg -i input.mp4 -sameq output.avi

這是什麼意思?是「同等品質」的意思嗎?如果沒有,我該用什麼來代替?

答案1

sameq並不意味著“相同的品質”

網路上的一些資源提倡使用sameqorsame_quant選項,但本質上它們是錯誤的。使用sameq不會給您與輸入具有相同品質的結果。
永遠不要使用它。

造成混亂的根源是文件寫得不好,暗示使用此選項將提供相同的品質。幸運的是,該選項已被刪除。

這是什麼 FFmpeg 文件說:

請注意,這不是相同的品質。除非您知道需要它,否則不要使用此選項。

事實上 FFmpeg 開發人員已經改了名字sameqsame_quant只是為了確定,然後刪除sameq/same_quant共;這意味著這個選項在最近的 FFmpeg 中不存在,但本文對於使用較舊 FFmpeg 版本的人仍然有用。


視訊壓縮如何運作?

現在我們已經弄清楚了這一點,讓我們來討論一些技術細節。

為了理解為什麼它不能可靠地工作,我們需要理解「品質」對於常見視訊編碼器意味著什麼以及影響品質的因素。為什麼使用不同位元率壓縮時一個影片看起來比另一個影片更好?是什麼導致轉換有損,為什麼編碼後影片比原始影片小?

對影片進行編碼時,首先對像素區塊應用數學變換,將輸入資料轉換為不同的維度。這種轉變,主要是離散餘弦變換,產生一個數字矩陣,用於描述影片中的 8×8 像素場。

所以,你的 8×8 像素和相應的矩陣最初看起來像這樣:1

原始影像  

但這數據太多了!如果我們想壓縮視頻,我們實際上可以去掉右下角的數字。我不會解釋為什麼會這樣,但我們只能說,在描述這樣的區塊時,左上角的數字更重要。整個轉變的想法基本上就是把重要的東西放在左上角。

要刪除右下角的數字,我們可以將它們設為零。如果某些東西“什麼都沒有”,或者只是重複為0s,我們就不必存儲它,這樣我們就可以節省空間。從數學上來說,我們需要量化透過應用另一個矩陣(“量化矩陣”)來實現第一個矩陣。

這將導致矩陣中的數字明顯減少,並且有很多零:

壓縮影像  

這樣做的結果是,我們將第一個包含大量數字的高品質矩陣轉換為仍然類似於相同 8×8 像素的矩陣,但品質較低,因為它具有較少的數字來描述這些像素。如果您從視覺上比較該區塊,它們很相似,但不再完全相同。

這裡,量化矩陣決定質量。這個很重要。我們可以針對不同的品質使用不同的量化矩陣。有些量化矩陣使原始矩陣幾乎完好無損,而有些則不然。我們刪除的數字越多,更差品質會得到,但是更多的我們可以壓縮視頻,因為我們基本上可以“扔掉”這裡的零。

這有什麼關係sameq

假設您對影片進行編碼並且想要設定一定的品質。正如我們已經了解到的,不同的量化矩陣會導致不同的質量,因此當我們告訴編碼器使用quality時x,它將選擇適當的量化矩陣y來獲得該質量,無論它是什麼。結果是使用矩陣壓縮的視訊y2

這是有趣的部分:sameq意思是「相同的量化器」。不是“同等質量”。如果您有非最新版本的 FFmpeg,您仍然可以在以下位置找到它ffmpeg --help

ffmpeg --help 2>&1 | grep sameq

因此,當您現在獲取轉換後的視訊並再次對其進行編碼,然後應用該sameq選項時,簡單地說,FFmpeg 將選擇用於輸入視訊的相同量化矩陣。

有些當您使用完全相同的編解碼器進行輸入和輸出時,例如從 XviD 視訊轉換為 XviD 視訊時,可以工作,但最終的品質仍然較差。3這是因為對已經編碼的內容進行編碼會丟棄更多資訊。在上面的例子中,我們將在矩陣中創建更多的零,結果看起來會更糟。

確實如此不是完全可以跨不同的視訊編解碼器工作。假設您正在使用 x264 轉換 XviD 編碼的影片。4對於這兩個編解碼器,內部使用的量化矩陣不同 - 它們沒有相同的係數。所以這個選項根本沒有意義!不幸的是,FFmpeg 仍然允許您使用它。

底線:除非您明確知道自己在做什麼,否則請不要使用該選項。如果您想使用不同的編解碼器對視訊進行編碼,但保留質量,那麼您將必須進行試驗並自行設定品質。看看結果是否令人滿意,如果不滿意,請設定更高的品質。你能做的就這麼多了。

最後,如果您想了解如何在重新編碼時保持質量,請查看這些帖子:


1)矩陣與這裡的影像確實不對應。這只是一個例子。
2)實際上,現在大多數編碼過程不僅僅使用矩陣。當您設定一定的比特率時,編碼器將使用不同的矩陣來獲得每秒的平均位元率。類似地,在設定特定品質時,現代編碼器根據內容採用不同的矩陣。這是因為某些內容比其他內容「更容易」壓縮,並且需要較少的量化來獲得相同的壓縮因子。
3) 範例:ffmpeg -i input.avi -sameq -c:v libxvid output.avi。不要使用這個。請。
4) 範例:ffmpeg -i input.avi -sameq -c:v libx264 output.mp4。也不要使用這個。我是認真的。

相關內容