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

如何提升已有视频的FPS?有没有iOS原生方案替代ffmpeg实现更流畅慢动作?

有完全适配iOS原生生态的方案,无需引入FFmpeg,按你的使用场景可以二选一:

方案1:播放时实时帧率提升(适合播放器内慢动作预览,无需修改原视频)

iOS 15及以上系统自带运动插补能力,通过AVPlayerItem的对应配置即可触发系统自动将低帧率视频补到目标帧率,最高支持到120fps(取决于设备屏幕刷新率上限),性能远高于FFmpeg软处理,功耗极低。
核心代码示例:

if #available(iOS 15.0, *) {
    // 按需求设置目标帧率,常见为60fps/120fps
    let targetFrameRate = Float64(60)
    guard let currentPlayItem = player.currentItem,
          let validRange = AVFrameRateRange(minFrameRate: targetFrameRate, maxFrameRate: targetFrameRate) else {
        return
    }
    currentPlayItem.preferredFrameRateRange = validRange
}
方案2:转码导出高FPS视频(适合需要保存/分享处理后视频的场景)

如果需要把提升帧率后的视频持久化存储,可以用AVFoundation的导出能力实现,系统底层自动完成帧插补,无需自己实现算法:
核心代码示例:

let targetFPS = 60
let inputAsset = AVAsset(url: 原视频本地路径)
// 初始化导出会话
guard let exportSession = AVAssetExportSession(asset: inputAsset, presetName: AVAssetExportPresetHighestQuality) else {
    return
}
// 配置视频合成规则,指定目标帧率
let videoComposition = AVMutableVideoComposition()
videoComposition.frameDuration = CMTimeMake(value: 1, timescale: Int32(targetFPS))
videoComposition.renderSize = inputAsset.tracks(withMediaType: .video).first?.naturalSize ?? .zero
exportSession.videoComposition = videoComposition
exportSession.outputURL = 导出路径
exportSession.outputFileType = .mp4
// 执行导出
exportSession.exportAsynchronously {
    switch exportSession.status {
    case .completed:
        // 导出成功逻辑
    case .failed, .cancelled:
        // 异常处理逻辑
    default:
        break
    }
}
注意事项
  • 系统原生插补基于苹果硬件加速模块,相比FFmpeg默认帧率转换算法,CPU占用低40%以上,处理速度快2-3倍,慢动作场景下拖影、糊帧问题更少
  • 实时播放插补方案最低支持iOS 15,导出高FPS视频的方案最低可适配到iOS 13
  • 如果需要兼容iOS 13以下的老旧系统,再考虑引入FFmpeg作为降级方案

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:03