← すべての記事

AVFoundation HDR と Apple Log:iPhone でのプロビデオワークフロー

iPhone 15 Pro 以降は、標準の HEVC および Apple ProRes コーデックと並んで Apple Log を記録でき、AVFoundation は AVCaptureDeviceAVCaptureSession を通じて、対応したいアプリにプロビデオスタック全体を提供します1。同フレームワークの HDR 側では、AVPlayer.HDRMode を介して HLG、HDR10、Dolby Vision をサポートし、さらに AVKit を通じた EDR としてのビデオ表示も可能です。キャプチャと表示という 2 つの要素は、コーデックの選択、色空間メタデータ、グレーディングアプリへのポストプロダクション受け渡しを通じてつながっています。

本記事では、Apple のドキュメントを踏まえながら、プロビデオ向けの AVFoundation の機能を解説していきます。「映像作家、ビデオエディター、HDR を意識したアプリのために、アプリが何を露出すべきか」という観点で整理しています。フレームワークのプロビデオ機能はドキュメント化されているものの宣伝はされておらず、その恩恵を受けられるはずのアプリの多くがそれらを露出していないからです。

TL;DR

  • AVFoundation は 3 つの HDR 配信フォーマットをサポートしています:HLG(Hybrid Log-Gamma)、HDR10、Dolby Vision。iOS 26 では、推奨されるチェック方法としてよりシンプルな AVPlayer.eligibleForHDRPlayback Boolean が導入されました。レガシーな AVPlayer.HDRMode.hlg.hdr10.dolbyVision を持つ OptionSet 構造体)とクラスレベルの availableHDRModes は非推奨となりましたが、依然として解決可能です2
  • AVCaptureDevice.isVideoHDREnabled は、デバイスが HDR バッファをストリーミングしているかどうかを読み取ります。automaticallyAdjustsVideoHDREnabled を無効化したうえで videoHDREnabled を設定すると、対応フォーマットで強制的にオンにできます。
  • Apple Log は iPhone 15 Pro+ および iPhone 16 Pro+ の領域です:ポストでのグレーディングを前提とした、フラットで彩度の低いカラープロファイルとなっています。アプリは、Apple Log カラースペースをサポートするデバイス上で、AVCaptureDevice のアクティブフォーマット選択を通じて HEVC(10-bit)または Apple ProRes としてエンコードされた Apple Log をキャプチャできます3
  • Apple は公式の Apple Log → Rec.709 および Apple Log → Rec.2020 LUT をデベロッパーサイトで配布しています。ポストプロダクションの受け渡しを扱うアプリは、LUT を同梱するか、入手先を案内します4
  • AVKit は、対応デバイス上では HDR コンテンツを EDR(Extended Dynamic Range)として表示します。SDR デバイスではトーンマッピングされた出力が自動的に届けられます。AVPlayerViewControllerVideoPlayer を使うアプリは、ディスプレイごとの分岐なしに正しい挙動を得られます。

3 つの HDR フォーマット

AVFoundation は 3 つの HDR フォーマットをサポートしています。レガシーな列挙方法は AVPlayer.HDRMode OptionSet 構造体(.hlg.hdr10.dolbyVision のケース)と、クラスレベルの AVPlayer.availableHDRModes プロパティでした。iOS 26 ではこれらを非推奨とし、よりシンプルなインスタンスレベルの AVPlayer.eligibleForHDRPlayback Boolean を推奨しています2

HLG(Hybrid Log-Gamma)。 放送向けの標準規格で、信号を正しく解釈する SDR ディスプレイとの後方互換性を持つように設計されています。HLG コンテンツは SDR テレビでもシャドウのつぶれやハイライトの飛びなしで再生でき、同じ信号が HDR ディスプレイではより良く見えます。広範なデバイス互換性が必要なアプリは、デフォルトとして HLG を選びます。

HDR10。 テレビ/ストリーミング向けの標準規格です。ストリームに静的メタデータ(ピーク輝度、カラーボリューム)が埋め込まれており、Dolby Vision より詳細さは劣るものの、より普遍的に利用されています。「HDR」と表示されるストリーミングサービスのほとんどは、HDR10 か Dolby Vision を使用しています。

