如何将相机/视频设置为220fps?Xcode+Swift能否编程配置VisionKit/AVFoundation帧率?
相机/视频设置220帧率的通用方案
- 先确认硬件支持:绝大多数消费级设备(比如iPhone)最高只支持120/240fps的慢动作拍摄,220fps属于非标准帧率,只有少数专业设备或特定型号可能支持——先查你设备的官方规格,确认硬件能输出这个帧率,不然所有设置都是白搭。
- 原生系统设置:如果设备支持,打开系统相机APP,切换到慢动作模式,查看是否有接近220fps的档位(部分设备会标注为240fps,和220fps差异很小),直接选择即可。
- 第三方拍摄工具:原生相机没有的话,可尝试专业拍摄类APP,这类工具可能解锁更多硬件参数,但前提还是设备本身支持220fps输出。
Xcode中用Swift实现220fps预览/录制
首先明确:VisionKit不负责相机帧率控制,它主要用于文档扫描、文本识别等场景,要控制相机帧率必须用AVFoundation框架。
1. 先检查设备是否支持220fps
先遍历设备的所有可用格式,筛选出支持的帧率范围:
import AVFoundation // 获取后置广角相机 guard let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else { print("无法获取相机设备") return } // 遍历所有支持的格式,查找包含220fps的范围 for format in captureDevice.formats { for frameRateRange in format.videoSupportedFrameRateRanges { if frameRateRange.maxFrameRate >= 220 && frameRateRange.minFrameRate <= 220 { print("找到支持的格式: \(format)") print("帧率范围: \(frameRateRange.minFrameRate) - \(frameRateRange.maxFrameRate)fps") } } }
2. 配置相机会话到220fps
如果上面的代码输出了支持的格式,就可以配置相机的帧率:
do { try captureDevice.lockForConfiguration() // 找到支持220fps的目标格式 if let targetFormat = captureDevice.formats.first(where: { format in format.videoSupportedFrameRateRanges.contains { range in range.maxFrameRate >= 220 && range.minFrameRate <= 220 } }) { // 设置当前使用的格式 captureDevice.activeFormat = targetFormat // 固定帧率为220fps(min和max设为相同值) let frameDuration = CMTimeMake(value: 1, timescale: 220) captureDevice.activeVideoMinFrameDuration = frameDuration captureDevice.activeVideoMaxFrameDuration = frameDuration } captureDevice.unlockForConfiguration() } catch { print("相机配置失败: \(error.localizedDescription)") }
3. 录制视频时的额外配置
如果要录制220fps的视频,还需要配置AVCaptureMovieFileOutput的帧率参数:
let movieFileOutput = AVCaptureMovieFileOutput() // 先将output添加到会话中(这里省略会话初始化代码) // captureSession.addOutput(movieFileOutput) if let videoConnection = movieFileOutput.connection(with: .video) { if videoConnection.isVideoMinFrameDurationSupported { videoConnection.videoMinFrameDuration = CMTimeMake(value: 1, timescale: 220) } if videoConnection.isVideoMaxFrameDurationSupported { videoConnection.videoMaxFrameDuration = CMTimeMake(value: 1, timescale: 220) } }
关键注意事项
- 硬件是核心:如果设备本身不支持220fps,上面的代码不会生效,相机会自动 fallback 到支持的最高帧率。
- 分辨率妥协:高帧率模式通常会降低分辨率,比如240fps模式下很多设备只能支持1080p,甚至更低分辨率。
- 220fps是非标准帧率:大部分设备的硬件支持的是240fps这类标准高帧率,如果你不需要严格220fps,用240fps是更稳妥的选择,效果差异可以忽略。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

