11月
16
- 機能追加
-
- 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日でできてしまいました。今まで何やってたんだか。
素晴らしい!ずっと待っておりました。
あとAMDでの速度低下をある程度改善して頂けたら
大変ありがたいです。
ちなみに2の倍数の動画の作り方は、AviUtlを使って
適当にCropして2の倍数にしてXvidか何かでaviに出力
すれば作れます。
それだと XviD なりでエンコードされた映像は作れますけど、そのあとにどうやって YV12 にするんでしょう。
あと、AMD プロセッサですが、そもそもマシンを持ってないのでできません(持ってるのは Conroe ベースのプロセッサのみ)。AMD に限らず Pen4 でも i7 でも同様ですが。
>梅澤さん
おつかれさまです。
2の倍数ピクセル問題は、AviSynth(v2.5以降)がYV12で4の倍数粒度の処理しか許していないだけですので、AviSynthを介さなければとくに問題はなく、AviUtlを含む編集系のアプリケーションで2の倍数粒度の圧縮・展開が確認できれば大丈夫かと思います(要はAviSynthの問題)。
x264などに、どうしても渡したい場合は、茂木氏のYUV4MPEG2出力プラグインでy4m出力をすれば、x264にダイレクトで渡してエンコード可能です。