Dolby Vision。 フレームごとの HDR メタデータを持ち、一般に最高品質の HDR 体験を実現します。完全な恩恵を受けるには Dolby Vision 対応のディスプレイチェーン(デコーダ、ディスプレイ)が必要となりますが、下位グレードのディスプレイでも適切にトーンマッピングされます。

モダンなコードでは、AVPlayer.eligibleForHDRPlayback で現在のアイテムがそのデバイスで HDR 再生されるかどうかを読み取ります。明示的なフォーマット内省(レガシーなコードパスやフォーマット固有の UI)が必要なアプリは引き続き AVPlayer.availableHDRModes をクエリできますが、新しいコードはよりシンプルな Boolean を選ぶべきでしょう。

AVCaptureDevice を通じた HDR ビデオキャプチャ

キャプチャ側の HDR は AVCaptureDevice のプロパティを使います。制御点は 2 つ、フォーマットと HDR トグルです:

import AVFoundation

guard let device = AVCaptureDevice.default(for: .video) else { return }

try device.lockForConfiguration()
device.automaticallyAdjustsVideoHDREnabled = false
device.isVideoHDREnabled = true
device.unlockForConfiguration()

automaticallyAdjustsVideoHDREnabled プロパティはデフォルトで true となっており、iOS は動作条件に応じてフォーマットごとに HDR か SDR かを選択します。明示的に制御したいアプリはこれを false に設定し、isVideoHDREnabled を直接トグルします。注意:このプロパティは観測可能で、isVideoHDREnabled を読み取ると現在の状態が反映されます。フォーマットが HDR をサポートしていない場合、手動設定とは異なる値となることがあります。

AVCaptureDevice.activeFormat は、isVideoHDRSupported を通じてそのフォーマットの HDR サポートを公開します。デバイス上のすべてのフォーマットが HDR をサポートしているわけではありません。HDR 対応アプリのパターンとしては、デバイスの formats を列挙して、目的の解像度とフレームレートで isVideoHDRSupported == true のものを見つけ、HDR を有効化する前にアクティブフォーマットを明示的に設定します。

Apple Log:プロのカラーワークフロー

Apple Log は iPhone 15 Pro / Pro Max / iPhone 16 Pro / Pro Max 以降で利用できるフラットなカラープロファイルです。対数的なガンマカーブで、カメラ内のトーンマッピングを最小限に抑えてビデオを記録します。撮って出しの映像は色あせて見えますが、ポストプロダクションでのグレーディングのためにダイナミックレンジを最大限保持します3

キャプチャパスは次のとおりです: 1. Apple Log をサポートする AVCaptureDevice.Format を選択します。フォーマットは supportedColorSpaces リストを通じてこの情報を公開し、対応デバイス上では .appleLog が含まれます。 2. 設定のためにロックした後、デバイスの activeColorSpace.appleLog に設定します。 3. 録画コーデックを構成します(iPhone 内部パスでは HEVC、より高帯域のパスでは Apple ProRes)。 4. 記録します。撮影されたビデオには Apple Log のカラーメタデータが付与されます。

ポストプロダクションへの受け渡しが価値の中心です:Apple Log により、エディターはハイライトとシャドウを独立してグレーディングし、カメラ単独では不可能な方向に色を引き出し、他の Log 対応カメラの素材とマッチングする最大限の柔軟性を得られます。

Apple Log の素材を扱うアプリ(ビデオエディター、カラーグレーディングユーティリティ、アセット管理ツール)に対しては、フレームワークがアセットのトラックプロパティを通じてカラーメタデータを公開します。アプリは AVAssetTrack.formatDescriptions を読み取り、kCVImageBufferTransferFunctionKey を検査して Apple Log コンテンツであることを確認します。

エンコード:HEVC、ProRes、ProRes Log

HDR / Apple Log ビデオで重要となるコーデックパスは 3 つあります:

HEVC(H.265)。 デフォルトのコンシューマー向けコーデックです。10-bit HEVC は HDR(HLG、HDR10、Dolby Vision メタデータ)をサポートします。HDR 対応コーデックの中で最も小さなファイルサイズとなります。iPhone は大半のコンシューマー HDR ビデオを HEVC で記録します。

