ウチでは HandBrakeCLI の簡易的な GUI ラッパーを HTA+JScript で自作して MP4 動画をエンコードしているのだが、先日、HandBrake を 1.3.3 から 1.6.1 にアップデートしたところ、生成される動画のピクセルサイズがおかしくなってしまった。
よくある 1440x1080 のソースをエンコードしたら 1624x1080 という変なピクセルサイズの MP4 動画が生成されてしまうし、1920x1080 をエンコードしても 1624x1080 になってしまう。
いくらなんでもこれはおかしいので調べてみたら、どうやら HandBrake の PAR 処理が 1.4.x から変更されたらしい。
横 1920 で再生したい動画の場合、ストレージ幅を -w 1920 もしくは -w 1440 に指定し、さらに --custom-anamorphic を指定して --display-width を常に 1920 にしていたが、1.4.x 以降はこれではダメなのだ。
少し調べてみて、通常使われているようなピクセルサイズであれば、--pixel-aspect を指定すれば良いことが分かった。
以下は、よく使われる映像サイズにおけるストレージサイズとディプレイサイズと PAR の対応表である。
映像 | ストレージサイズ (SAR) | ディスプレイサイズ (DAR) | PAR |
---|---|---|---|
FHD | 1920x1080 (16:9) | 1920x1080 (16:9) | 1:1 |
HD | 1440x1080 (4:3) | 1920x1080 (16:9) | 4:3 |
HD | 1280x 720 (16:9) | 1280x 720 (16:9) | 1:1 |
SD | 720x 480 (3:2) | 640x 480 (4:3) | 8:9 |
SDwide | 720x 480 (3:2) | 853x 480 (16:9) | 32:27 |
この PAR 値を --pixel-aspect で指定し、--custom-anamorphic をやめて --auto-anamorphic に変え、--display-width を削除する。
こうすると、HandBrake は PAR からアナモルフィックを自動計算して、正しいストレージサイズ・ディスプレイサイズの MP4 を生成してくれる。
たとえば SD ソースのワイド画面をエンコードしたい場合は、
HandBrakeCLI.exe -i "元ファイル.mpg" -o "生成ファイル.mp4" -Z "Fast 480p30" -f mp4 -e x264 -q 23 -r 29.970 --cfr -w 720 -l 480 --crop 0:0:0:0 --auto-anamorphic --pixel-aspect 32:27 --modulus 8 --decomb="default" -a 1 -E ffac3 -B 192 --mixdown stereo -R 48 -x :bframes=3:min-keyint=2:keyint=30:nal-hrd=vbr:bluray-compat=1
のようにコマンド指定すればよい(肝要な部分を赤文字で示した)。