Incorporating HDR video with Dolby Vision into your apps
この記事について
この記事はApple - AVFoundationの記事をまとめたものです
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ビデオの再生には
AVPlayer
やAVSampleBufferDisplayLayer
を使用します。 - HDRビデオをSDRに変換する際は、
AVFoundation
APIを使用して最適な色再現を確保します。
詳細情報については、以下のリソースを参照してください。
- AVFoundationでHDRメディアをエクスポートする
- AVFoundationでHDRビデオを編集および再生する
- Dolby Visionのプロファイルとレベル
- ISOベースメディアファイル形式内のDolby Vision
Discussion