【问题标题】:Fix Android camera frame rate修复 Android 相机帧率
【发布时间】:2014-01-14 04:57:41
【问题描述】:

我希望大幅降低并修复 Android 相机上视频的帧速率 - 我将把它视为静态帧流,拍摄速度比相机设置允许的速度快,但比视频慢得多。因此,我想更改帧速率并保持不变。

我知道 setPreviewFpsRange(int, int) 是首选技术,传递相同的最小值和最大值。但是,面对光照变化等情况,这并不能建立恒定的帧速率。鉴于我并没有试图获得不可持续的高帧率(我实际上目标很低),有没有办法确保恒定的帧率?

【问题讨论】:

    标签: android camera


    【解决方案1】:

    由于您在问题中提到setPreviewFpsRange(),我假设您可以使用预览的分辨率。在这种情况下,您可以通过自己对视频进行编码来稍微解决可变帧速率问题。基本上,以“正常”速率运行它,并在帧进入PreviewCallback 时抓取它们。检查自上一帧以来的时间,丢弃不需要的时间。然后当你完成后,使用 FFMPEG 之类的东西来编码视频。

    这并不能保证一个完全恒定的速率,但您应该能够跨设备更一致地控制它,因为各种设备可以很好地处理自动更改速率不同。

    当然,这可能会占用大量存储空间,因为您要单独保存每一帧,然后对视频进行编码,然后再删除帧。如果您有兴趣拍摄的视频有点短,这可能是一个很好的解决方案。

    【讨论】:

    • 谢谢,这种方法实际上有很大的潜力。存储密集型可能是我可以解决的问题 - 我要拍摄非常长的视频,但要使用完全专用的手机。因此,我可以为此插入一个额外的 SD 卡,而电池可能是我的主要障碍。通过这个解决方案,我不需要恒定的帧速率 - 目标是避免分析太多图像,但检查时间戳以丢弃它们就足够了。这对我来说似乎是一个可靠的答案。
    • 那很好。我不确定您是否感兴趣,因为与典型的“录制视频”方法相比,它增加了很多复杂性,但我认为发布不会有什么坏处。
    • @Geobits,所以您的意思是将所有预览帧保存在 sd 卡中,然后在最后一步对其进行编码?如果分辨率为 720 * 480,fps 为 30,则文件大小为 720*480*3/2*30*10s(如果最长持续时间为 10s)= 150MB
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多