web-dev-qa-db-ja.com

MJPEGコーデックを使用してビデオをエンコードするのにMPEG-4よりも時間がかかるのはなぜですか?

スマートカメラのエンコード性能(MPEG-4およびMJPEG)をテストしています。エンコードを実行するためのアプリケーションをOpenCV/FFMPEGで作成しました。このアプリケーションでは、カメラから画像をキャプチャし、目的のエンコード形式にエンコードします。ベンチマークでは、MJPEGエンコーディングがMPEG-4エンコーディングよりもはるかに時間がかかることがわかりました。逆になると予想していました。単一フレームをMPEG-4は約31msかかりますが、MJPEGへのエンコードには約80msかかります。MJPEGはMPEG-4と比較して本当に長い時間がかかりますか?

2
umair

2つの圧縮アルゴリズムは機能の点で完全に異なるであり、MPEG4はGPUアクセラレーションも使用できます。

MPEG4は真のビデオコーデックですが、MJPEGは各フレームを個別のJPEG画像に圧縮するだけです。違いは、MPEG4がさまざまな手法(動きベクトル補正、I/Bフレームなど)を使用して、品質と圧縮率の両方を向上させることです。

一方がより速く動作する理由は、実際にはエンコーダの実装方法、および特定のハードウェアに依存しますエンコード時にを実行します。一部のエンコーダーは、特別なCPU命令(SSE/SSE2、MMXなど)を使用したり、GPUアクセラレーションを使用したりできます(おそらく使用しないことはわかっていますが、言及しているだけです)。 JPEG圧縮はCPU速度に大きく依存し、命令セットの拡張機能を実際には使用しません(互換性/安定性、および 実際には役に立ちません -11月16日の変更ログエントリを参照してください)。 2006)。

最後に、単一フレームのビデオがない限り、MPEG4が一度に「単一フレーム」を実際にエンコードすることはありません。現在のフレームを圧縮するためのより良い方法を決定するために、常にフレームの前後を実行します(MJPEG does一度に1つのフレームのみを実行します)。そのため、現在のデータだけでなく、フレームの前後のデータに大きく依存します。これはシングルパスエンコーディングでも発生します(結局のところ、そもそもモーションベクトルを使用するのはそのためです)。

3
Breakthrough