一つのバイナリで 8, 10 ビット深度の両方に対応した。それに伴って ffmpeg も両方エンコードが出来るようになった。ただし古い ffmpeg を利用するとエラーが出るので master を利用する。

対応コミット
git.videolan.org Git – x264.git/commitdiff : Unify 8-bit and 10-bit CLI and libraries
git.videolan.org Git – ffmpeg.git/commitdiff : x264: Support version 153

x264 のビルドにはオプション指定しなくても複数のビット深度に対応している。

ソースコード配布先
x264, the best H.264/AVC encoder – VideoLAN
git clone https://git.videolan.org/x264.git

x264 の出力方法はオプションに--output-dept 10を追加する。追加しなければ 8bit深度になる。ffmpeg の出力方法はYUV420ならば出力オプションにpix_fmt yuv420p10leを追加する。追加しなければ 8bit深度になる。

色空間を明示する場合は H.264 だとbsf:v h264_metadataを設定する。

ビットストリームフィルタのまとめ

colour_primaries, transfer_characteristics, matrix_coefficientsの値。ただし colorprim, colormatrix の 9 は bt2020, bt2020nc になるが、transfer の 9 は log100 になる。x265 と同じ内容になるので公式ドキュメントを参照する。

1 : BT.709
6 : BT.601(smpte170m)

4K 10bit HDR PQ素材のエンコード例。
ffmpeg -i input -vcodec libx264 -x264-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc" -bsf:v h264_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9 -acodec copy -pix_fmt yuv420p10le output.mp4

x264 core 155 r2893 b00bcaf より既定値のオプションの違いはqpmaxが 8bit なら 69 なのが、10bit なら 81 になる。

ちなみに libx265 なら。
ffmpeg -i input -vcodec libx265 -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc" -bsf:v hevc_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9 -acodec copy -pix_fmt yuv420p10le output.mp4

master-displayなどは-x265-paramsのオプションで指定する。
hdr-opt=1:repeat-headers=1:master-display="G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(12000000,200)":max-cll=1000,400

x264 と ffmpeg の libx264 との対応は以下を参照

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)