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

能否对CameraX的videoCapture模块视频拍摄速率进行调节?

CameraX 视频拍摄速率控制实现方案

首先明确结论:CameraX 1.1.0及更高稳定版本已原生支持视频录制速率控制,可以实现慢动作、多倍速快录的需求,具体实现方案如下:

一、前置校验:确认设备支持的帧率范围

在配置速率前需要先查询当前设备摄像头支持的帧率能力,避免设置无效参数:

val cameraProvider = ProcessCameraProvider.getInstance(context).get()
val cameraInfo = cameraProvider.getCameraInfo(CameraSelector.DEFAULT_BACK_CAMERA)
val supportedFpsRanges = cameraInfo.supportedFrameRateRanges

返回的supportedFpsRanges就是设备支持的所有帧率区间,比如常见的慢动作支持(120,120)、(240,240),常规录制多是(30,30)。

二、慢动作录制实现

慢动作本质是高帧率采集、常规帧率输出,配置方式如下:

  • 选择设备支持的高帧率区间,比如120fps,通过VideoCapture.Builder配置帧率参数
  • 示例代码:
val videoCapture = VideoCapture.Builder()
    .setTargetFrameRate(
        // 传入你需要的高帧率区间,比如120fps慢动作
        Rational(120, 1)
    )
    .setBitRate(16_000_000) // 高帧率录制建议提升码率避免画质损失
    .build()
  • 注意:如果要输出常规30fps的慢动作视频,采集120fps的素材后,输出时将播放速率设置为0.25倍即可实现4倍慢动作效果,也可以直接通过MediaMuxer在录制阶段直接封装为慢动作播放的视频文件。

三、倍速快录(比如2倍速)实现

快录有两种实现方案,可根据需求选择:

  • 方案1:低帧率采集+常规速率输出
    要实现2倍速录制,直接设置采集帧率为15fps,输出30fps的视频,播放时自然就是2倍速效果,代码示例:
    val videoCapture = VideoCapture.Builder()
        .setTargetFrameRate(Rational(15, 1))
        .build()
    
  • 方案2:常规帧率采集+跳帧封装
    如果你需要同时保留原始帧率的音视频素材,后期再做倍速处理,可以按30fps正常采集,在封装到mp4的时候每隔一帧丢弃一帧,最终输出的视频就是2倍速效果,同时可以单独调整音频的播放速率匹配。

注意事项

  • 部分低端设备仅支持固定的帧率区间,设置前必须先查询supportedFpsRanges确认参数有效性,否则配置会 fallback 到默认30fps
  • 高帧率录制会大幅提升功耗和文件体积,建议在界面上给用户明确提示
  • 音频速率需要和视频速率同步调整,避免出现音画不同步的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:39:00