x264Encoderの設定を、MEncoderの常用設定とできるだけ揃えて比較してみた。主な設定は2pass,1024kbps, B-Frame=3。
x264Encoder はMPEG streamclip経由で使用した。
素材は実写の舞台中継『サクラ大戦歌謡ショウ「新・愛ゆえに」』。なんていうんだろう、歌謡ショウ?ミュージカル?まぁ宝塚みたいなもの。
※緑がbetter
\ | 項目 | x264Encoder | MEncoder |
---|---|---|---|
1st | 総フレーム数 | 350643 | 350643 |
I枚数(I比率) | 3047(0.87%) | 1922(0.55%) | |
AVG QP(I) | 20.60 | 18.34 | |
AVG QP(P) | 22.65 | 19.70 | |
AVG QP(B) | 24.20 | 21.92 | |
sec | 21801(6:3.21) | 24084(6:41.24) | |
fps | 16.08 | 14.56 | |
SSIM | 0.9785959 | 0.9928862 | |
2nd | |||
AVG QP(I) | 20.38 | 18.45 | |
AVG QP(P) | 22.23 | 19.90 | |
AVG QP(B) | 23.66 | 21.45 | |
sec | 53102(14:45.2) | 54198(15:3.18) | |
fps | 6.60 | 6.47 | |
SSIM | 0.9793542 | 0.9929289 |
1. x264Encoderの方が高速。
MEncoderで使ったx264オプションやビデオフィルタに違いはあるが、取り立てて重い部類のものでは無いと思う。MEncoderの21時間44分42秒に対しx264Encoderは20時間48分23秒と、トータルで56分程度の差がついた。GUI付き、ビルド済みの配布物でありながらこの速度は素晴らしい。ソースコード同梱なので、手許でビルドすればさらに速くなるかもしれない。
2.MEncoderの方が高画質。
ただし、x264Encoderの画質は、おそらく多くの人が充分な画質と看做すと思う。
手許ではSSIM=0.98以上、AVG QP(P)=20以下を一応の目標にしているが、主観的には少し低い(x264EncoderのSSIMはあと0.0007)からといってそうそう気になるものではないし、AVG QP(P)=22というのはffmpegXが固定QPではこれ以上下げない方が良いとしている値だ。
原因としてはインタレ解除やスケーリングの性能差、自分がx264Encoderのデノイズに不慣れな事、細かいx264オプションの違いが考えられるが、最も目立つのはI枚数。
手許の録画傾向およびMEncoderの経験上、I比率0.87%は実写としては比較的高い。アクション映画か、あまり手間のかかってないアニメ並みだ。確かに舞台中継は映像がダレないようにカット切り替えを多用するものだが、のべつまくなしにそれが続くというものでもなく、舞台全体を見渡すカットも結構長い。全体的なカット数は一般的な映画と大差ない範囲に収まっている印象がある(たぶん映像のプロの人が本能的にそうするのだと思う)。直近10件の落語を除く実写のI比率は平均0.62%。『マトリックス・レボリューションズ』の1.45%(これは『ゼーガペイン』を超えている)と『2004US_アレキサンダー』の0.84%を除外すると0.49%になる。
MovieVideoChartで見ると、MPEG streamclipのx264Encoderの最大GOP間隔は5秒のようだ。
MEncoderのGOP関連設定は、keyint=300:keyint_min=30:scenecut=40とデフォルトかつ定石の値(keyint=300は最大10秒@30fps)だが、MPEG streamclip・x264Encoderともに、x264Encoderにはkeyint、keyint_minに相当する指定項目が無く、設定を合わせる事が出来なかった。この部分はフロントエンドに任せていると思われる。MPEGStreamClipのヘルプによるとAppleの推奨キーフレーム間隔は5秒単位なので1.8でそれに合わせたとある。これがI枚数の違いを生み、bitを費消し、全体のQPを押し上げている。もしもここを弄る事ができれば、x264Encoderでコンスタントに1024kbpsでSSIM=0.98を狙う事ができるだろう。
3.その他の違い。
4. 設定
MEncoder(x264 core:54 svn-623M)
===MENCODER_PASS1===
$ mencoder サクラ大戦歌謡ショウ「新・愛ゆえに」.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=300:keyint_min=30:scenecut=40:qp_min=10:qp_max=51:qp_step=4:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cabac:nofast_pskip:dct_decimate:nointerlaced:noglobal_header:psnr:ssim:pass=1:threads=2:8x8dct:turbo=1 -passlogfile サクラ大戦歌謡ショウ「新・愛ゆえに」.264.log -vf yadif=2,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -ofps 30000/1001 -of rawvideo -o /dev/null
===MENCODER_PASS2===
$ mencoder サクラ大戦歌謡ショウ「新・愛ゆえに」.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=300:keyint_min=30:scenecut=40:qp_min=10:qp_max=51:qp_step=4:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cabac:nofast_pskip:dct_decimate:nointerlaced:noglobal_header:psnr:ssim:pass=2:threads=16:me=umh:me_range=32:subq=7:frameref=4:mixed_refs:8x8dct:partitions=all:trellis=2:brdo:bime:cqm=jvt:direct_pred=auto -passlogfile サクラ大戦歌謡ショウ「新・愛ゆえに」.264.log -vf yadif=2,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -ofps 30000/1001 -of rawvideo -o サクラ大戦歌謡ショウ「新・愛ゆえに」.264
MPEGStreamclip1.8+ x264Encoder0.5.1
5. 余談:
ゲキテイを途中で切るなぁああっ!!
KeyIntMinはffmpegデフォルトのまま、KeyIntは250までうけつけます。30fpsだと8秒ちょっとですね。(x264Encoder.c:1985)
KeyFrame:Autoの時はMaxにするか、120くらいにするかとかのほうがいいでしょうか。この辺もうちょっときちんと作らないとだめですね。