🐥

Incorporating HDR video with Dolby Vision into your apps

2024/06/17に公開

この記事について

この記事はApple - AVFoundationの記事をまとめたものです
https://developer.apple.com/av-foundation/

Dolby Vision HDRビデオをアプリに取り入れる

iPhone 12モデルはDolby VisionによるHDRビデオの録画に対応しており、アプリでHDRビデオをキャプチャ、再生、編集、エクスポートすることが可能です。これを活用するために、iOS 14.1以降が必要です。

HDRビデオのプレビューと編集

Dolby Visionは動的メタデータをビデオに追加し、各フレームやシーンの動的範囲などの重要な情報をキャプチャします。このメタデータは、ビデオの見た目を最適に保つために必要です。アプリで編集およびプレビューのワークフローを持つ場合、以下の点に注意する必要があります。

HDRビデオはDolby Visionプロファイル8、クロスコンパチビリティID 4(HLG)形式です。これは既存のHEVCデコーダがHLGとしてデコードできるように設計されています。コーデックタイプはHEVC(10ビット)です。Dolby Vision 8.4対応のデコーダは、Dolby Visionとしてデコードし、追加のフレームごとのメタデータで視聴体験を向上させます。

編集中のプレビュー

編集中のプレビューシナリオでは、ピクセルを変更することがあり、その場合、既存の動的メタデータが無効になります。プレビューシナリオでは無効なメタデータを削除するために、次のAPIを使用します。

Dolby Visionメタデータの適用を無効にするには、appliesPerFrameHDRDisplayMetadataプロパティをNO(Objective-C)またはfalse(Swift)に設定します。

// Swiftでの設定例
playerItem.appliesPerFrameHDRDisplayMetadata = false

低レベルでは、VTDecompressionSessionを使用している場合、kVTDecompressionPropertyKey_PropagatePerFrameHDRDisplayMetadataプロパティを使用してDolby Visionトーンマッピングを無効にできます。

// Objective-Cでの設定例
VTSessionSetProperty(decompressionSession, kVTDecompressionPropertyKey_PropagatePerFrameHDRDisplayMetadata, kCFBooleanFalse);

ビデオコンポジション

Dolby Vision 8.4ビデオを編集するためにAVVideoCompositionを使用する場合、デフォルトではビデオコンポジションはHLGになります。ビデオフレームがコンポジターに到達すると、フレームごとのメタデータは無効になるため、削除されます。

カスタムコンポジターを使用する場合、HDRをサポートし、supportsHDRSourceFramesプロパティでフレームワークにHDRサポートを示す必要があります。カスタムコンポジターは10ビットのピクセル形式で動作し、sourcePixelBufferAttributesおよびrequiredPixelBufferAttributesForRenderContextプロパティでそれらを発表します。

// AVVideoCompositing.hでの設定例
@optional
@property (nonatomic, readonly) BOOL supportsHDRSourceFrames;

HDRビデオのエクスポート

Dolby Vision 8.4ビデオをエクスポートするには、AVAssetExportSessionおよびAVAssetWriterを使用します。すべてのHEVCプリセットはHDRをサポートするようにアップグレードされています。ソースがDolby Vision 8.4である場合、エクスポートされたムービーもDolby Vision 8.4になります。出力形式を変更する必要がある場合は、AVAssetWriterを使用します。

H.264プリセットはHDRをSDRに変換します。

AVAssetWriterを使用してDolby Vision 8.4をエクスポートする場合、対応する出力形式および色属性を選択し、10ビットプロファイルレベルを設定します。さらに、次のキーと値のペアをビデオ出力設定に指定します。

let videoOutputSettings: [String: Any] = [
    AVVideoCodecKey: AVVideoCodecType.hevc,
    AVVideoProfileLevelKey: kVTProfileLevel_HEVC_Main10_AutoLevel,
    AVVideoColorPropertiesKey: [
        AVVideoColorPrimariesKey: AVVideoColorPrimaries_ITU_R_2020,
        AVVideoTransferFunctionKey: AVVideoTransferFunction_ITU_R_2100_HLG,
        AVVideoYCbCrMatrixKey: AVVideoYCbCrMatrix_ITU_R_2020
    ],
    AVVideoCompressionPropertiesKey: [
        kVTCompressionPropertyKey_HDRMetadataInsertionMode: kVTHDRMetadataInsertionMode_Auto
    ]
]

HDRビデオの再生

Dolby Visionビデオの再生は、AVPlayerおよびAVSampleBufferDisplayLayerを通じてサポートされます。Dolby Vision 8.4ビデオを再生する場合、クライアントコードから追加の設定は不要です。AVFoundationフレームワークがHDR再生パイプラインを設定し、Dolby Vision 8.4レンダリングを自動的に処理します。

HDRビデオをSDRビデオに変換する

アプリがHDRワークフローに対応していない場合、HDRビデオをSDRビデオに変換するオプションがあります。この変換はAVFoundation APIを通じて行われ、オリジナルの色をできるだけ忠実に再現します。

HDRをSDRに変換する際には、色空間変換とビット深度変換を行います。色空間変換にはBT.709を設定します。

let videoOutputSettings: [String: Any] = [
    AVVideoColorPropertiesKey: [
        AVVideoColorPrimariesKey: AVVideoColorPrimaries_ITU_R_709_2,
        AVVideoTransferFunctionKey: AVVideoTransferFunction_ITU_R_709_2,
        AVVideoYCbCrMatrixKey: AVVideoYCbCrMatrix_ITU_R_709_2
    ]
]

まとめ

  • iPhone 12でのDolby Visionビデオ録画はHDRをサポートし、優れたコントラストと色を提供します。
  • AppleのプラットフォームはDolby Vision動的メタデータを自動的に処理します。
  • HDRビデオの再生にはAVPlayerAVSampleBufferDisplayLayerを使用します。
  • HDRビデオをSDRに変換する際は、AVFoundation APIを使用して最適な色再現を確保します。

詳細情報については、以下のリソースを参照してください。

  • AVFoundationでHDRメディアをエクスポートする
  • AVFoundationでHDRビデオを編集および再生する
  • Dolby Visionのプロファイルとレベル
  • ISOベースメディアファイル形式内のDolby Vision

Discussion