QuickTime7はH.264のsarを受け付けませんが、QTP/iTunesで再生できるアナモルフィック・エンコードは一応可能です。
アナモルフィック・エンコードとは、720x480 や 704x480 の素材をそのままのサンプルサイズでエンコードするものです。サンプルサイズとは輝度情報の数字。それが 720x480 個並んでいますよというほどの意味。実際の表示サイズは720x480でも 704x480 でもないのですが、世の中の MPEG-2 はほとんどこのサイズです。プレイヤは別途 4:3 や 16:9 などの DAR 情報を読み込んで、正しい縦横比に直して表示します。
H.264/AVC規格には、720x480 のような特定サイズ制限がありません。ぶっちゃけ DAR もないです。SAR(サンプル・アスペクト・レシオ)。輝度サンプルいっこいっこに縦横比を持たせるとゆう イッチャッタ 、あわわ、自由な仕様。サンプルサイズも縦横比も、規格上はかなりフレキシブルです。
ただし頭書の通り QuickTime は受け付けません。それでも一応、Mac でもアナモルフィックはできますよとゆーハナシ。手許の素材は MPEG-2 TVキャプチャ(CaptyTV)のみ、つまり 4:3 指定の付いた 720x480 なので細かい数値はケースバイケースだと思います。
例えば
-vf pullup,softskip,pp=l5,crop=704:480:8:0,hqdn3d=4:3:6,harddup
※MEncoderは自動で sar 値を書き込む。この素材は両サイドの黒帯をクロップアウトした。この場合のSARは
x264 [info]: using SAR=8/9と出た。この記事にある値のどれとも合わないが、最終的に見た感じでは問題無いようだ。
林檎+ i で情報表示すると下の方にこういう表示がある。
この「現在のサイズ」というものを QuickTime Player Pro で変更する。
ちなみにVLCとMPlayer (OSX) は4:3、きちんとした縦横比で表示する。
林檎+ j でプロパティを出し、ビデオトラックのタブ「ビジュアル設定」を下図のように変更。
※Bフレームを使っている場合は、一旦ビデオトラックを取り出して冒頭の白紙フレームを削除しておく。手許ではweight_b を使うので2フレーム。
このファイルはQTP(+ avc1Decorder)、iTunes、VLCともに受け付けた。
なお、QT系が 640x480で表示したのに対し、VLCは 704x528 で表示した。コンテナの「調整後のサイズ」ではなくビデオストリーム内の sar値を読んでいると思われる。規格上、どっちが正しい挙動なのかは不詳。
エンコード前の拡大は映像の汚れを生み、縮小はディテイルの損失を生むため、アナモルフィック・エンコードの方が素材に対して忠実、つまり高画質とされています。例えば:http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-quicktime-7.html#menc-feat-quicktime-7-constraints など。
『素材を極力弄るな』はエンコードのキホンですから、これが定石です。ただしこれは徹底的な画質追求をする際の固定条件であって、体感画質と一致するとは限りません。
1)現実に目にする画質はプレイヤの性能次第です。
720 (or702)x480は輝度情報の数字が720x480個並んでいますよという事で、正しい縦横比で表示するには縦か横を拡大 /縮小する必要があります。実用上、Mac OSXで SARを解釈できるプレイヤは VLC かMPlayer (OSX) くらいなのですが [*1]、これらオープンソース系は CoreVideo [*2] 対応がまだ厳しいです。
これはデコード終了後、画面に映像を出す段階で差がつくようです。右図→
上段は 横幅702でエンコードしたものを VLC と QuickTime PlayerPro で同サイズ表示したもの。下段は横幅640に縮小してからエンコードしたものです。スクショを jpg化していますが違いは見て取れると思います。
上段はヘルメット部分に画質差があります。この差は下段ではやや詰まっています。つまり、エンコード前に正しい縦横比に縮小 /拡大してしまった方がプレイヤのリアルタイムスケーリングに任せるよりキレイに見える、事もある、ということです。VLCの方は初期設定を弄ればなんとかなるかもしれません。ただし、この素材ではコマ単位で見比べなければそうそう目にとまるとは思いませんでした。
2)また当然ながら、ビットレートが同じなら縮小した方が数値画質は有利です。上下とも1024kbpsでやった結果は以下。
No. | disc. | SSIM | PSNR(Y) | AVG QP(P) | SAR |
---|---|---|---|---|---|
01 | 702x480 no scaling | 0.9519027 | 40.499 | 25.42 | 8/9 |
02 | 702x480 to 640x480 | 0.9537451 | 40.662 | 24.71 | 48/49 |
- | diff | 0.0018424 | 0.163 | -0.71 | - |
サンプル解像度が異なるのに同じビットレートで画質や PSNR や SSIM を比べても意味が無いのですが、要求条件にファイルサイズを加える場合は効いてきます。SAR がどうだろうが QT系は無視して1/1で表示します。VLC / MPlayer (OSX)もそんなに悪く無い縦横比で表示します。どのみち表示サイズは 704x480 ではない、と考えるなら、事前にスケーリングしてしまう方が潰しが効くファイルになります。なお、アニメに 1024kbps与えて SSIM 0.95台ってのは酷いです。以前は悪くても0.977は出ていたのですが…。
最後にファナティックな事を言えば、もとよりサクヒンは4:3や16:9 [*3]で見られる事を意図しています。つまり忠実であるべきは素材のデータか、作り手の意思か。720x480のようなサンプリング解像度は作り手の意思というわけではありません。4:3には過剰、16:9には不適合な10年以上前の技術的妥協点ですから、特にそれに縛られる必要は無いと考える事もできます。
[*1]:QuickTime の構造上、avc1Decorder, Perianともに対応困難な模様です。
[*2]:グラフィックカードの機能を呼び出すOSのAPI。
[*3]:さらにファナティックにいえば16:9もアナログハイビジョンの都合です。16:9の映画は存在しません。
おおきく振りかぶって_15_先取点_070720~.mpeg ===MENCODER_PASS1=== $ mencoder おおきく振りかぶって_15_先取点_070720~.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=1:scenecut=65:qp_min=19:qp_max=51:qp_step=8: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 おおきく振りかぶって_15_先取点_070720~.264.log -vf pullup,softskip,pp=l5,crop=704:480:8:0,hqdn3d=4:3:6,harddup -vfm ffmpeg -sws 9 -ofps 24000/1001 -of rawvideo -o /dev/null x264 [info]: using SAR=8/9 x264 [info]: using cpu capabilities: Altivec x264 [info]: slice I:17 Avg QP:25.53 size: 24999 PSNR Mean Y:41.28 U:48.87 V:49.79 Avg:42.70 Global:41.47 x264 [info]: slice P:747 Avg QP:27.46 size: 7770 PSNR Mean Y:38.60 U:46.93 V:48.02 Avg:40.08 Global:39.65 x264 [info]: slice B:666 Avg QP:28.94 size: 1155 PSNR Mean Y:38.37 U:47.12 V:48.22 Avg:39.87 Global:39.46 x264 [info]: mb I I16..4: 16.8% 45.9% 37.3% x264 [info]: mb P I16..4: 9.8% 8.0% 2.6% P16..4: 61.7% 7.6% 2.3% 0.0% 0.0% skip: 7.9% x264 [info]: mb B I16..4: 0.1% 0.2% 0.0% B16..8: 11.8% 0.0% 0.0% direct:13.5% skip:74.3% x264 [info]: final ratefactor: 23.81 x264 [info]: 8x8 transform intra:40.1% inter:33.7% x264 [info]: direct mvs spatial:94.3% temporal:5.7% x264 [info]: SSIM Mean Y:0.9496788 x264 [info]: PSNR Mean Y:38.524 U:47.046 V:48.138 Avg:40.017 Global:39.577 kb/s:938.68 Video stream: 938.848 kbit/s (117355 B/s) size: 6999453 bytes 59.643 secs 1789 frames SEC ; 109 TIME; 0:1.49 ===MENCODER_PASS2=== $ mencoder おおきく振りかぶって_15_先取点_070720~.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=1:scenecut=65:qp_min=19:qp_max=51:qp_step=8: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=p8x8,b8x8,i8x8,i4x4:trellis=2:brdo:bime -passlogfile おおきく振りかぶって_15_先取点_070720~.264.log -vf pullup,softskip,pp=l5,crop=704:480:8:0,hqdn3d=4:3:6,harddup -vfm ffmpeg -sws 9 -ofps 24000/1001 -of rawvideo -o おおきく振りかぶって_15_先取点_070720~.264 x264 [info]: using SAR=8/9 x264 [info]: using cpu capabilities: Altivec x264 [info]: slice I:17 Avg QP:23.53 size: 27251 PSNR Mean Y:43.15 U:49.45 V:50.37 Avg:44.46 Global:43.85 x264 [info]: slice P:747 Avg QP:25.42 size: 8479 PSNR Mean Y:39.55 U:47.36 V:48.49 Avg:41.00 Global:40.78 x264 [info]: slice B:666 Avg QP:27.00 size: 1234 PSNR Mean Y:38.90 U:47.50 V:48.68 Avg:40.40 Global:40.15 x264 [info]: mb I I16..4: 3.5% 92.3% 4.2% x264 [info]: mb P I16..4: 0.1% 2.6% 0.3% P16..4: 66.9% 13.3% 6.4% 0.0% 0.0% skip:10.4% x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 23.2% 0.4% 1.4% direct: 2.0% skip:73.0% x264 [info]: 8x8 transform intra:89.3% inter:77.3% x264 [info]: direct mvs spatial:86.3% temporal:13.7% x264 [info]: ref P 60.6% 19.7% 12.4% 7.2% x264 [info]: ref B 82.1% 10.7% 5.4% 1.7% x264 [info]: SSIM Mean Y:0.9519027 x264 [info]: PSNR Mean Y:39.293 U:47.450 V:48.602 Avg:40.764 Global:40.499 kb/s:1021.97 Video stream: 1022.145 kbit/s (127768 B/s) size: 7620464 bytes 59.643 secs 1789 frames SEC ; 362 TIME; 0:6.2
scale=640:480:::3 -sws 9
はタップ数3のlanczos、の、ハズ。
おおきく振りかぶって_15_先取点_070720~.mpeg ===MENCODER_PASS1=== $ mencoder おおきく振りかぶって_15_先取点_070720~.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=1:scenecut=65:qp_min=19:qp_max=51:qp_step=8: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 おおきく振りかぶって_15_先取点_070720~.264.log -vf pullup,softskip,pp=l5,crop=704:480:8:0,scale=640:480:::3,hqdn3d=4:3:6,harddup -vfm ffmpeg -sws 9 -ofps 24000/1001 -of rawvideo -o /dev/null x264 [info]: using SAR=48/49 x264 [info]: using cpu capabilities: Altivec x264 [info]: slice I:17 Avg QP:24.94 size: 24954 PSNR Mean Y:40.97 U:48.50 V:49.36 Avg:42.38 Global:41.29 x264 [info]: slice P:735 Avg QP:26.74 size: 7763 PSNR Mean Y:38.68 U:46.94 V:48.01 Avg:40.16 Global:39.72 x264 [info]: slice B:678 Avg QP:28.21 size: 1224 PSNR Mean Y:38.50 U:47.17 V:48.26 Avg:40.01 Global:39.60 x264 [info]: mb I I16..4: 20.4% 36.1% 43.5% x264 [info]: mb P I16..4: 9.6% 6.5% 2.8% P16..4: 63.3% 8.3% 2.8% 0.0% 0.0% skip: 6.7% x264 [info]: mb B I16..4: 0.2% 0.2% 0.1% B16..8: 12.6% 0.0% 0.0% direct:15.8% skip:71.2% x264 [info]: final ratefactor: 23.06 x264 [info]: 8x8 transform intra:34.6% inter:29.3% x264 [info]: direct mvs spatial:97.5% temporal:2.5% x264 [info]: SSIM Mean Y:0.9514350 x264 [info]: PSNR Mean Y:38.626 U:47.066 V:48.145 Avg:40.114 Global:39.683 kb/s:933.47 Video stream: 933.639 kbit/s (116704 B/s) size: 6960617 bytes 59.643 secs 1789 frames SEC ; 116 TIME; 0:1.56 ===MENCODER_PASS2=== $ mencoder おおきく振りかぶって_15_先取点_070720~.mpeg -nosound -ovc x264 -x264encopts bitrate=1024:bframes=3:b_adapt:weight_b:b_pyramid:keyint=240:keyint_min=1:scenecut=65:qp_min=19:qp_max=51:qp_step=8: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=p8x8,b8x8,i8x8,i4x4:trellis=2:brdo:bime -passlogfile おおきく振りかぶって_15_先取点_070720~.264.log -vf pullup,softskip,pp=l5,crop=704:480:8:0,scale=640:480:::3,hqdn3d=4:3:6,harddup -vfm ffmpeg -sws 9 -ofps 24000/1001 -of rawvideo -o おおきく振りかぶって_15_先取点_070720~.264 x264 [info]: using SAR=48/49 x264 [info]: using cpu capabilities: Altivec x264 [info]: slice I:17 Avg QP:23.12 size: 27106 PSNR Mean Y:42.39 U:49.03 V:49.88 Avg:43.73 Global:43.23 x264 [info]: slice P:735 Avg QP:24.71 size: 8582 PSNR Mean Y:39.69 U:47.40 V:48.48 Avg:41.13 Global:40.92 x264 [info]: slice B:678 Avg QP:26.24 size: 1315 PSNR Mean Y:39.10 U:47.56 V:48.69 Avg:40.59 Global:40.35 x264 [info]: mb I I16..4: 4.1% 85.0% 11.0% x264 [info]: mb P I16..4: 0.1% 2.4% 0.4% P16..4: 67.2% 13.0% 7.3% 0.0% 0.0% skip: 9.6% x264 [info]: mb B I16..4: 0.0% 0.0% 0.0% B16..8: 23.3% 0.5% 1.5% direct: 2.9% skip:71.8% x264 [info]: 8x8 transform intra:83.9% inter:67.5% x264 [info]: direct mvs spatial:90.0% temporal:10.0% x264 [info]: ref P 61.1% 19.6% 12.4% 6.8% x264 [info]: ref B 84.1% 9.6% 5.0% 1.3% x264 [info]: SSIM Mean Y:0.9537451 x264 [info]: PSNR Mean Y:39.440 U:47.493 V:48.598 Avg:40.903 Global:40.662 kb/s:1027.43 Video stream: 1027.606 kbit/s (128450 B/s) size: 7661175 bytes 59.643 secs 1789 frames SEC ; 379 TIME; 0:6.19