Theora VS XVIDエンコード速度

かなり長い間、私のプロジェクトの1つで、サーバー間で共通の形式のデータを交換するための内部中間エンコーダーとしてXVIDを使用しました。 MPEG4互換コーデックの優れた実装。 最近、ますます頻繁に、比較的新しい革新的なTheoraコーデックに関する記事をインターネット上で見つけ始めました。これは、Webの標準として将来のために予言されています。 理解できます。 オープンソースとライセンスの欠如という形で大きな利点があります。 さらに、あらゆるプロジェクトで使用する機能。 含む閉鎖。

多くの記事を読んだ後、このコーデックの開発の回顧展を見ました。 Theoraをブラウザに組み込み、Flashのようなプラグインがなくてもビデオを視聴できるように、Theoraの開発と改善のために資金が割り当てられた日から始まります。 このコーデックの品質がH264を上回っていることを示す記事すらありました(このテーマに関する客観的な推定はまだ見ていませんが、PSNRのみです)。

しかし、私が試みたように、他のコーデックに関連したTheoraの速度の定量的特性に記事で気づきませんでした。 XVIDプロジェクトを新しいTheoraコーデックに置き換えることを考えました。 突然、彼はより良い結果を得るでしょうか? しかし、私にとって重要な瞬間は仕事のスピードでした。

そして、どれがより速く動作するかを推測しないために、同じビデオフラグメントが最初にTheoraによってエンコードされ、次にXVIDがエンコードされるという事実からなる簡単なテストを作成しました。 この場合、各フレームの圧縮時間は別々に測定され、すべてをまとめて測定されました。 テストプラットフォームとして、異なるプロセッサを搭載した2台のコンピューターを使用しました。 確かに、両方ともIntelからです。 しかし、全体として、結果は両方でほぼ同じでした。 OS-Ubuntu。

解像度704x576の782フレームを含むビデオがビデオフラグメントとして使用されました。

私はほとんど忘れていました。 Theoraバージョン:1.1.1。 XVID:1.2.2両方のコーデックの最大品質の量子化係数。 ASMを使用した最適化-最大。 コーデックは、SSEおよび他のコプロセッサが存在する現代のプロセッサで動作し、それらを使用して高速化することを想定しています。

また、エンコード関数はAPIコーデックを使用して直接呼び出され、圧縮アルゴリズムのみが測定され、「ホームビデオ」などの圧縮に使用される対応するコーデックのさまざまなアセンブリに存在する処理の前後に追加のフィルターは測定されません。



テオラ:



画像

フレームあたりの平均エンコード時間は約64.5ミリ秒でした。



Xvid



画像

フレームあたりの平均エンコード時間は13.3ミリ秒でした。



再開



Theoraに比べてXVIDのパフォーマンスに約5倍の違いがあります! つまり、私の場合、コーデックのパフォーマンスが重要な場合、Theoraに切り替えるのは時期尚早です。 または、アルゴリズムの重要な部分をアセンブラーに転送する作業を実行します。 別の優れたソリューションは、CUDAテクノロジーに基づいたNvidia Teslaプラットフォームを使用することです。 または、PCI-X DSPベースのハードウェアエンコーディングカードの開発。 幸いなことに、TheoraをDSPに移植することに関連した素晴らしい経験があります: www.elphel.com/articles/AT3888835064_eng.html

それまでの間、XVID + SSE + MMXが最高の速度を実現します。



PS。 圧縮レベルXVIDに関して興味深いのは、最高の結果が2回以上得られたことです! ただし、出力品質がほぼ同じになるように圧縮パラメーターを選択する必要があるため、これは適切なテストではありません。 つまり、これは別の話であり、他のテストです。



更新: Frostyなど、ホームビデオのエンコード専用のコーデックに精通している他の人(それほど悪くはありません))実際にコメントで彼が言及したパラメーターの数(彼はリストしませんでしたが) Theoraコーデックの操作レベル(XVIDの場合と同様)で、ソフトウェアは2つの可能なオプションに縮小します。これは、目的のビットレートを示しています。 または、品質の指標(量子化係数に影響するか、それであるか)。 さらに、パラメーター自体は相互に排他的です。 どちらか一方。 疑問がある場合は、コーデックAPIの説明を参照してください: theora.org/doc/libtheora-1.1/group__encfuncs.html (ヒント:th_encode_alloc()関数で設定されます。th_info構造体として渡されます。 :target_bitrateおよびquality)。 XVIDにもまったく同じことが当てはまります。

「上位」レベルの他の可能な設定は、プロセッサ/ビデオカードの最適化などの使用です。この記事では、最適化では可能な限り最大の値が使用されると述べています。 品質と同じです。

この投稿の本質は、同じフレームシーケンス上で、あるコーデックと別のコーデックの相対的なコーディングレートを正確に決定することです。 DVDを再コーディングした後、結果のビデオの品質を比較する代わりに。 )特定の問題を解決し、特定の結果を得ました。 解像度が低下すると、エンコード時間が大幅に減少することを十分に認識しています。 ただし、これは相対速度の測定結果に大きな影響を与えません。 ありがとう!)



All Articles