「未指定」ではなく、明示的にbt.601としてビデオにタグを付けたい。プレーヤーは通常、幅が1280ピクセル未満のビデオのデフォルトとしてbt.601を選択することを知っていますが、bt.601がビデオの正しいカラーマトリックスであることを明示的にしたいと思います。
問題は、bt601
ffmpegやlibx264 にはオプションがなく、bt709とその他のオプションのみであるということです。
HDからダウンスケールされたビデオがいくつかありますが、まだbt.709のままですが、適切にタグ付けされていません。そのため、ビデオを見るときに、プレーヤーを手動でbt.709に切り替える必要がある場合があります。bt.601として明示的にタグを付けると、将来の視聴者(たとえば、私)に、それがbt.601であることは間違いありませんmediainfo
。
これのもう1つの使用例は、(を使用して-vf colormatrix
)カラーマトリックス変換を行わずにbt.601ビデオを1280以上に拡大した場合、色情報を指定しないままにしておくと、プレーヤーはbt.709を誤って想定します。
FFMpegのcolormatrix
ビデオフィルターはbt601
、入力または出力のカラーマトリックスとしてサポートしますが、タグも設定しません。(ffmpegのカラーオプションを設定する副作用がないため、のようにsrcとdestで操作することさえ拒否されてい-vf colormatrix=bt601:bt601
ます。)
ffmpg in -color_primaries bt709 -color_trc bt709 -colorspace bt709 out
出力ビデオに、yuv <-> rgbのbt.709を使用するタグを付けます。タグは、コンテナー内だけでなく、ビデオビットストリーム自体の内部にあります(これは、少なくともmp4およびmkvコンテナーでは、コンテナー固有のものではなく、コーデック固有のもののようです)。
例:mediainfo
出力:
Complete name : out.mkv
...
Writing application : Lavf57.14.100
Writing library : Lavf57.14.100
Video
ID : 1
Format : AVC
...
Writing library : x264 core 148 r2638+4 afcf21c
Encoding settings : cabac=1 / ref=8 / ...
Language : English
Default : Yes
Forced : No
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
したがって、bt.709のタグ付けは簡単です。問題は、bt.601がどこにも見当たらないことです。他の名前の1つがそのエイリアスですか、それとも明示的に指定する方法はありませんか?
x264 --fullhelp output:
--colorprim <string> Specify color primaries ["undef"]
- undef, bt709, bt470m, bt470bg, smpte170m,
smpte240m, film, bt2020
--transfer <string> Specify transfer characteristics ["undef"]
- undef, bt709, bt470m, bt470bg, smpte170m,
smpte240m, linear, log100, log316,
iec61966-2-4, bt1361e, iec61966-2-1,
bt2020-10, bt2020-12
--colormatrix <string> Specify color matrix setting ["???"]
- undef, bt709, fcc, bt470bg, smpte170m,
smpte240m, GBR, YCgCo, bt2020nc, bt2020c
ffmpeg -h full
は、ffmpegの-c:v libx264
ビデオコーデックがx264に渡すカラーオプションと同じオプションセットを示しています。これらのいずれかはbt.601のエイリアスですか、それとも数値的に同等のカラーマトリックスがありますか?
-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m
)。