ffmpeg:未指定のままにするのではなく、h.264をbt.601として明示的にタグ付けしますか?


12

「未指定」ではなく、明示的にbt.601としてビデオにタグを付けたい。プレーヤーは通常、幅が1280ピクセル未満のビデオのデフォルトとしてbt.601を選択することを知っていますが、bt.601がビデオの正しいカラーマトリックスであることを明示的にしたいと思います。

問題は、bt601ffmpegや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のエイリアスですか、それとも数値的に同等のカラーマトリックスがありますか?


まったく同じ問題があります。BT.601でタグ付けされたh264 HDフッテージを取得するために使用するコマンドラインを理解しましたか?
キャスパー

@キャスパー:はい、正しいオプションを調べるための情報が豊富だったので、ムルビアの答えを受け入れました。適切なオプションを明示的に含めるように編集しました(たとえば、NTSCはです-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m)。
Peter Cordes

回答:


12

PALとNTSCでは原色が異なるため、

NTSC = SMPTE 170M = BT 601 525

PAL = BT 470 BG = BT 601 625

アクティブH.264 標準の 387ページの表にある値5および6の行を参照してください。


したがって、ffmpegの正しい引数は次のとおりです。

NTSC:

# NTSC
ffmpeg -i input  \
 -colorspace smpte170m -color_primaries smpte170m -color_trc smpte170m

mediainfo:
Color primaries                          : BT.601 NTSC
Transfer characteristics                 : BT.601
Matrix coefficients                      : BT.601

PAL:

-color_trc受け付けませんbt470bgが、ffmpeg -h full表示されていることgamma28、そのオプションのための手段「BT.470 BG」。

# PAL
ffmpeg -i input  \
 -colorspace bt470bg -color_primaries bt470bg -color_trc gamma28

mediainfo:
Color primaries                          : BT.601 PAL
Transfer characteristics                 : BT.470 System B, BT.470 System G
Matrix coefficients                      : BT.601

-colorspace最も重要なオプションです。他のものはmpv、Linuxのようなソフトウェアプレーヤーにとって目に見える違いはありません。


もちろんです。私はbt601ウィキペディアのページを見ていても、2つの行があるテーブルからヒントを得ることができませんでした。ダープ。
Peter Cordes

HandBrakeでこれと同じ設定を行う場合は、[ビデオ]タブの[追加オプション]編集ボックス内に次の文字列を入力します: "colorprim = smpte170m:transfer = smpte170m:colormatrix = smpte170m"
pcunite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.