【发布时间】:2014-01-14 04:57:41
【问题描述】:
我希望大幅降低并修复 Android 相机上视频的帧速率 - 我将把它视为静态帧流,拍摄速度比相机设置允许的速度快,但比视频慢得多。因此,我想更改帧速率并保持不变。
我知道 setPreviewFpsRange(int, int) 是首选技术,传递相同的最小值和最大值。但是,面对光照变化等情况,这并不能建立恒定的帧速率。鉴于我并没有试图获得不可持续的高帧率(我实际上目标很低),有没有办法确保恒定的帧率?
【问题讨论】:
我希望大幅降低并修复 Android 相机上视频的帧速率 - 我将把它视为静态帧流,拍摄速度比相机设置允许的速度快,但比视频慢得多。因此,我想更改帧速率并保持不变。
我知道 setPreviewFpsRange(int, int) 是首选技术,传递相同的最小值和最大值。但是,面对光照变化等情况,这并不能建立恒定的帧速率。鉴于我并没有试图获得不可持续的高帧率(我实际上目标很低),有没有办法确保恒定的帧率?
【问题讨论】:
由于您在问题中提到setPreviewFpsRange(),我假设您可以使用预览的分辨率。在这种情况下,您可以通过自己对视频进行编码来稍微解决可变帧速率问题。基本上,以“正常”速率运行它,并在帧进入PreviewCallback 时抓取它们。检查自上一帧以来的时间,丢弃不需要的时间。然后当你完成后,使用 FFMPEG 之类的东西来编码视频。
这并不能保证一个完全恒定的速率,但您应该能够跨设备更一致地控制它,因为各种设备可以很好地处理自动更改速率不同。
当然,这可能会占用大量存储空间,因为您要单独保存每一帧,然后对视频进行编码,然后再删除帧。如果您有兴趣拍摄的视频有点短,这可能是一个很好的解决方案。
【讨论】: