いわゆるcolor primaries、color transfer characteristics、color spaceの扱いについて。解像度とフレームレートに関わるPAL、NTSC。解像度に関わるSD、HD、UHD。輝度のダイナミックレンジに関わるSDR、HDRなどの組み合わせで最適なオプションを指定する。これらのオプションはYUVの映像をRGBのモニターに正しく、指定した設定で表示するものである。それぞれの設定の効果については正確なことが言えないのでここでは触れない。
外部サイトの解説
- ColourSpace | Perceptual Colour Match
- ColorManagement | TVLogic
- カラーコレクション | 映像編集のソフトウェアEDIUS(エディウス)の総合サイト
- Let’s HDR! Vol.1 「そもそもHDRって何?」 | 映像編集のソフトウェアEDIUS(エディウス)の総合サイト
- よくわかる、HDR徹底解説! HDRとは | EIZO株式会社
- FFmpegで指定できるカラープロパティのメモ:いえののブロマガ – ブロマガ : archive.org
- FFmpegで指定できる輝度の伝達特性の一覧 – Qiita
ffmpeg Documentation : Codec Optionsの下の方にある。それぞれ入力、出力オプションになるので入力ファイルの前、入力ファイルの後ろ(出力ファイルの前)に指定する。入力オプションで使うときはファイルにメタデータが付いてないときである。
まとめ:色関係の設定のまとめ
基本コマンド
ffmpeg -i input
yuv422p10le(tv, bt2020nc/bt2020/arib-std-b67, progressive)
例えばこのように表示されれば以下のような順番になる。
pix_fmt(color_range, colorspace/color_primaries/color_trc, field_type)
colorspace/color_primaries/color_trcが一致すれば1つだけ表示する。
これらの情報はshowinfo
フィルタでも表示される。
ffplay -i input -vf showinfo
フレーム、サンプル単位で情報を得るshowinfo、ashowinfo
1フレーム毎に以下のようにコンソールに表示される。以下は抜粋したもの。
color_range:tv color_space:bt709 color_primaries:bt709 color_trc:bt709
ffprobeで調べるなら以下のようになる。
ffprobe -v error -f lavfi -i movie=input.mp4,showinfo -select_streams v:0 -show_frames -show_entries frame=color_range,color_space,color_primaries,color_transfer -read_intervals %+#1
ウェブカメラやテストソース、画像などを読み込んだときや未設定の動画を未設定でエンコードすると色の情報はunknownで不明になる。入力時点で未設定のときには入力オプションで指定し、エンコードして最終的にデータを書き込むなら出力オプションで指定する。
一般的なNTSC SD動画に入力オプションと出力オプションをすべて指定した例。
ffmpeg -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m -color_range tv -i input -pix_fmt yuv420p -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m -color_range tv -c:a copy output
一般的なPAL SD動画に入力オプションと出力オプションをすべて指定した例。
ffmpeg -color_primaries bt470bg -color_trc smpte170m -colorspace smpte170m -color_range tv -i input -pix_fmt yuv420p -color_primaries bt470bg -color_trc smpte170m -colorspace smpte170m -color_range tv -c:a copy output
一般的なHD動画に入力オプションと出力オプションをすべて指定した例。
ffmpeg -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -i input -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -c:a copy output
HDR10動画に入力オプションと出力オプションをすべて指定した例。
ffmpeg -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -i input -pix_fmt yuv420p10le -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -c:a copy output
出力オプションの代わりにH.264、HEVC、VP9、AV1、Proresはビットストリームフィルタで書き込むこともできる。
ビットストリームフィルタのまとめ
オプション
- -color_primaries:プライマリー、色域、ガマット。色彩に影響する
- bt709
- bt470m:旧式のNTSC
- bt470bg:Rec.601と同等でPAL、SECAM
- smpte170m:smpte240mとメタデータの値は異なるが機能的には同じ。NTSCではRec.601に相当する
- smpte240m:smpte170mとメタデータの値は異なるが機能的には同じ。NTSCではRec.601に相当する
- film
- bt2020
- smpte428, smpte428_1
- smpte431:DCI-P3
- smpte432:Display P3(DCI-P3にD65ホワイトポイント)
- jedec-p22
- -color_trc:伝達特性、伝達関数、ガンマ。明るさに影響する
- bt709
- gamma22:bt470m。旧式のNTSCでガンマ2.2
- gamma28:bt470bg。旧式のPALでガンマ2.8
- smpte170m
- smpte240m
- linear
- log, log100:100:1レンジの対数
- log_sqrt, log316:100*Sqrt(10):1レンジの対数
- iec61966_2_4, iec61966-2-4:xvYCC
- bt1361, bt1361e
- iec61966_2_1, iec61966-2-1:sRGB、sYCC
- bt2020_10bit:bt2020_10
- bt2020_12bit:bt2020_12
- smpte2084:ITU BT.2100 PQ (Perceptual Quantization)
- smpte428, smpte428_1
- arib-std-b67:BT.2100 HLG, ARIB STD-B67
- -colorspace:カラー マトリックス係数。RGBとYUVのカラースペース間の変換
- rgb
- bt709
- fcc:US FCC 73.628
- bt470bg:Rec.601と同等でPAL、NTSC、SECAM
- smpte170m
- smpte240m
- ycocg
- bt2020nc, bt2020_ncl:BT.2020 non-constant luminance, BT.2100 YCbCr
- bt2020c, bt2020_cl:BT.2020 constant luminance
- smpte2085:SMPTE ST 2085 YDzDx
- -color_range:カラーレンジ
- tv, mpeg:リミテッドレンジ
- pc, jpeg:フルレンジ
- -chroma_sample_location:デコード、エンコード時のクロマサンプルロケーション
- left
- center
- topleft
- top
- bottomleft
- bottom
オプション設定の目安
解像度とフレームレート、ダイナミックレンジの目安。解像度は縦のピクセル数。
- SD:720未満
PAL:bt470bg、bt601
NTSC:bt470m、fcc、smpte170m、bt601 - HD:720以上2160未満
PAL:smpte240m、bt709
NTSC:smpte240m、bt709 - UHD:2160以上
PAL:bt709、bt2020
NTSC:bt709、bt2020 - ダイナミックレンジ
SDR:bt601、bt709、bt2020(シン・エヴァンゲリオンがUHD SDR)
HDR:bt2100、smpte2084
1024×576以下はBT.601 、1024×576より大きければBT.709。
[Ffmpeg-devel-irc] ffmpeg.log.20180226
フルレンジからの変換
フルレンジからリミテッドレンジに変換するときはフィルタで変換するか、-pix_fmt yuv420pなどで求めるリミテッドレンジに変換する。色の情報やレンジ情報が不明(未指定)のときは適宜指定する。
ffmpeg -i input -vf scale,format=yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv output
ffmpeg -i input -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv output
フルレンジからトランスコードでフルレンジのまま変換するにはレンジを明示する。yuv420pを指定しているがフルレンジフラグがつくのでyuvj420pになる。
ffmpeg -i input -vf scale=in_range=full:out_range=full,format=yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range pc output
ffmpeg -i input -vf scale=in_range=full:out_range=full -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range pc output
フルレンジフラグのついている10ビット深度以上のYUV映像。フルレンジフラグがついたままのyuv420p10leになる。
ffmpeg -i input -vf scale=in_range=full:out_range=full,format=yuv420p10le -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range pc output
ffmpeg -i input -vf scale=in_range=full:out_range=full -pix_fmt yuv420p10le -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range pc output
FFMPEG 10bit output video colour difference – VideoHelp Forum
ピクセル値はoscilloscope
フィルタで確認できる。
ffplay -f lavfi -i yuvtestsrc=s=960x720:d=10 -vf oscilloscope=s=1:tw=1:y=0.2
ffplay -f lavfi -i yuvtestsrc=s=960x720:d=10 -vf oscilloscope=s=1:tw=1:y=0.5
ffplay -f lavfi -i yuvtestsrc=s=960x720:d=10 -vf oscilloscope=s=1:tw=1:y=0.8
直線上の YUV, RGB の値を表示する oscilloscope
リンクのまとめ
- PAL – Wikipedia
- NTSC – Wikipedia
- Rec. 601 – Wikipedia
- Rec. 709 – Wikipedia
- Rec. 2020 – Wikipedia
- Rec. 2100 – Wikipedia
- H.264 : Advanced video coding for generic audiovisual services
- H.265 : High efficiency video coding
- The WebM Project | VP9 Video Codec Summary
- x264 – Color Matrix settings – Doom9’s Forum
- ffmpeg: explicitly tag h.264 as bt.601, rather than leaving unspecified? – Video Production Stack Exchange
- HDRTools vs DitherTools vs ColorMatrix – Page 3 – Doom9’s Forum
- Color Metadata DCI-P3 : ffmpeg
- Docs/Parameters.md · master · Alliance for Open Media / SVT-AV1 · GitLab
- HDR Production: Choosing Format Conversion Look-Up Tables – BBC R&D
- High Dynamic Range Television and Hybrid Log-Gamma – BBC R&D
- Guidance for operational practices in HDR television production
- High Dynamic Range Metadata : pdf
- Ultra HD Forum Guidelines : pdf
- Dolby Vision™ for the Home : pdf
- An Introduction to Dolby Vision – web.archive.org : pdf
- Dolby Vision Profiles and Levels Version 1.3.3 Specification
- What is Color Matrix, Primaries, and Transfer? – Doom9’s Forum
- Full Levels and Video Levels Explained! – The Post Process
[…] 色の情報の扱いについて | ニコラボ […]