現状、 Ut Video Codec Suite などの性能測定にはフルHDのクリップを使っています。使い始めた頃はこれでよかったのですが、UtVideo 自身の高速化や他の高速なコーデック(具体的には MagicYUV)の登場により1フレームを処理する時間が内部形式によっては1msを切る時代になり、そろそろ計測誤差を無視することができなくなってきました。そのため、次は4Kのクリップを使おうと考えています。(というか、MagicYUV の作者にそうすることを勧められた)
ちょっと調べたら、いつも使っている crowd_run の 4K 16bit RGB シーケンス版が見つかった(ここ)ので、これを使います。
UQY2 のベンチマークのために v210 のクリップも生成する必要があるのですが、調べた(ソースコードを読んだ)ところ、FFmpeg (libswscale) で 16bit RGB から YUV 系に変換する際には一旦 YUV444P16 相当に変換されてから目的の YUV フォーマットに変換されるため、変換精度については問題がなさそうです。ただし、 FFmpeg だと必要なピクセルフォーマットで AVI ファイルを出力できないケースが多いので、一旦 mov に出力してから VirtualDub FilterMod (VDFM) で AVI に変換します。 VDFM には Caching Input Driver プラグインが付属しており、これを有効にすることで mov ファイルを読むことができます。
4K ともなるとファイルもかなり大きくなります。crowd_run はシーンチェンジが無く、あまり大きくてもベンチマークとしては意味がないので、RGB32 の時に 10GB 程度になるように、先頭から300フレームだけを使うことにします。 b64a だとデータ量が倍になるので、先頭から150フレームだけを使うことにします。 そう思っていたのですが、同じ区間を使わないと UQRG と ULRG の比較ができなくなってしまうので、やはり全部のフォーマットで 300 フレームを使います。
というわけで以下のようにして必要な AVI ファイルを作ります。
- シーケンス 500 枚をダウンロードする(300フレームしか使わないけど一応)。24GB になる
- FFmpeg で b48r の mov ファイルに変換する。これも 24GB になる
ffmpeg -pattern_type glob -i '*.sgi' -r 25 -pix_fmt rgb48be -vcodec rawvideo crowd_run_4k-b48r.mov
- FFmpeg で各種フォーマットで出力する
- VirtualDub FilterMod で RGB32, RGB24, YV24, YV16, YUY2, YV12, NV12, b64a, v210 に変換する。残念ながら b48r での出力はできないようだ
ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -pix_fmt rgb24 -vcodec rawvideo crowd_run_4k-tmp-rgb24.mov ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -vcodec v308 crowd_run_4k-tmp-yuv444.mov ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -pix_fmt yuyv422 -vcodec rawvideo crowd_run_4k-tmp-yuv422.mov ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -vcodec yuv4 crowd_run_4k-tmp-yuv420.mov ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -vcodec copy crowd_run_4k-tmp-rgb48.mov ffmpeg -i crowd_run_4k-master-b48r.mov -frames:v 300 -vcodec v210 crowd_run_4k-tmp-yuv422-10bpc.mov
これで、全部合わせて 64GB ぐらいの AVI ファイル群が出来上がります。
特になし