【iOS】AVFoundation を使用して シネマティック動画を撮影する

こんにちは。タイミーでiOSエンジニアをしているnaoyaです。
本記事は Timee Product Advent Calendar 2025 の17日目の記事です。
iOS 26から、サードパーティ製アプリでもシネマティックモードを使った動画撮影が可能になりました。シネマティックモードを使用すると、背景を大きくぼかして被写体を際立たせる動画を撮影できます。
本記事では、シネマティックモードで撮影するための実装方法と、それに付随するメソッドやプロパティについて解説します。最後まで読むことで、シネマティック動画の撮影に加えて、ぼかし(被写界深度)の調整やトラッキング対象の指定など、動画の魅力を引き上げる機能を実装できるようになります。
なお、本記事は通常の動画撮影機能(AVCaptureSession・AVCaptureDevice・AVCaptureMovieFileOutput 等)の基本的な知識を前提とします。復習したい方は、以下の記事をご覧ください。
シネマティックモードとは
シネマティックモードは、人物や物体にピントを合わせ、背景を大きくぼかして映画のような映像を撮影できるモードです。iPhone 13シリーズで初めて登場し、iOS 26からは一部の端末でアプリからのシネマティック動画撮影が可能になりました。

実装
カメラデバイスの選択
シネマティックモードに対応しているのは次のカメラのみです。
- 背面デュアルワイドカメラ(広角+超広角の仮想デバイス)
- 前面 TrueDepth カメラ
まず、いずれかのデバイスを表す AVCaptureDevice を取得します。
また、シネマティック動画撮影時に選択できる設定は、以下の組み合わせです。
- 解像度:フルHD、または 4K
- フレームレート:30fps のみ

シネマティックモード対応フォーマットの選択
取得した AVCaptureDevice の formats を走査し、シネマティックモードをサポートしているフォーマットを探します。判定は AVCaptureFormat の isCinematicVideoCaptureSupported で行えます。
シネマティックモードを有効化する
シネマティックモードを有効化するには、AVCaptureDevice オブジェクトの入力を表す AVCaptureDeviceInput オブジェクトの isCinematicVideoCaptureEnabled プロパティに true を代入します。
ここまでで、基本的なシネマティック動画の撮影が可能になります。

ぼかしの強さ (被写界深度) を調整する
シネマティックモードでは、AVCaptureDeviceInput オブジェクトの simulatedAperture プロパティで被写界深度(ボケ量)を調整できます。また、ぼかしの最小値 / 最大値及びデフォルト値は、AVCaptureDeviceFormat オブジェクトのminSimulatedAperture / maxSimulatedAperture / defaultSimulatedAperture プロパティで取得できます。

トラッキング可能な被写体を検出する
システム任せのフォーカス移動に加え、特定の被写体を手動で指定してトラッキングさせることも可能です。被写体情報は AVCaptureMetadataOutput を用いて AVMetadata として取得します。
まず、シネマティックモードで必要なメタデータを受け取るために、 metadataObjectTypes に
requiredMetadataObjectTypesForCinematicVideoCapture を設定します。そして、AVCaptureMetadataOutput の setMetadataObjectsDelegate(_:queue:) メソッドで、AVMetadata オブジェクト検出時に呼び出されるデリゲートメソッドの委譲先を指定します。
デリゲート先として指定したクラスは、 AVCaptureMetadataOutputObjectsDelegate に準拠する必要があります。
そして、そのクラス内で、AVMetadata 検出時に呼び出されるmetadataOutput(_:didOutput:from:) メソッドを定義します。
ここまでで、シネマティック動画撮影中にトラッキング可能な被写体を検出できるようになります。
識別IDを指定する
setCinematicVideoTrackingFocus(detectedObjectID:focusMode:) で、指定した特定の被写体をトラッキングし続けることができます。
detectedObjectID 引数には、トラッキングしたい被写体を表す AVMetadata の objectID プロパティを指定します。focusMode 引数には、シネマティックビデオのトラッキング動作を表すCinematicVideoFocusMode 列挙型の要素を指定します。
CinematicVideoFocusMode 列挙型には 次の3つのケースがあります。
- strong
指定した被写体を優先的にトラッキングし続ける - weak
システムが自動で最適な被写体に切り替えることを許容する - none
フォーカスモードが指定されていないことを表す。通常は使用しない
View内の座標位置を指定する
setCinematicVideoFixedFocus(at:focusMode:) メソッドで、指定した座標位置に対してシステムが被写体を自動で検索し、見つかった対象をトラッキング対象にすることができます。

おわりに
本記事では、シネマティック動画を撮影するために必要なメソッドやプロパティ、および実装方法について解説しました。実際にシネマティックモードで撮影した動画を見てみると、かなり綺麗に背景をぼかすことができていました。また、シネマティックモードで撮影した動画は、iOSにプリインストールされている写真アプリで、被写体の変更やボケ具合の調整を行うことができます。
シネマティックモードで動画を撮影するだけなら、実装のハードルはそこまで高くないので、ぜひチャレンジしてみてください。
参考資料
・Capture cinematic video in your app
Discussion