You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将相机/视频设置为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:43