とらのメモ

IT関係やガジェットについての雑記

iPhoneで120FPS, 240FPSを選択した時のズームの挙動を作る

タイトル通り

Appleには複数カメラ間を一定のズーム値を超えるとスムーズに切り替えてくれる
便利なプロパティ(.builtInTripleCamera.builtInDualWideCamera .builtInDualCamera)
が用意されている。

しかし、これらを選択すると120FPS, 240FPSの撮影、
いわゆるスローモーション撮影ができない。
(手元環境: iPhone 13 pro iOS16.1 .builtInTripleCamera で確認)


対応しているフレームレートの一覧を見るには, 以下のコードで試せる。

// 使用できるキャプチャデバイスを確認する
let deviceTypes:[AVCaptureDevice.DeviceType] = [
.builtInTripleCamera,
.builtInDualCamera
]
let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: deviceTypes, mediaType: AVMediaType.video, position: .back)
if let currentDevice = deviceDiscoverySession.devices.first {
for format in currentDevice.formats {
let dimentions = CMVideoFormatDescriptionGetDimensions(description)
for range in format.videoSupportedFrameRateRanges {
print(range.maxFrameRate)
}
}
}

 

----------------------------------

というわけで複数のレンズがある端末で
スローモーション撮影のズームを行う場合は、カメラ間をスムーズに移動するには自分でズーム処理を書く必要があるらしい。

まず下準備として、公式のカメラアプリを参考に標準カメラのどこの倍率で切り替わると画面のずれがないかを確認する。

大体、以下の表のような感じになった。

カメラ(ズーム値) 対応するカメラ
超広角カメラ(2.0) 広角カメラ(1.0)
広角カメラ(3.0) 望遠カメラ(1.0)

 


 

コード

まとめきれてないので、暇な時に更新します,,,,