khurata’s blog

khurata’s blog

HandBrake の PAR まわりについて

 ウチでは HandBrakeCLI の簡易的な GUI ラッパーを HTAJScript で自作して 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

のようにコマンド指定すればよい(肝要な部分を赤文字で示した)。