FFmpegの「sameq」または「same_quant」オプションとは何ですか?「同じ品質」という意味ですか?


29

多くの場合、sameqオプションを使用するFFmpegコマンドを見てきました。たとえば、

ffmpeg -i input.mp4 -sameq output.avi

これは何を意味するのでしょうか?「同じ品質」という意味ですか?そうでない場合、代わりに何を使用する必要がありますか?

回答:


57

sameq 「同じ品質」を意味しない

Web上のいくつかのリソースは、sameqor same_quantオプションの使用を推奨していますが、本質的には間違っています。を使用sameqしても、入力と同じ品質の結果は得られません。
絶対に使用しないでください。

混乱の原因は、このオプションを使用しても同じ品質が得られることを暗示している不十分な文書でした。幸いなことに、このオプションは削除されました。

FFmpegのドキュメントには次のよう に書かれています。

これは同じ品質ではないことに注意してください。このオプションは、必要なことがわかっている場合以外は使用しないでください。

実際にはFFmpegの開発者がいた名前を変更からsameqsame_quant確認するためにだけ、その後、削除sameq/same_quant完全; つまり、このオプションは最近のFFmpegには存在しませんが、この記事は古いFFmpegビルドを使用している人にとっては依然として有用です。


ビデオ圧縮はどのように機能しますか?

これをクリアしたので、技術的な詳細に進みましょう。

信頼性の高い動作を行わない理由を理解するには、一般的なビデオエンコーダにとって「品質」が何を意味し、品質に何が影響するかという概念を把握する必要があります。異なるビットレートで圧縮した場合、1つのビデオが他のビデオよりもよく見えるのはなぜですか?変換の損失の原因は何ですか?エンコード後にビデオが元のビデオよりも小さいのはなぜですか?

ビデオをエンコードすると、最初にピクセルのブロックに数学的な変換を適用することにより、入力データが異なる次元に変換されます。主に離散コサイン変換であるこの変換は、ビデオの8×8ピクセルのフィールドを記述する数値の行列を生成します。

したがって、8×8ピクセルと対応するマトリックスは、最初は次のようになります。1

元画像  

しかし、これはデータが多すぎます!ビデオを圧縮したい場合は、実際に右下の数字を取り除くことができます。なぜこれが正確なのかは説明しませんが、そのようなブロックを説明するときは左上の数字がより重要であるとだけ言っておきましょう。変換の全体的な考え方は、基本的に重要なものを左上に置くことです。

右下の数字を削除するには、ゼロにすることができます。何かが「何もない」場合、または単に0s として繰り返される場合、それを保存する必要はなく、そのようにしてスペースを節約します。数学的には、別の行列「量子化行列」を適用して、この最初の行列を量子化する必要があります。

これにより、マトリックスの数がかなり少なくなり、ゼロが多くなります。

圧縮画像  

この結果、多数の数字を含む最初の高品質のマトリックスを、同じ8×8ピクセルに似たマトリックスに変換しましたが、それらのピクセルを記述する数値が少ないため、品質は低下しました。ブロックを視覚的に比較すると、それらは似ていますが、まったく同じではありません。

ここで、量子化マトリックスが品質を決定します。これは重要。品質ごとに異なる量子化マトリックスを使用できます。いくつかの量子化マトリックスは、元のマトリックスをほとんどそのまま残しますが、その他はそうしません。我々は削除以上の数字は、より悪い品質が得られますが、より多くの我々は基本的にここにゼロを「捨てる」ことができるので、私たちは、ビデオを圧縮することができます。

それは何と関係がありsameqますか?

ビデオをエンコードし、特定の品質を設定するとします。既に学んだように、量子化マトリックスが異なると品質が異なるため、エンコーダーにqualityを使用するように指示xすると、適切な量子化マトリックスが選択され、yその品質が何であれ取得されます。結果は、yマトリックスを使用して圧縮されたビデオです。2

そして興味深い部分sameqは、「同じ量子化器」という意味です。「同じ品質」ではありません。FFmpegの最新バージョンでない場合でも、次の場所で見つけることができますffmpeg --help

ffmpeg --help 2>&1 | grep sameq

そのため、その変換されたビデオを取得して再度エンコードし、sameqオプションを適用すると、FFmpegは、単純に言えば、入力ビデオに使用されたのと同じ量子化マトリックスを選択します。

これは、XviDビデオからXviDビデオに変換する場合など、入力と出力にまったく同じコーデックを使用する場合に多少機能しますが、それでも品質は低下します。3これは、すでにエンコードされているものをエンコードすると、さらに多くの情報が失われるためです。上記の例では、マトリックスにさらに多くのゼロを作成すると、結果が悪化します。

異なるビデオコーデックではまったく機能しませ。XviDでエンコードされたビデオをx264で変換しているとします。4これら2つのコーデックの場合、内部で使用される量子化マトリックスは異なります。同じ係数を持ちません。したがって、このオプションは意味がありません!残念ながら、FFmpegでは引き続き使用できます。

要するに、あなたが何をしているかを明確に知らない限り、そのオプションを使用しないでください。ビデオを別のコーデックでエンコードしても品質を維持したい場合は、自分で実験して品質を設定する必要があります。結果が満足のいくものであるかどうかを確認し、満足できない場合は、より高い品質を設定します。それはできる限りのことです。

最後に、再エンコード時に品質を維持する方法について調べたい場合は、次の投稿をご覧ください。


1)マトリックスは、実際にはここの画像に対応していません。これは単なる例です。
2)実際、最近では、ほとんどのエンコードプロセスは1つのマトリックスを使用していません。特定のビットレートを設定すると、エンコーダは異なるマトリックスを使用して1秒あたりの平均ビットレートを取得します。同様に、特定の品質を設定する場合、最新のエンコーダーはコンテンツに応じて異なるマトリックスを使用します。これは、一部のコンテンツが他のコンテンツよりも圧縮が「簡単」で、同じ圧縮率を得るために必要な量子化が少ないためです。
3)例:ffmpeg -i input.avi -sameq -c:v libxvid output.avi。これを使用しないでください。お願いします。
4)例:ffmpeg -i input.avi -sameq -c:v libx264 output.mp4。これも使用しないでください。私は真剣です。


-sameqオプションは廃止され、avconvから削除されました
AzizSM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.