一つのバイナリで 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 を設定する。

FFmpeg Bitstream Filters Documentation : 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素材のエンコード例。
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

Preserving HDR metadata when transcoding – Doom9’s Forum より、Side data は現状コピーできない。

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

コメントを残す

メールアドレスが公開されることはありません。

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