白黒映画は動画エンコ最大のテキだと思っていたのですが、結構充分なものができました。
もともとXvidでも白黒にはなかなか苦心していたが、闇階調の苦手なx264では文字通り見れたものではなかった。
2005年末、まだMain
Profileで作っていた頃のメモには、1024kbps、640x272、Avg
QP(I)12にもかかわらず、夕闇の中の合戦シーンで闇階調のブロックノイズ多発。群衆の顔なども潰れきっている。印象派のゾンビのようだ。大半のシーンは問題無い。
とある(オレだけ
ど)。
今から見るとscenecut=30と、そりゃブロックノイズが出て当然な設定になっているが、その後、nofast_pskipが登場した後(2006年初頭)でも「第三の男」とか、「ローマの休日」といったロー・モーションな映画で酷い闇階調ブロックが出てトラウマになった。
ビットレートを上げれば全体的な質感は上がるが、闇階調ブロックが出がちな箇所が変わらなかった事から、可変ブロックサイズやskip/directなど、マクロブロックの新しい符号化ツール(要素技術)のチューニングを待つべきと考え、手許では2006年2月頃から白黒映画を録画をやめてしまった。
x264 (r600)コマンド対応でちょっと知識が増えたので一年ぶりに白黒映画を録ってみたところ、頭書の通り、悪くない結果になったのでメモっときます。基本的な設定は070115 -結果&設定篇と大して変えてないです。![]() | ![]() | ![]() |
男の子のコート、このへんのグレイより濃い衣服で闇階調ブロックが出がち。特に背広で目立つ。 壁とか道とか、全く動かない部分では、もう少し濃い色でないと出ない。 女の子のカーディガンは要警戒だが、この三人はほとんど身じろぎもしないせいか、闇階調ブロックは気にするほどでなかった。 |
左端の人のように生地に模様のある衣類では闇階調ブロックはさほど出ない。むしろプリプロセスの方が重要。字幕用にpp=l5を使っているので生地の質感がランダムに荒れる。 右の三人は闇階調ブロックまみれになるかと思ったが、気になるほどではなかった。 |
影の多い場面は「闇階調ブロックノイズ」のビッグチャンス。その気で探すとやっぱちょっと出た。 もう少し影が多かったり、ピントの合ってない奥や手前がもっとべっとり影だったり、パンと複合してたらさらにヤバかったと思う。 |
===MENCODER_PASS2===Avg QP(P):20.40、SSIM 0.987、可もなく不可もなし。落語でもこの程度になる事はある。
x264 [info]: using SAR=1/1
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:1066 Avg QP:18.23 size: 28453 PSNR Mean Y:46.57 U:57.57 V:57.25 Avg:48.13 Global:47.78
x264 [info]: slice P:110035 Avg QP:20.40 size: 6992 PSNR Mean Y:44.95 U:56.56 V:55.83 Avg:46.52 Global:46.15
x264 [info]: slice B:78303 Avg QP:21.96 size: 2700 PSNR Mean Y:44.82 U:56.20 V:55.44 Avg:46.38 Global:46.00
x264 [info]: mb I I16..4: 3.8% 76.0% 20.1%
x264 [info]: mb P I16..4: 0.4% 4.1% 0.9% P16..4: 55.6% 10.4% 5.8% 0.3% 0.2% skip:22.4%
x264 [info]: mb B I16..4: 0.0% 0.3% 0.1% B16..8: 24.7% 1.8% 3.9% direct: 3.2% skip:65.9%
x264 [info]: 8x8 transform intra:75.6% inter:65.8%
x264 [info]: direct mvs spatial:90.4% temporal:9.6%
x264 [info]: ref P 81.0% 10.0% 6.3% 2.7%
x264 [info]: ref B 88.0% 7.7% 2.8% 1.5%
x264 [info]: SSIM Mean Y:0.9873008
x264 [info]: PSNR Mean Y:44.907 U:56.417 V:55.676 Avg:46.470 Global:46.097 kb/s:1024.01
Video stream: 1024.052 kbit/s (128006 B/s) size: 1011221843 bytes 7899.767 secs 236757 frames
SEC ; 36527
TIME; 10:8.47
$ mencoder 1952US_ライムライト(字幕).mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=24:scenecut=65:qp_min=10:qp_max=51:qp_step=4:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cqm=jvt:cabac:direct_pred=auto:nofast_pskip:nodct_decimate:nointerlaced:noglobal_header:psnr:ssim:pass=1:threads=2:8x8dct:turbo=1 -passlogfile 1952US_ライムライト(字幕).264.log -vf pullup,softskip,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -zoom -ofps 24000/1001 -of rawvideo -o /dev/null
$ mencoder 1952US_ライムライト(字幕).mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=24:scenecut=65:qp_min=10:qp_max=51:qp_step=4:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cqm=jvt:cabac:direct_pred=auto:nofast_pskip:nodct_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 -passlogfile 1952US_ライムライト(字幕).264.log -vf pullup,softskip,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -zoom -ofps 24000/1001 -of rawvideo -o 1952US_ライムライト(字幕).264
経験上、白黒映画は難物だと思っている。
正確な理由は解らないがなかなか縮まず、ブロッ
クノイズ
に不満を感じる事が多い。トラウマであり悩みの種であり動画エンコ最大のテキである。
白黒映画では輝度情報の重要度が飛躍的に高い。いや当たり前だけど。
Xvidでグレイスケールにすると色味が変わるので多少は彩度
情報が入っているようだが、これはTV局が見やすさの為に付加しているか、フィルム自体の色だろう。見た目の印象ではグレイスケールより青みががっているが、いずれ
にせよ彩度情報は一律な着色と思われる。
ならばこのオプションが使えるのではないかと思った(らけった版ffmpegにも-chromaoffset <int>と いうコマンドがある)。
chroma_qp_offset=<-12-12>
彩
度情報と輝度情報に異なる量子化値(quantizer)を使う。実用範囲は-2から2。 (default: 0).
x264cli では--chroma-qp-offset。 以 下のような解説がある。
zero1(svn408)
Usage:
--chroma-qp-offset <integer> (default=0) [-12 - 12]
彩度情報
と輝度情報に異なる量子化値を使う。
これはちょっと面白い。というのは人間の目は彩度変化よりも輝度変化
に敏感だという視覚認識のしくみを逆手にとるものだからだ。反面、彩度情報はYV12(*DVDやテレビが使うYUV4:2:0*)
ではもともと間引かれているので、僅かな輝度画質向上の為に、大量の彩度画質を犠牲にする事になる。
覚
書(要約)
色部分 (chroma
U・V)を輝度部分(LUMA)とQの差を発生させて、エンコする事ができる。基本的には、差を用意したいのであ
れば、マトリクス側で行えば用が足りる。マトリクスをLUMA・CHROMA間で差を用意していないのであれば、このオプションを使ってもいいかもしれな
い。
覚書氏の言う通り、輝度・彩度の差分はマトリクス側で用意するほうが緻密なQP指定が出来るが難易度が幾何 級数的になる。これで済むなら済ませたい。
素材は白黒映画か
ら切り出した1分程のクリップ。
一律に着色してあるのはおそらく青だから、YUVのうち重要
なのはまずY(輝度)、次にU(青と
輝度の差分)のPSNRという事になると思う。V(赤と
輝度の差分)はさほど重要ではなかろう。
x264 [info]: SSIM Mean Y:0.9919717Y は輝度、Meanは英辞郎によると平均らしい。SSIMは輝度平均しか出ていない事になる。
x264 [info]: PSNR Mean Y:48.027 U:54.472 V:54.422 Avg:49.309 Global:49.226 kb/s:1034.58
デフォルト値 | 一般的な推奨範囲 | デフォルトより良い | デフォルトより悪い |
指定値 | 結果 | デフォルトとの差 | ||||||||
SSIM | PSNR | SSIM | PSNR | |||||||
GLOBAL | Y | U | V | GLOBAL | Y | U | V | |||
-12 | 0.9905248 | 48.379 | 47.009 | 55.414 | 55.908 | -0.0014469 | -0.847 | -1.018 | 0.942 | 1.486 |
-11 | 0.9907165 | 48.491 | 47.141 | 55.277 | 55.752 | -0.0012552 | -0.735 | -0.886 | 0.805 | 1.330 |
-10 | 0.9908894 | 48.598 | 47.261 | 55.150 | 55.591 | -0.0010823 | -0.628 | -0.766 | 0.678 | 1.169 |
-9 | 0.9910530 | 48.691 | 47.370 | 54.989 | 55.418 | -0.0009187 | -0.535 | -0.657 | 0.517 | 0.996 |
-8 | 0.9912060 | 48.777 | 47.481 | 54.845 | 55.245 | -0.0007657 | -0.449 | -0.546 | 0.373 | 0.823 |
-7 | 0.9913417 | 48.857 | 47.581 | 54.743 | 55.112 | -0.0006300 | -0.369 | -0.446 | 0.271 | 0.690 |
-6 | 0.9914600 | 48.920 | 47.661 | 54.659 | 54.979 | -0.0005117 | -0.306 | -0.366 | 0.187 | 0.557 |
-5 | 0.9915625 | 48.977 | 47.734 | 54.578 | 54.855 | -0.0004092 | -0.249 | -0.293 | 0.106 | 0.433 |
-4 | 0.9916610 | 49.034 | 47.802 | 54.504 | 54.717 | -0.0003107 | -0.192 | -0.225 | 0.032 | 0.295 |
-3 | 0.9917591 | 49.093 | 47.871 | 54.456 | 54.620 | -0.0002126 | -0.133 | -0.156 | -0.016 | 0.198 |
-2 | 0.9918430 | 49.148 | 47.935 | 54.458 | 54.562 | -0.0001287 | -0.078 | -0.092 | -0.014 | 0.140 |
-1 | 0.9919108 | 49.194 | 47.985 | 54.482 | 54.517 | -0.0000609 | -0.032 | -0.042 | 0.010 | 0.095 |
0 | 0.9919717 | 49.226 | 48.027 | 54.472 | 54.422 | 0 | 0 | 0 | 0 | 0 |
1 | 0.9920258 | 49.250 | 48.064 | 54.413 | 54.297 | 0.0000541 | 0.024 | 0.037 | -0.059 | -0.125 |
2 | 0.9920623 | 49.260 | 48.092 | 54.259 | 54.168 | 0.0000906 | 0.034 | 0.065 | -0.213 | -0.254 |
3 | 0.9921145 | 49.284 | 48.130 | 54.155 | 54.087 | 0.0001428 | 0.058 | 0.103 | -0.317 | -0.335 |
4 | 0.9921621 | 49.310 | 48.167 | 54.118 | 54.025 | 0.0001904 | 0.084 | 0.140 | -0.354 | -0.397 |
5 | 0.9921896 | 49.326 | 48.190 | 54.103 | 53.960 | 0.0002179 | 0.100 | 0.163 | -0.369 | -0.462 |
6 | 0.9922173 | 49.344 | 48.211 | 54.157 | 53.923 | 0.0002456 | 0.118 | 0.184 | -0.315 | -0.499 |
7 | 0.9922283 | 49.350 | 48.220 | 54.181 | 53.840 | 0.0002566 | 0.124 | 0.193 | -0.291 | -0.582 |
8 | 0.9922403 | 49.349 | 48.229 | 54.134 | 53.765 | 0.0002686 | 0.123 | 0.202 | -0.338 | -0.657 |
9 | 0.9922678 | 49.353 | 48.242 | 54.093 | 53.680 | 0.0002961 | 0.127 | 0.215 | -0.379 | -0.742 |
10 | 0.9922851 | 49.352 | 48.250 | 54.046 | 53.578 | 0.0003134 | 0.126 | 0.223 | -0.426 | -0.844 |
11 | 0.9923036 | 49.347 | 48.260 | 53.947 | 53.482 | 0.0003319 | 0.121 | 0.233 | -0.525 | -0.940 |
12 | 0.9923160 | 49.352 | 48.266 | 54.002 | 53.433 | 0.0003443 | 0.126 | 0.239 | -0.470 | -0.989 |
![]() | Yのみだから彩度劣化で 上がるのは当たり前。 |
![]() | 僅かな輝度画質向上の為に 大量の彩度画質が犠牲に な っている。 まさにそーしたいわ けだか ら、狙いとしちゃおっけー |
![]() | 指定値プラスの領域では、 おおむねVの劣化度は、 U よりも高い。これも狙いと しちゃおっけー。 重要度はY>U>V。 輝 度ゲインとUロスは 6-8あたりがバランス良さ そう。 |
しかし主観的には画質の違いは非常に僅かだった。傾向としては、
chroma_qp_offsetを変えると画質が向上する部分と悪化する部分がある。
おそらく白黒映画の彩度信号UVは、
明るい部分の階調表現に貢献しているのだろう。また存在する以上、動き予測の手がか
り(chroma_me)などにも使われる。そういう傾向が飲み込めれば使えないものでもあるまい。
グラフを元に0と7を見比べてみたところ、7では極めて地味に「闇階調のフレーム単位でぱたぱたと動くブロックノイズ」が緩和していた。
6
-7の傾向が白黒映画全般に使えるとは限らないし、カスタム量子化マトリクスにも及ばない筈だが、ratetolやqp_stepなどの設定もアニメっぽ
く(白黒はカラーよりフレーム間の輝度変化が激しいハズだ)してやれば、結構イイ線いくかもしれない。
設 定
===MENCODER_PASS1===
$ mencoder mono_0.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=24:scenecut=65:qp_min=10:qp_max=51:qp_step=4:chroma_qp_offset=0:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cqm=jvt:cabac:direct_pred=auto:nofast_pskip:nodct_decimate:nointerlaced:noglobal_header:psnr:ssim:pass=1:threads=2:8x8dct:turbo=1 -passlogfile mono_0.264.log -vf pullup,softskip,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -zoom -ofps 24000/1001 -of rawvideo -o /dev/null
===MENCODER_PASS2===
$ mencoder mono_0.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=24:scenecut=65:qp_min=10:qp_max=51:qp_step=4:chroma_qp_offset=0:qcomp=0.6:ratetol=4:deblock:deblock=0,0:cqm=jvt:cabac:direct_pred=auto:nofast_pskip:nodct_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 -passlogfile mono_0.264.log -vf pullup,softskip,pp=l5,crop=720:480:0:0,scale=640:480:::4,hqdn3d=4:3:6,harddup -sws 9 -zoom -ofps 24000/1001 -of rawvideo -o mono_0.264
ageha 内関連記事
外 部リンク