モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> x264 の研究。低ビットレートで高画質を目指す。しかも 1pass

 どうもっすー。x264 研究して、それ関連のツールを作ってるのですが、デフォルトのプリセットとかを精査するためにいろいろいじって確認してるって感じ。前回は FDK-AAC について取り扱ったのだけど、それも今回のツール作成に関係してる。

 ほな、本編いきましょっかー。

 とりあえず、今私が研究してるのは最高画質を目指す設定なのよね。だから、Ultrabook たとえば i7-4500U とか (私が使ってるやつね) だと CPU 振り切れちゃう。

 一応こんな感じ。

slower ref=3 rc-lookahead=2*%f partitions=p8x8,b8x8,i8x8,i4x4 subme=10

 ベースプリセットは slower です。かなり重たいと思う。そして subme=10 にあげています。これは slower のデフォルト subme=9 から .6 程度の qp 改善が見込めました。大きいです。そして p4x4 はほとんど使われないので、低ビットレートでは SD でも無駄になるので排除してます。ref 数とか merange とかを挙げてもいいのですが、あまり ref 数あげすぎてもデコード負荷が挙がったりするので、却下です。merange も .1 程度の改善がありますが、この程度だと軽さとか安定性とかを取ったほうがいいので却下です。

 ほかの設定も一緒にさらした x264opts の場合のやつ貼っておきます。

rc-lookahead=80:vbv-maxrate=436:vbv-bufsize=218:ref=3:b_pyramid=1:open_gop=1:ipratio=1.45:pbratio=1.35:keyint=300:scenecut=60:qcomp=0.5:qpmin=14:qpstep=16:chroma-qp-offset=1:aq-strength=0.8:no-psy:cqm=jvt:partitions=p8x8,b8x8,i8x8,i4x4:ratetol=2.4:colormatrix=smpte170m:subme=10

 これは 480 kbps が使える場合の設定。ffmpeg 側には -b:v 436k -maxrate 436k -bufsize 436k とし、映像は 640x360、30000/1001 fps、音声は HE-AACv1 44 kbps で音質をそこそこ確保している。

 384 kbps 基準の場合は少し変わる。x264 の制御レートが若干小さくなったりしてます。

rc-lookahead=80:vbv-maxrate=364:vbv-bufsize=182:ref=3:b_pyramid=1:open_gop=1:ipratio=1.45:pbratio=1.35:keyint=240:scenecut=60:qcomp=0.5:qpmin=14:qpstep=16:chroma-qp-offset=1:aq-strength=0.8:no-psy:cqm=jvt:partitions=p8x8,b8x8,i8x8,i4x4:ratetol=2.4:colormatrix=smpte170m:subme=10

 ffmpeg 側には -b:v 364k -maxrate 364k -bufsize 364k とし、映像は 640x360、24000/1001 fps、音声は HE-AACv2 20 kbps で音質は悪いが、一定レベルの音質を確保した設定。

 どちらもだけど、keyint は fps の 10 倍に設定しておくように。画質多少悪くなってもいいのなら、384 kbps は 30 fps、480 kbps は 40 fps 程度まで持ち上げることもできると思います。

 ということで設定をさらした。subme=10 trellis=2 は効果が高い反面、処理が相当重たくなるので、PC によって検討すべし。ちなみに me=hex で subme=10 とかアンバランスな設定は NG。

 以上