Apple ProRes。 プロフェッショナル向けのコーデックです。ファイルサイズは大きい(同等品質の HEVC と比べて 10〜50 倍)ものの、ロスレスのフレーム内圧縮によりクリーンにグレーディングできます。iPhone 15 Pro+ は内部ストレージ(最大 4K30、持続時間に制約あり)または外部 USB-C SSD(4K60 持続、より長時間)に ProRes を記録します。

Apple ProRes Log。 Apple Log カラープロファイルでエンコードされた ProRes です。「プロの映像作家」向けのパスで、グレーディングの柔軟性は最大、ファイルは最大、4K60 の持続キャプチャには外部 SSD が必要となります。受け渡し先は DaVinci Resolve、Final Cut、その他グレーディング対応 NLE です。

コーデックの選択は AVCaptureMovieFileOutput の出力設定を通じて公開されます。録画フローを扱うアプリは、出力フォーマット辞書の AVVideoCodecKey.hevc.proRes422.proRes422HQ.proRes422LT.proRes422Proxy.proRes4444 などのいずれかを設定します。これらは AVVideoCodecType の静的定数です。モダンな Swift API には「apple」プレフィックスが付かない点にご注意ください。AVCaptureDevice.Format はデバイスがどのコーデックをストリーミングできるかを制約します。すべての解像度ですべてのコーデックが利用できるわけではありません。

カラーグレーディングの受け渡し:LUT

Apple Log の素材は色あせて見えます。グレーディングのワークフローでは、LUT(Look-Up Table)を適用して Apple Log のカラースペースを配信ターゲット(SDR には Rec.709、HDR には Rec.2020)にマッピングします。Apple は Final Cut Pro / Pro Apps サポートドキュメントハブを通じて公式 LUT を配布しています4

  • Apple Log to Rec.709。 SDR 配信向け。標準的な YouTube/Web ビデオのカラースペースです。
  • Apple Log to Rec.2020 HLG。 HLG 経由の HDR 配信向け。放送/一般的な HDR 用途です。
  • Apple Log to Rec.2020 HDR10。 HDR10 経由の HDR 配信向け。ストリーミング HDR 用途です。

Apple Log 素材を扱うアプリは、次のいずれかのアプローチを取ります: 1. LUT を直接埋め込み、インポート時に適用する(Final Cut、DaVinci Resolve、LUT プラグインを備えた Photoshop) 2. エディターが手動で適用できるよう LUT のパスを案内する

Apple Log 対応ツールを構築するアプリ開発者にとって、適切なパターンは選択肢 1 となります:LUT をバンドルし、インポート時に適用し、ユーザーには標準的な配信フォーマットでエクスポートしてもらう、というかたちです。Apple 提供の LUT は、Apple のデベロッパーツールライセンスのもとで自由に再配布できます。

表示:AVKit を介した EDR

表示側はおおむね自動です。AVKit の AVPlayerViewController(UIKit)と SwiftUI の VideoPlayer は、対応ディスプレイ上では HDR コンテンツを EDR(Extended Dynamic Range)としてレンダリングします:

  • iPhone OLED ディスプレイ(iPhone X 以降、ProMotion を備えた Pro モデル)
  • iPad Pro mini-LED ディスプレイ
  • Mac XDR ディスプレイ
  • AirPlay 経由の外部 HDR 対応ディスプレイ

SDR のみのディスプレイでは、システムが HDR コンテンツを自動的にトーンマッピングします。再生パスにおいてアプリがディスプレイ能力で分岐する必要はありません。システムが処理してくれます。

カスタムビデオパイプラインを持つアプリ(Metal ベースのプレイヤー、カスタム処理を行う AVSampleBufferDisplayLayer)は、CAMetalLayer.wantsExtendedDynamicRangeContent または同等のレイヤープロパティを通じて、明示的に EDR にオプトインする必要があります。カスタム Metal レイヤーのデフォルトは SDR であり、HDR サポートには明示的なオプトインに加えて、1.0 を超えるコンポーネント値をサポートする対応ピクセルフォーマット(一般的には bgr10a2Unorm または HDR 対応の float フォーマット)が必要となります。

