機能追加
  • YUV420 のためのコーデック (FOURCC: ULY0) を追加した。
その他
  • 設定を行わない場合は「デコード速度優先」で動作するようにした。
  • ULY2: 横幅が偶数のもののみ扱えるようにした。

readme ファイル/(英語) インストーラ(msi 形式) ソース

内部格納形式が YUV420 であるようなコーデックを追加しました。入出力フォーマットは YV12 のみです。デバッグは極めて不足しており、人柱バージョンだと考えてください。ある程度バージョンが進むまでは、ULY0 のバージョン間の互換性は保証できません。

なお、横幅が4の倍数のものに関してしかテストしていません。2の倍数だけど4の倍数ではない YV12 映像が作れなかったからです(AviSynth でリサイズしようとしたら4の倍数でないとダメらしい)。うまく作る具体的な方法をご存じの方は教えてください。

他のコーデック (ULY2, ULRG, ULRA) には、(ULY2 に横幅制約が追加された以外は)基本的に変更はありません。


以下、実装に関する話

ULY0 の実装に苦労していたのは、CULY0(Encoder|Decoder) を CPlanar(Encoder|Decoder) のサブクラスとして実装しようとして、どうやったらきれいになるかずっと悩んでいたからです。YV12 は BI_RGB や YUY2 などと違って、1. Planar format である 2. マクロピクセルの高さが 1 ではない という違いがありますが、そこをどう吸収するか解決できなかったのです。

ですが、C(Encoder|Decoder) の直接のサブクラスとして実装して、ある程度コードの重複点や相違点が見えてきてから結合すればいいじゃん、という方針にしたら、1日でできてしまいました。今まで何やってたんだか。

Trackback

4 comments untill now

  1. 素晴らしい!ずっと待っておりました。

    あとAMDでの速度低下をある程度改善して頂けたら
    大変ありがたいです。

  2. ちなみに2の倍数の動画の作り方は、AviUtlを使って
    適当にCropして2の倍数にしてXvidか何かでaviに出力
    すれば作れます。

  3. 梅澤 威志 @ 2008-11-16 22:28

    それだと XviD なりでエンコードされた映像は作れますけど、そのあとにどうやって YV12 にするんでしょう。

    あと、AMD プロセッサですが、そもそもマシンを持ってないのでできません(持ってるのは Conroe ベースのプロセッサのみ)。AMD に限らず Pen4 でも i7 でも同様ですが。

  4. >梅澤さん

    おつかれさまです。

    2の倍数ピクセル問題は、AviSynth(v2.5以降)がYV12で4の倍数粒度の処理しか許していないだけですので、AviSynthを介さなければとくに問題はなく、AviUtlを含む編集系のアプリケーションで2の倍数粒度の圧縮・展開が確認できれば大丈夫かと思います(要はAviSynthの問題)。

    x264などに、どうしても渡したい場合は、茂木氏のYUV4MPEG2出力プラグインでy4m出力をすれば、x264にダイレクトで渡してエンコード可能です。

Add your comment now