ピクセルフォーマットは、画像や動画の生の画像データにおける各ピクセルの配置を表すものです。画像にどの色情報が含まれているかと、それぞれが何ビットを使用するかをアプリに伝えます。
動画のレポートでは、この項目はよく pix_fmt として表示され、値として yuv420p のようなものが示されます。このような値には、カラーモデル、クロマサブサンプリング、ビット深度が含まれます。色空間は別の項目です。
どのファイルがそれを持っているか
FFmpeg の ffprobe プログラムは、各動画ストリームの pix_fmt を一覧表示します。これは MP4、MOV、MKV、WebM ファイルを対象とします。
画像も値を持つことがあります。FFmpeg は、4:2:0 サンプリングの JPEG には yuvj420p を、8 ビット RGB の PNG には rgb24 を割り当てます。
カバーアート付きの音声ファイルでも、ピクセルフォーマットが報告されることがあります。FFmpeg はその画像を動画ストリームとして扱います。
ExifTool は、Windows HD Photo ファイル (HDP と WDP) から PixelFormat というタグを読み取ります。ここには 24-bit RGB や 8-bit Gray などの値が表示されます。
値の見え方
FFmpeg は、短い要素を組み合わせてこれらの名前を作成します。値 yuv420p10le には次の 5 つの要素があります。
yuv: カラーモデルです。Y は輝度で、U と V が色情報を表します。U と V は、YCbCr のように Cb と Cr とも呼ばれます。420: サンプリングです。色情報は輝度データの幅・高さの半分になります。p: planar (プレーナー) です。各成分が別々のプレーンになります。packed フォーマットでは、成分を 1 つの配列内にまとめて保持します。10: 各成分あたりのビット数です。値yuv420pはここに数値がなく、8 ビットを使用します。le: バイトオーダーを表し、little-endian です。末尾がbeの場合は big-endian を意味します。
一般的な値
以下の数値は、それぞれ生の画像データにおける 1 ピクセルあたりの平均ビット数です。
yuv420p: 12 ビット、色は幅と高さがそれぞれ半分yuv422p: 16 ビット、色は幅が半分yuv444p: 24 ビット、すべてのピクセルに色情報yuvj420p: 12 ビット、JPEG が使用するフルレンジでのyuv420pのレイアウトrgb24: 24 ビット、赤・緑・青が packedrgba: 32 ビット、透過用のアルファ値付きgray: 8 ビット、輝度のみpal8: 8 ビット、各値がパレットの色を指します
フルレンジでは、8 ビットの輝度は 0 から 255 までの範囲になります。リミテッドレンジでは、16 から 235 までになります。FFmpeg は、yuvj という名前の代わりに、レンジを示す別の項目を使うよう推奨しています。
値の由来
ストリームをエンコードするアプリが、ピクセルフォーマットを決定します。FFmpeg では、-pix_fmt オプションで指定します。
名前自体は、通常ファイル内には保存されません。読み取り側のアプリが、ファイルに保存された詳細情報から名前を組み立てます。
H.264 では、FFmpeg はストリームヘッダー内のビット深度とクロマフォーマットを使用します。PNG では、画像ヘッダー内のビット深度とカラータイプを使用します。
ファイルにとって重要な理由
ピクセルフォーマットは、生の画像データのサイズを決めます。rgb24 のフレームは 1 ピクセルあたり 24 ビット、yuv420p のフレームは 12 ビットです。コーデックはこのデータを圧縮するため、これらの数値は最終的なファイルサイズそのものを表すわけではありません。
ピクセルフォーマットは、ファイルにどれだけの色情報が保持されるかも決定します。人間の目は色よりも輝度の細部をはるかによく認識するため、4:2:0 でも見た目の劣化は小さくなります。
4:2:0 を 4:4:4 に変換すると、アプリは周囲のサンプルから欠けているサンプルを計算します。4:2:0 で間引かれた色情報が元に戻ることはありません。
H.264 のプロファイルも、この値を確認すべき理由の 1 つです。Main プロファイルと High プロファイルは、4:2:0 サンプリングの 8 ビットカラーに対応しています。
yuv444p や yuv420p10le の H.264 ストリームには、より高いプロファイルが必要です。Apple の HLS の仕様では、H.264 は High プロファイル以下である必要があります。YouTube はアップロード向けに、4:2:0 の High プロファイルを推奨しています。