よくある失敗

AVFoundation HDR / Apple Log の失敗ログから 3 つのパターンを挙げます:

HDR をキャプチャしているが、対応していないコーデックに記録している。 8-bit HEVC に記録するセッションで isVideoHDREnabled = true を設定すると、無音のうちに SDR 出力が生成されます。HDR 信号はキャプチャされていますが、エンコードがそれを剥がしてしまうのです。修正:HDR キャプチャを 10-bit コーデック(10-bit HEVC、ProRes、または ProRes Log)と組み合わせます。

配信パイプラインに LUT を入れずに Apple Log をキャプチャしている。 Apple Log のビデオは設計上色あせて見えます。グレーディング前の Apple Log 素材を見たユーザーは、カメラやアプリが壊れていると思い込んでしまいます。修正:アプリ内で表示する前に Apple Log → Rec.709 LUT を適用するか、後処理が必要であることが伝わるよう「log」と明確にラベル付けして素材をユーザーに見せましょう。

bgr10a2Unorm(または float HDR ピクセルフォーマット)なしに wantsExtendedDynamicRangeContent で HDR を表示する。 EDR にオプトインしていながら、チャネルあたり 8-bit のピクセルフォーマットでレンダリングする Metal レイヤーは、ハイライトがクリップされた出力を生成します。修正:EDR のオプトインを正しいピクセルフォーマット(10-bit unsigned-norm または 16-bit float)と組み合わせます。

このパターンが iOS 26+ アプリにとって意味すること

3 つのポイントを挙げます。

  1. 一般的なアプリではデフォルトを HEVC に、ProRes はプロフェッショナルなワークフローに見合うときだけ選択する。 10-bit HEVC で HDR をキャプチャするコンシューマー向けビデオアプリは、適度なファイルサイズで完全な HDR を届けられます。ProRes はロスレスなグレーディングの柔軟性を必要とする映像作家やエディター向けで、ファイルサイズのコストは現実のものとなります。

  2. Apple Log は iPhone 15 Pro+ の領域。デバイス要件をきちんと案内する。 Apple Log キャプチャを謳うアプリは、ランタイムで AVCaptureDevice.Format.supportedColorSpaces.appleLog が含まれているかをチェックし、対応していないデバイスでは適切に縮退する必要があります。フォーマットチェックはデバイス単位で行うものであり、iOS バージョン単位ではありません。

  3. Apple Log 素材については、LUT をバンドルするかワークフローを案内する。 Apple Log ビデオを扱うアプリには、生の Log からグレーディング済みの配信に至るパスが必要です。LUT を埋め込んでインポート時に適用するか、ユーザーが選んだ NLE で適用する方法を明確にドキュメントしたうえで Apple 提供の LUT を案内します。

Apple Ecosystem クラスター全体はこちら:型付き App IntentsMCP サーバールーティングの問題Foundation Modelsランタイム vs ツーリング LLM の違い3 つのサーフェス単一情報源パターン2 つの MCP サーバーApple 開発のためのフックLive ActivitieswatchOS ランタイムSwiftUI の内部RealityKit の空間メンタルモデルSwiftData スキーマの規律Liquid Glass パターンマルチプラットフォーム出荷プラットフォームマトリクスVision フレームワークSymbol EffectsCore ML 推論Writing Tools APISwift TestingPrivacy ManifestプラットフォームとしてのアクセシビリティSF Pro タイポグラフィvisionOS の空間パターンSpeech フレームワークSwiftData マイグレーションtvOS フォーカスエンジン@Observable の内部SwiftUI Layout プロトコルカスタム SF Symbols書かないと決めていること。ハブは Apple Ecosystem シリーズ にあります。AI エージェントを伴う iOS のより広い文脈については、iOS Agent Development ガイド をご覧ください。

FAQ

アプリで HDR ビデオを記録するのに iPhone 15 Pro が必要ですか?

