📽️
Apple Logに対応した動画を撮影する [iOS][Swift][AVCaptureSession]
kyu という動画撮影・共有アプリの開発を手伝っています。
直近のアップデートで撮影した動画の色味を少し変えるという対応が入っているのですが(この開発は僕じゃない)、
その中でApple Log形式で動画を撮影して色味を変えれたら高画質にできるんじゃないかと思ってApple Logでの撮影方法を調べてみました。
前提条件
Apple Log形式での動画の撮影に対応している端末である必要があります。
つまり、現時点(2024年3月)ではiPhone 15 Pro, iPhone 15 Pro Maxの2種類に絞られます。
ただし、これまでの傾向でProに導入された機能が翌年以降はProではない端末に導入されることがしばしばあるので、対応端末は年々増えることが予想できます。
実装方法
それでは本題の実装方法です。
-
AVCaptureSession
のautomaticallyConfiguresCaptureDeviceForWideColor
をfalse
に設定(これが一番大事かもしれない) -
AVCaptureDevice
のformats
からsupportedColorSpaces
に.appleLog
が含まれているものを探してactiveFormat
に設定する -
AVCaptureDevice
にactiveColorSpace = .appleLog
を設定する
.appleLog
の正体はこちら。
具体例
private func isAppleLogAvailable(for device: AVCaptureDevice) -> Bool {
device.formats.first(where: {
$0.supportedColorSpaces.contains(.appleLog)
}) != nil
}
private func configureAppleLogIfNeeded(for device: AVCaptureDevice) throws {
guard isAppleLogAvailable(for: device) else {
return
}
try device.lockForConfiguration()
defer {
device.unlockForConfiguration()
}
/// set up for .appleLog
if let format = device.formats.first(where: {
$0.supportedColorSpaces.contains(.appleLog)
}) {
device.activeFormat = format
device.activeColorSpace = .appleLog
}
}
まとめ
これで最低限 AVCaptureSession
でApple Logの色味を実現することができます。
ただし、端末への保存では60fpsの書き出しができなかったりするので、フレームレートの調整や保存時のフォーマット書き出し設定などは必要になってくると思います。(kyuでは結局Apple Logは使ってないので細かいところまでは調べてないです)
サンプルコードをGitHubにあげていますので、興味のある方は見てみてください。
追記(Special thanks)
@naoya_maeda さんにヒントをもらってなかったらできなかったのでありがとうございました!
Discussion