AMV4ビデオコーデック 概要
圧縮設定については非可逆圧縮を廃止し可逆圧縮のみとなります。
非可逆圧縮の廃止については、AMV2MTの「Y3:標準」の非可逆圧縮よりAMV4では可逆圧縮のまま高い圧縮効果が得られるようになるためです。同様にAMV3の圧縮フォーマットであるYV12もAMV4のYUY2の方が圧縮効果が高く画質も良いため、現状YV12についても非対応です。

AMV4の圧縮設定はYUY2の場合次の2つになります。
(1) DY2:標準可逆(Y2:標準可逆 相当)
(2) DY3:高圧縮可逆(Y3:標準 相当)
DY2はAMV2MTのY2とほぼ同じ内容になりますが少しだけ圧縮効果が向上します(DY2はY2よりファイルサイズを小さくできる)。
DY3は圧縮パターンの増加や二次圧縮の適用により非可逆圧縮のY3よりも高い圧縮効果が得られます。可逆圧縮なので画質もY3より良くなりますので「DY3はY3よりファイルサイズを小さくしつつ画質も良い」と言うことになります。
一方、処理速度はAMV4のSSE版はSSE4.1対応(SSE4.1必須)となり、AMV2MTとほぼ同じか若干速く処理できます(DY2とY2、DY3とY3を比べた場合、ほぼ同じか若干AMV4の方が速い)。
さらに、AMV4のAVX2版は大幅に処理速度が向上、AVX2版のDY3はY2より高速で動作します。
AMV4ビデオコーデックについて簡単にまとめると
(1) 可逆圧縮専用
(2) 圧縮効果が高まる(非可逆圧縮のY3より圧縮効果が高い「高圧縮可逆」を追加)
(3) SSE版はSSE4.1対応になりAMV2MTとほぼ同じか若干速く処理できる
(4) AVX2版は大幅に処理速度が向上する
※ 記事の内容は開発中のものです。公開時の仕様と異なる場合があります。
最終的な仕様については、公開時の記事を見てください。
AVX2って何? そしてAMV4ビデオコーデック
単純に考えるとSSE命令中心で作成されたプログラムをAVX2へ移行することで2倍の処理能力(処理時間が半分で済む)
が期待できます。
AVX(AVX1?)については2011年1月に発売されたSandy Bridgeから搭載されていて実数演算が中心でしたが、今回のHaswellで搭載されたAVX2は整数演算が中心の拡張命令となっています。
また、SSE命令にはなかった命令もいくつか追加されていて、例えばデータ要素毎に異なるシフト値を指定できるシフト命令「VPSLLVQ」なんかは便利だと思いました。
AVX2ってどう?(良いの?)
AVX2自体の性能はとても優秀で、簡単なプログラムであれば、ほぼSSEの倍の性能を達成できるようです。
「3倍高速 AVX2対応 AMVデコーダー デモ版」
しかし、一般的なプログラムにおいてAVX2の性能を引き出そうと思うと、一筋縄ではいかないのかな。AVX2へ対応したプログラムと言うのは9か月経った今でも極めて少ないように思います。
また、Haswell自体の評価が低くいのも開発者からするとつらいところで、AVX2に対応したCPUの普及が進まないと、積極的にAVX2へ対応しづらいですよね。
AVX2に対応したプログラムが充実してくればHaswellに対する評価も上がってくると思いますが、しばらくは
「AVX2を生かせるプログラムが少ない」
↓
「AVX2を活かせないとHaswellの評価が低く普及しない」
↓
「開発者はAVX2へ対応しても利用できるユーザーが限られる(需要が少ない)」
と言った負の連鎖が続くのかなと思います。
そしてAMV4ビデオコーデックへ
1年半ほど前に「AVXによりパフォーマンスが向上するかも、パフォーマンスが向上したら圧縮効果を高める方向で調整できるかも」と言った内容の記事を書きました。
「AMVビデオコーデックのこと」
このときは期待とか予測でしたが、実際にテストしたAVX2の性能は私の期待以上のもので、その開発は趣味であればとても楽しく刺激的です。
現時点でAVX2へ対応しても、利用できるCPUを所有している人が極僅かなため需要は少ないと思いますが、デコード処理が3倍早くなるなどAVX2の性能の高さはとても魅力的ですので、AVX2へ完全対応した新しいビデオコーデック「AMV4 ビデオコーデック」を制作することにしました。
なお、AMVビデオコーデックはシェアウエアなので継続して利用される場合ライセンスを購入して頂くことになりますが、AMV2、AMV2MT、AMV3、AMV4でライセンスを共通としますので、すでにライセンスを購入された方、および、これから購入される場合も、AMV4のために追加で購入する必要はありません。
AMV4の公開まで、まだまだ時間がかかりますが、おいおい内容を書いていこうと思います。
AVX2対応 AMVデコーダー デモ版の追試
古いPC Win7 Ivy Bridge i5-3470S CPU @ 2.90GHz | 新しいPC Win8 Haswell i7-4770 CPU @ 3.40GHz | |
AMV2MT Ver2.20i 32bit HDデコード処理時間 Y2:標準可逆設定 | 2.47 ms (404 fps) | 2.59 ms (384 fps) |
なかなか原因はわからないのですが、一つ影響が出たのがOSの電源オプションでした。

いままでCPUのパフォーマンスを安定させるため「高パフォーマンス」を選択してテストしてきましたが、新しいPCでは「高パフォーマンス」を選択するとPC全体のパフォーマンスが低下します(おそらくテストに使ったPC固有の問題)。「バランス」を選択すると本来の性能と思われる結果が出ましたので「バランス」に設定して再テストした結果を掲載します。
1.ベンチマークテスト
1.1.テスト環境
OS | Windows8 x64 Professional |
CPU | Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz Haswell |
MB | ASRock H87 Performance (Intel H87) |
Memory | DDR3 1600 16GB(8GBx2 Dual Cannel)read=25.4GB/s write=14.8GB/s |
Software | DecBench86.exe Ver1.01 DecBench64.exe Ver1.01 |
備考 | CPUは4コア、8スレッド、HTT対応、AVX2対応。動作クロックを3.4GHz(定格)で固定し、 省電力設定およびTurbo BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。 |
タイトル | Mystery of the Nile |
情報 | 1280*720、2082frames、1分26秒 |
備考 | AviUtlと各コーデックを使ってエンコードしてテスト用の動画ファイルを作成 |
1.2.結果
コーデック | 高パフォーマンス | バランス | 高パフォーマンスに対する バランス設定の性能 | ||
時間 | FPS | 時間 | FPS | ||
32bit | 2.59 ms | 384 fps | 1.90 ms | 524 fps | 136% |
64bit | 2.23 ms | 446 fps | 1.68 ms | 594 fps | 133% |
64bit AVX2 | 0.88 ms | 1131 fps | 0.66 ms | 1515 fps | 133% |
※ 高パフォーマンスは前回のテスト結果をそのまま記載しています。バランスは今回テストした結果です。
電源オプションを「バランス」にしたことで「高パフォーマンス」にたいし全体的に約33%ほど良い結果がでました。
Ivy Bridgeの32bitのテスト結果2.47 ms (404 fps)にたいしても、Haswellのバランス設定では1.90ms(524 fps)と約29%良い結果です。これは動作クロックの増加分17%を超えるのでHaswell自体がIvy Bridgeより10%程度高性能と言ったところでしょうか。
AMVビデオコーデックにおいては後発のHaswellがそれ以前のCPUより遅くなるということは無いようで安心しました。