いいえ。HDR ビデオ(HLG、HDR10)は iPhone 12 Pro 以降で 10-bit HEVC を通じてサポートされています。iPhone 15 Pro 以降で追加されたのは特に Apple Log です。より広範な HDR パイプラインはより多くのデバイスで動作します。

Apple Log と Dolby Vision の違いは何ですか?

Apple Log はキャプチャ用のカラープロファイル(グレーディングのために設計)で、Dolby Vision は配信用の HDR フォーマット(再生のために設計)です。両者はパイプライン内の異なる段階を担います。Apple Log の素材はグレーディングを経て配信フォーマットにエクスポートされ、Dolby Vision はその配信オプションのひとつとなります。

ランタイムで Apple Log のサポートを検出するにはどうすればよいですか?

AVCaptureDevice.formats を列挙し、各フォーマットの supportedColorSpaces を確認します。Apple Log のサポートは、そのリスト内に .appleLog として現れます。対応デバイスでのみ Apple Log キャプチャを露出したいアプリは、iPhone のモデル識別子をパースするのではなく、このチェックを起点にします。

HEVC HDR と ProRes Log のファイルサイズの差はどれくらいですか?

ビットレートと解像度に依存しますが、おおむね 1 分あたり 10〜50 倍となります。4K30 HEVC HDR は約 50〜100 MB/分、4K30 ProRes 422 HQ は約 1.5〜2.5 GB/分です。ProRes Log ファイルは 4K60 の持続キャプチャに外部 USB-C SSD を必要とします。iPhone の内部ストレージは持続的な ProRes 書き込みに対してレート制限があります。

LUT なしで Apple Log の素材を表示できますか?

生の映像は表示できますが、色あせて彩度が低く見えます。Apple Log のカラープロファイルはグレーディング向けであり、直接視聴向けではありません。生の Apple Log 素材をユーザーに見せる必要があるアプリは、後処理が必要であることが伝わるよう「log」とラベル付けすべきでしょう。そうでない場合は、表示用に Apple Log → Rec.709 LUT を適用しましょう。

AVFoundation は HDR から SDR へのトーンマッピングを自動で処理してくれますか?

AVKit の標準プレイヤー(AVPlayerViewController、SwiftUI の VideoPlayer)であれば、はい。カスタム Metal ビデオパイプラインでは、明示的に EDR にオプトインし、HDR 対応のピクセルフォーマットを選択する必要があります。それらがなければ、HDR コンテンツはクリップされた SDR として表示されます。

参考文献


  1. Apple Developer Documentation: AVFoundation。iOS、iPadOS、macOS、tvOS、watchOS、visionOS にわたるキャプチャ、編集、再生 API を網羅したフレームワークリファレンスです。 

  2. Apple Developer Documentation: AVPlayer.HDRMode。3 つの HDR ケース(.hlg.hdr10.dolbyVision)と、AVPlayer インスタンスが現在のアイテムで何をサポートしているかを問い合わせる availableHDRModes クエリです。 

  3. Apple Developer Documentation: AVCaptureDeviceAVCaptureDevice.Format。Apple Log 検出用の supportedColorSpaces や HDR の可否を示す isVideoHDRSupported を含む、キャプチャデバイスのフォーマットプロパティです。 

  4. Apple Pro Apps Support: Apple Pro Apps support and downloads。Apple Log Profile のリソースと、Apple Log 素材を標準的な配信カラースペースに変換するためのダウンロード可能な LUT へのリンクをまとめた Pro Apps ハブです。LUT は Final Cut Pro と Logic Pro にバンドルされ、また単独のダウンロードとしても提供されます。 

関連記事

SwiftData Migrations: Lightweight vs Custom, And When You Don't Need a V2

SwiftData's migration model uses VersionedSchema, MigrationStage, and SchemaMigrationPlan. Most schema changes don't nee…

13 分で読める

The Privacy Manifest Deep Dive: What Counts As Data Collection

Apple's privacy manifest is a structured contract, not a checkbox: four sections, five required-reason API categories, S…

14 分で読める

The Cleanup Layer Is the Real AI Agent Market

Charlie Labs pivoted from building agents to cleaning up after them. The AI agent market is moving from generation to pr…

15 分で読める