ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AVFoundationを用いHDRメディアをAppでエクスポート
AVFoundationを使って、お持ちのAppでハイダイナミックレンジ(HDR)を作成し、エクスポートする方法を知ることができます。ハイダイナミックレンジ、およびお持ちのAppで有効活用する方法を学んでください。HDRコンテンツのエクスポートを可能にする特徴集合を導入し、HDRフォーマットを検査し、現在の制約を評価し、HDRエクスポートをサポートするAppleのプラットフォームを探し出します。
リソース
関連ビデオ
WWDC21
-
ダウンロード
こんにちは WWDCへようこそ “AVFoundationを用いHDRメディアを アプリケーションでエクスポート” こんにちは ケヴィン・マツムラです HDR映像をエクスポートするための シンプルな手順をご紹介します このセッションでは HDR映像の基本事項と エクスポートでサポートされる HDRフォーマットについて そして AVAssetExportSessionを 利用するシンプルな方法と HDRエクスポートで AVAssetWriterが提供する 柔軟性について見ていきます 最後に HDRエクスポートをサポートする Appleのプラットフォームをご紹介します それでは始めましょう HDRとは 映像のダイナミックレンジ すなわち明暗差の幅を SDR映像よりもさらに 拡張したものです これは 輝度値の大幅な向上により 実現されています
SDR映像では― 最大100カンデラ毎平方メートルに 制限されていました この単位は“nits”とも呼ばれます HDR映像では 最大10,000nitsに 対応でき― 2桁大きくなります
その分 白はより明るく 黒はより深い色で表現されます また HDRはコントラストが高いため シャドーはよりきめ細かく ハイライトは一層はっきりします ここまでがHDRの 技術的な全体像ですが HDRといえば広色域と ペアで捉えられることが多いです 色域は ダイナミックレンジと 組み合わせることで カラーボリュームを定義します つまり 表現できる色の 総数が決まります
輝度と色の範囲の大きさに 対応するために HDRは通常 高いビット深度とも 関連付けられます 配信メディアでは10ビットが一般的です HDRとは 要は伝達関数です 伝達関数で シーンの 線状の光がどのように 非線形のコード値に変換され 光に戻されるかを記述します このプロセス全体のゴールは 元のシーンの意図が ディスプレイまで届くよう 保持することです
光-電気伝達関数(OETF)は 撮影側 つまり エンコード側で シーンの光を コード値にマッピングします 電気-光伝達関数(EOTF)は ディスプレイ側 つまり デコード側で コード値から ディスプレイの光へと戻します EOTFは必ずしもOETFの 真逆とは限りません
HDRには2つの伝達関数が導入されました ハイブリッドログガンマ(HLG) 伝達関数は SDRとの後方互換性のために 設計されました このため HLGコンテンツは SDRディスプレイで表示できますが 100nitsを超えるピクセルは 縮約されてしまいます
HLGはシーン参照ですので エンコードされたコード値は 正規化されたシーンの光に相対的です 知覚量子化(PQ)伝達関数は 人間の視覚系の働きを基に 設計されました これは 特にコントラストの感度に ついて言えることです おなじみのPQ HDRフォーマットには ドルビービジョンやHDR10があります HDR伝達関数で HDR映像を 分類できますが 出力ビットストリームに 追加情報を挿入するのは HDRフォーマットです この追加情報によって― ここではHDRメタデータと 呼ぶことにしますが エンコードされたコード値から ディスプレイ光への― マッピングを向上させ デコーダーのEOTFに使用して マスタリングディスプレイと 使用中のディスプレイ環境との 差異を調整できます HDRメタデータの内容は 一般的に ストリーム シーン フレーム統計に 分類できます
メタデータなしの HDRフォーマットの例がHLGです 静的メタデータのフォーマットでは 動画全体で不変のデータを追加します HDR10がその例です 動的メタデータのフォーマットでは データはシーンごとに変化します ビデオフレームごとの場合もあります ドルビービジョンがそうです 動的メタデータを静的メタデータと 組み合わせることもできます HDRはよく広色域と関連付けられると 先ほどご説明しました この図は 色域の違いを 表しています 最初の三角形は BT.709とsRGBの色空間を表しています これらの色空間は元々 標準画質のテレビ放送向けに 開発されたものです 次に大きな三角形は P3色空間です デジタルシネマイニシアチブにより 映画業界向けに提唱されました P3はBT.709よりも微妙な色彩を 表現できます 最後の一番大きな三角形は BT.2020です これはもっと多くの色を表現できます BT.2020は超高精細テレビの 規格として開発されました 広色域は HDR伝達関数と 10ビットフォーマットとともに 生き生きとした映像で 元のシーンを表現します HDRの基本を理解して いただけたと思います エクスポートがサポートする HDRフォーマットを見ていきましょう AVFoundationは HLGとHDR10フォーマットをサポートします どちらも標準規格として 一般的なディスプレイに採用されています このことは HDRのメリットを ユーザーのディスプレイへと 確実にお届けするために重要な点です コンテンツを視聴するのが HDRをネイティブでサポートする Appleデバイス― たとえば iPhoneやiPad MacBookやiMacでも あるいは外付けの HDRモニターやテレビでも エクスポートした映像は HDRでレンダリングされます ところで AppleのHDRエクスポートの サポートは 専門家向けに 2017年に導入されていました 具体的には Final Cut Pro Xと Compressorです 今年 HDRエクスポートを 開発者の皆様にも公開します HDR映像コンテンツはこれまで ハイエンドの ビデオカメラに限定されていました 私たちは HDRコンテンツが 今後さらに普及すると考えます HDRをフル活用できるツールを ご提供したいと思います それでは 主なエクスポート インターフェイスを見てみましょう 皆様がよく扱うのは AVAssetExportSessionです AVAssetExportSessionは 最も一般的なエクスポートの インターフェイスです ファイルトランスコーデイング ワークフローを使用して ひとつのアセットを共有ユースケースに シンプルにエクスポートします 編集したいときは AVCompositionで複数の トラックセグメントを一時的に結合するか AVVideoCompositionで空間コンポジションを 実行してからエクスポートします
AVAssetExportSessionによって エクスポートがシンプルになります AVAssetExportSessionは プリセットベースです プリセットに 出力エンコーディング パラメータの内容を定義します あとは AVAssetExportSessionが 処理してくれます 必要に応じて 色空間変換や ダウンスケーリング フレームレート変換が行われます AVAssetExportSessionが提供する プリセットには― H.264 HEVC そして Apple ProResコーデック用があります 各種の最大ビデオ解像度に 対応するプリセットや 一部のプリセットでは 映像品質レベルを 選択できます AVAssetExportSessionのシンプルさを コードスニペットでお見せします まず エクスポートセッションを ソースアセットとプリセットで作成します ここでは HEVCHighestQuality プリセットを選択しています 次に 出力ファイルの名前を URLと出力ファイルタイプとして指定します できました 最小のケースでは エクスポートに必要なのはこれだけです HDR映像のエクスポートを AVAssetExportSessionで行うために 何か変更する必要は? もうお分かりですね 何の変更も必要ありません HEVCまたはApple ProResプリセットを 使えばよいのです HEVCプリセットは ソースのHDRフォーマットを 保持するようアップグレードされています
たとえば HDR10ソースアセットは HDR10として HLGはHLGとしてエクスポートされ SDRソースアセットも SDRとしてエクスポートされます
Apple ProResプリセットも ソースのHDRフォーマットを保持します
HDRからSDRへの変換には H.264プリセットの使用を お勧めします 後方互換性も最大限に 保てます コンポジションは 時間 空間のいずれも ダイナミックレンジ形式が混在する場合に 追加の処理が必要です
HDRとSDRのコンテンツが 混在するケースを考えてみましょう
AVAssetExportSessionは 全てのソースアセットを検査し HDRコンテンツを検索します HDRコンテンツが見つかると エクスポートファイルはHDRに コンポジションにSDRアセットがあれば HDRに変換されます
異なるHDRフォーマットが混在する場合 エクスポートのデフォルトポリシーは HLGをPQフォーマットよりも優先します AVAssetExportSessionが 適切な変換を PQとHLGの間で行います
微調整が必要な場合 エクスポートは メタデータありのHDRフォーマットを メタデータなしよりも優先します ご説明したエクスポートのコンポジションを 見やすくすると この表になります 最初の行と列のとおり HDRはSDRよりも優先されます 2番目の行と列のとおり HLGはPQよりも優先されます このロジックは ソースアセットの数が いくつあっても拡張できます AVAssetExportSessionで 開発者のニーズの多くが満たされるでしょう しかし いつもそうとは限りません そこで AVAssetWriterの出番です AVAssetWriterで 一般的な 2つのワークフローを説明します
最初のワークフローは AVAssetReaderでサンプルを読み込みます 編集は AVCompositionや AVVideoCompositionでしておきます AVAssetWriterでエクスポートします
次のワークフローは AVAssetWriterを使って カメラで撮影したフレームを エクスポートするアプリケーションです AVAssetWriterを使えば エクスポートプロセスを完全に制御できます ビデオコーデックは明示的に指定できます 使用するビットレート エクスポートする映像のフレームレート ビデオフレームの正確なサイズ 色空間やダイナミックレンジもです 複数のビデオエンコーダーのあるMacでは どのビデオエンコーダーを使用して エクスポートするかも指定できます
もちろん これが全てではありませんが よくあるパラメータの設定について 理解していただけるかと思います AVAssetWriterは 多くの制御を提供しますが ここでは 設定プロセスをシンプルにできる 2つの方法をご説明します AVAssetWriterを呼び出す 最もシンプルなコードスニペットです まず AssetWriterを 出力URLとファイルタイプで生成します 次に outputSettingsディクショナリが必要です これがエクスポートの全てを制御します ただし ここで使用する AVAssetWriterInputインターフェイスは sourceFormatHintを ソースのvideoFormatDescriptionの 形式で取ります この場合 outputSettings ディクショナリの唯一の必須キーは ビデオコーデックタイプです AVAssetWriterは残りのパラメータの 適切なデフォルトを ヒントの中の ソースのvideoFormatDescriptionに 基づき構築します 次のコードスニペットでは AVAssetWriterを AVOutputSettingsAssistantで 設定する方法を示します AVOutputSettingsAssistantは 選択可能なプリセットを提供します AVAssetExportSessionと同じです プリセットのテンプレートディクショナリを 直接使うか もしくは― これを元に AVAssetWriterInputを設定します
ここでは HEVC1920x1080サイズの プリセットを選択しています また 強くお勧めするのが ソースの― videoFormatDescriptionを “settingsAssistant”に設定してから videoSettingsを取得することです sourceVideoFormatにより AVOutputSettingsAssistantは ソースの特性を プリセットと結合できます これで 返される設定は AVAssetExportSessionの エクスポートと非常によく似た ものになります これらの設定で十分な 可能性が高いです その場合 設定をそのまま AVAssetWriterInputに渡します しかし ここで設定を変更したい こともあります たとえば 出力ビデオサイズや ビットレートの変更などです それでは 各種キーについて AVAssetWriterInputの outputSettingsディクショナリ内で HDRに関連するキーをご説明します 設定で考慮する 3つのキーがあります HDRを扱うときに必要です ビデオコーデック カラープロパティ 圧縮プロパティです それぞれ 詳しく見ていきましょう AVVideoCodecKeyです AVFoundationでHDRのコーデックは HEVCとApple ProResです HEVCはHDRで非常によく使われる 配信フォーマットです HEVCは圧縮効率が高く 扱いやすいファイルサイズに エクスポートされます Apple ProResは中間ファイル形式で 専門的なビデオワークフロー用です AVVideoColorPropertiesKeyは 3つのキーを持つディクショナリです 伝達関数 カラープライマリ YCbCrマトリックスです 伝達関数はすでにご説明しました HLGとPQ 2つの HDR伝達関数がサポートされます
ColorPrimariesKeyは 通常 広色域フォーマットに設定します HDRコンテンツでは BT.2020が一般的です
YCbCrMatrixKeyは 色表現を YUVとRGBの間で 変換する方法を表します BT.2020非定輝度が HDRで一般的に用いられます
AVVideoCompressionPropertiesKeyは 出力設定で変更するほとんどの キーを含むディクショナリです HDRに関係する唯一のキーが VideoProfileLevelKeyです HEVC_Main10_AutoLevelに 設定することが HEVCコーデックでの HDRエクスポートには必須です 8ビットHEVC HDRは サポートされません ProResエクスポートには このキーを適用できません
ここまでの設定方法を まとめてみます 一般的なHDRフォーマットに 出力するキーの設定です HLGとHDR10の2種類です この表は HLGファイルのエクスポートに 関係するHDR設定を示します コーデックはHEVC またはApple ProResとします カラープライマリとYCbCrマトリックスは 任意に指定できますが 通常は両方とも ITU_R_2020に設定します HLGファイルを出力するので 伝達関数はもちろんHLGです HEVCコーデックとした場合は ProfileLevelを HEVC_Main10_AutoLevelにします HDR10をやってみましょう こちらは少々複雑です 先ほどと同様 コーデックタイプは HEVCまたはApple ProResです HDR10は一般的に HEVCベースですが ProResアセットの定義にも HDR10を使います MasteringDisplayColorVolumeと ContentLightLevelInfoを指定します もう少し見てみます HLGのケースと同じく カラープライマリとマトリックスは 通常 ITU_R_2020に設定します 伝達関数はPQにしなければなりません ここでも ProfileLevelを HEVC_Main10_AutoLevelとして HEVC HDR10エクスポートを行います
最後に HDR10では2つのオプションキーも 指定することをお勧めします これらのキーをご説明します マスタリングディスプレイカラーボリューム (MDCV)は コンテンツがマスタリングされた ディスプレイを記述するものです コンテンツ光レベル情報 (CLLI)は 動画全体の光レベルについての 情報を提供します
両方とも値を指定するのが 理想的です デコーダーのEOTFでより正確に HDRレンダリングできます 指定しなければ デコーダーのEOTFは デフォルトを使用しますので 意図に沿わないかもしれません MDCVとCLLIの SEIメッセージフォーマットは こちらの参照ISO規格で 定義されています ここで HDRエクスポートを サポートする Appleプラットフォームについて お話しします iOSはHEVCハードウェア エンコーディングをサポートします Apple A10 Fusionチップ搭載 デバイス以降です 幸い A10デバイスは発売から しばらく経過しています 2018年にリリースされた iPhone 7やiPadまで対象です 2019年のiPod touchもそうです
Macについては HEVCとApple ProResソフトウェア エンコーダーが全てのMacで利用できます HEVCハードウェアエンコーディングは 通常では 新しいmacOSが動作する 2017年以降のMacで利用できます ハードウェアエンコーディングでは エクスポートが大幅に速くなります それでは まとめに入ります 今回は HDRについての概要と HDRの設計よって 元のシーンの意図が保持され ディスプレイに届くことを 見てきました 高ダイナミックレンジにより HDR映像は より明るい白と より深い黒 繊細なシャドーとハイライトを 表現します HDR映像のメリットを 全て活かすために 生き生きとしたHDRコンテンツのまま エクスポートしなければなりません 手順はシンプルです 他のエクスポートと同じく AVAssetExportSessionまたは AVAssetWriterを使用します HEVCかApple ProResコーデック またはプリセットを選択します
AVAssetWriterでは 伝達関数を HLGまたはPQにすることをお忘れなく ビデオプロファイルレベルを明示的に HEVC_Main10_AutoLevelにセットし HEVC HDRエクスポートを行います 最後は 広色域の使用です なるべくITU_R_2020にします HDRに関する補足情報はこちらです なお 本セッションと連携する セッションでは HDRの編集と AVFoundationでの再生を扱います
ご視聴 ありがとうございました 引き続き WWDC 2020をお楽しみください
-
-
9:02 - AVAssetExportSession Intro
// AVAssetExportSession code snippet guard let exportSession = AVAssetExportSession(asset: sourceAsset, presetName: AVAssetExportPresetHEVCHighestQuality) else { // Handle error } exportSession.outputURL = outputURL exportSession.outputFileType = AVFileTypeQuickTimeMovie exportSession.exportAsynchronouslyWithCompletionHandler { // Handle completion }
-
13:24 - AVAssetWriter with sourceFormatHint
// AVAssetWriter with sourceFormatHint let assetWriter = try AVAssetWriter(url: outputURL, fileType: AVFileTypeQuickTimeMovie) let outputSettings: [String: AnyObject] = [ AVVideoCodecKey: AVVideoCodecTypeHEVC ] let assetWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: outputSettings sourceFormatHint: videoFormatDescription) assetWriter.add(assetWriterInput) guard assetWriter.startWriting() else { throw assetWriter.error! }
-
14:13 - AVAssetWriter with AVOutputSettingsAssistant
// AVAssetWriter with AVOutputSettingsAssistant let assetWriter = try AVAssetWriter(url: outputURL, fileType: AVFileTypeQuickTimeMovie) let settingsAssistant = AVOutputSettingsAssistant( preset: AVOutputSettingsPreset.hevc1920x1080) settingsAssistant.sourceVideoFormat = videoFormatDescription let newVideoSettings = settingsAssistant.videoSettings // Modify a few fields in newVideoSettings here let assetWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: newVideoSettings) assetWriter.add(assetWriterInput) guard assetWriter.startWriting() else { throw assetWriter.error! }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。