AVFoundation HDR 與 Apple Log:iPhone 上的專業影片工作流程
iPhone 15 Pro 及更新機型可在標準 HEVC 與 Apple ProRes 編解碼器之外錄製 Apple Log,而 AVFoundation 透過 AVCaptureDevice 與 AVCaptureSession 為想要參與的應用程式提供完整的專業影片堆疊1。同一框架的 HDR 端透過 AVPlayer.HDRMode 支援 HLG、HDR10 與 Dolby Vision,並可透過 AVKit 將影片以 EDR 形式顯示。這兩個部分(擷取與顯示)透過編解碼器選擇、色彩空間中繼資料,以及交付至調色應用程式的後製接力相互連接。
本文對照 Apple 的文件,逐一介紹 AVFoundation 的專業影片介面。其框架是「應用程式需要為電影製作者、影片剪輯師,以及注重 HDR 的應用程式提供哪些功能」,因為該框架的專業影片功能雖有文件記載,卻未受到宣傳;大多數本可受惠的應用程式並未提供這些功能。
TL;DR
- AVFoundation 支援三種 HDR 交付格式:HLG(Hybrid Log-Gamma)、HDR10 與 Dolby Vision。iOS 26 引入了較簡單的
AVPlayer.eligibleForHDRPlayback布林值作為建議的檢查方式;舊版的AVPlayer.HDRMode(具有.hlg、.hdr10、.dolbyVision的OptionSet結構)以及類別層級的availableHDRModes已棄用,但仍可解析2。 AVCaptureDevice.isVideoHDREnabled讀取裝置是否正在串流 HDR 緩衝區;設定videoHDREnabled(在停用automaticallyAdjustsVideoHDREnabled之後)會強制相容格式啟用 HDR。- Apple Log 為 iPhone 15 Pro+ 與 iPhone 16 Pro+ 機型專屬:這是一種扁平、低飽和度的色彩描述檔,供後製調色使用。應用程式在支援 Apple Log 色彩空間的裝置上,透過
AVCaptureDevice的作用中格式選擇進行擷取,並以 HEVC(10 位元)或 Apple ProRes 編碼3。 - Apple 透過開發者網站提供官方的 Apple Log → Rec.709 與 Apple Log → Rec.2020 LUT;處理後製接力的應用程式應內建該 LUT 或記錄取得位置4。
- AVKit 在支援的裝置上將 HDR 內容顯示為 EDR(擴展動態範圍);SDR 裝置會自動接收經色調對映的輸出。使用
AVPlayerViewController或VideoPlayer的應用程式無需依顯示器分支即可獲得正確的行為。
三種 HDR 格式
AVFoundation 支援三種 HDR 格式。傳統的列舉方式是 AVPlayer.HDRMode OptionSet 結構(具有 .hlg、.hdr10、.dolbyVision 等 case)以及類別層級的 AVPlayer.availableHDRModes 屬性;iOS 26 將兩者皆棄用,改採較簡單的實例層級 AVPlayer.eligibleForHDRPlayback 布林值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,但新程式碼應改用較簡單的布林值。
透過 AVCaptureDevice 擷取 HDR 影片
擷取端的 HDR 使用 AVCaptureDevice 的屬性。兩個控制點是格式與 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 影片而言,有三條編解碼器路徑值得關注:
HEVC(H.265)。預設的消費級編解碼器。10 位元 HEVC 支援 HDR(HLG、HDR10、Dolby Vision 中繼資料)。在支援 HDR 的編解碼器中檔案大小最小。iPhone 透過 HEVC 錄製大多數消費級 HDR 影片。
Apple ProRes。專業編解碼器。檔案較大(同等品質下為 HEVC 的 10–50 倍),但採用無損的影格內壓縮,可乾淨地進行調色。iPhone 15 Pro+ 可錄製 ProRes 至內部儲存空間(最高 4K30,持續錄製受限)或外接 USB-C SSD(持續 4K60,可錄製較長時間)。
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(查找表)將 Apple Log 的色彩空間對映至交付目標(SDR 用 Rec.709,HDR 用 Rec.2020)。Apple 透過 Final Cut Pro / Pro Apps 支援文件中心提供官方 LUT4:
- Apple Log to Rec.709。SDR 交付。標準的 YouTube / 網路影片色彩空間。
- 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(擴展動態範圍):
- 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 的浮點格式)。
常見失敗
從 AVFoundation HDR / Apple Log 失敗紀錄中歸納出三種模式:
擷取 HDR 但錄製至不支援的編解碼器。在錄製為 8 位元 HEVC 的工作階段上設定 isVideoHDREnabled = true 會產生靜默的 SDR 輸出。HDR 訊號被擷取,但編碼將其剝離。修復方式:將 HDR 擷取與 10 位元編解碼器(10 位元 HEVC、ProRes 或 ProRes Log)搭配使用。
Apple Log 擷取後,交付管線中卻沒有 LUT。Apple Log 影片在設計上看起來褪色;觀眾看到未調色的 Apple Log 素材會以為相機或應用程式壞了。修復方式:在應用程式中顯示前套用 Apple Log → Rec.709 LUT,或將素材以「log」清楚標示給使用者,讓他們了解後製處理的需求。
透過 wantsExtendedDynamicRangeContent 顯示 HDR,但未搭配 bgr10a2Unorm(或浮點 HDR 像素格式)。已選擇加入 EDR 但渲染至每通道 8 位元像素格式的 Metal 層會產生高光剪切。修復方式:將 EDR 選擇加入與正確的像素格式(10 位元無號歸一化或 16 位元浮點)搭配使用。
此模式對 iOS 26+ 應用程式的意義
三項要點。
-
一般應用程式預設使用 HEVC;只在專業工作流程值得時才採用 ProRes。透過 10 位元 HEVC 擷取 HDR 的消費級影片應用程式能以合理的檔案大小提供完整 HDR。ProRes 是給需要無損調色彈性的電影製作者與剪輯師使用;檔案大小成本是真實存在的。
-
Apple Log 為 iPhone 15 Pro+ 機型專屬;請記錄裝置需求。承諾提供 Apple Log 擷取的應用程式需要在執行時檢查
AVCaptureDevice.Format.supportedColorSpaces是否包含.appleLog,並在不支援的裝置上優雅降級。此格式檢查是依裝置而非 iOS 版本進行。 -
為 Apple Log 素材打包 LUT 或記錄工作流程。處理 Apple Log 影片的應用程式需要從原始 Log 到調色完成交付的路徑。可選擇內嵌 LUT 並在匯入時套用,或將 Apple 提供的 LUT 透露給使用者,並清楚記錄如何在他們選擇的 NLE 中套用。
完整的 Apple 生態系叢集:有型別的 App Intents;MCP 伺服器;路由問題;Foundation Models;執行時與工具 LLM 的區別;三個介面;單一資料來源模式;兩台 MCP 伺服器;Apple 開發的 hooks;Live Activities;watchOS 執行時合約;SwiftUI 內部;RealityKit 的空間心智模型;SwiftData 結構紀律;Liquid Glass 模式;多平台發佈;平台矩陣;Vision 框架;Symbol Effects;Core ML 推論;Writing Tools API;Swift Testing;Privacy Manifest;無障礙作為平台;SF Pro 字體排印;visionOS 空間模式;Speech 框架;SwiftData 遷移;tvOS 焦點引擎;@Observable 內部;SwiftUI Layout 協定;自訂 SF Symbols;我拒絕撰寫的內容。中心位於 Apple Ecosystem Series。如需更廣泛的 iOS 與 AI agents 整合脈絡,請參閱 iOS Agent Development guide。
FAQ
我需要 iPhone 15 Pro 才能在應用程式中錄製 HDR 影片嗎?
不需要。HDR 影片(HLG、HDR10)透過 10 位元 HEVC 在 iPhone 12 Pro 及更新機型上即可支援。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 的檔案大小差異是多少?
每分鐘約相差 10–50 倍,依位元率與解析度而定。4K30 HEVC HDR 約為每分鐘 50–100 MB;4K30 ProRes 422 HQ 約為每分鐘 1.5–2.5 GB。ProRes Log 檔案需要外接 USB-C SSD 才能持續進行 4K60 擷取;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 形式顯示。
References
-
Apple Developer Documentation: AVFoundation. 涵蓋 iOS、iPadOS、macOS、tvOS、watchOS 與 visionOS 上擷取、編輯與播放 APIs 的框架參考文件。 ↩
-
Apple Developer Documentation:
AVPlayer.HDRMode. 三種 HDR case(.hlg、.hdr10、.dolbyVision),以及用於查詢AVPlayer實例對目前項目支援哪些格式的availableHDRModes。 ↩↩ -
Apple Developer Documentation:
AVCaptureDevice與AVCaptureDevice.Format. 擷取裝置的格式屬性,包括用於 Apple Log 偵測的supportedColorSpaces以及用於判斷 HDR 可行性的isVideoHDRSupported。 ↩↩ -
Apple Pro Apps Support: Apple Pro Apps support and downloads. Pro Apps 中心連結到 Apple Log Profile 資源以及可下載的 LUT,用於將 Apple Log 素材轉換為標準交付色彩空間;LUT 隨 Final Cut Pro 與 Logic Pro 一同打包,亦提供獨立下載。 ↩↩