安卓 - 是否可以“锁定”相机的预览帧率?

5

我正在尝试创建一个视频录制应用程序,以24 FPS的速度录制视频。

我正在尝试使用以下代码来锁定FPS为24:

Camera.Parameters params = mCamera.getParameters();
params.setPreviewFrameRate(24);
params.setPreviewFpsRange(24000, 24000);

以下是与MediaRecorder一起使用的CamcorderProfile:

CamcorderProfile ccp = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
ccp.videoFrameRate = 24;

不幸的是,它只在光线较暗的情况下拍摄视频时起作用,但一旦我走到有阳光的地方,视频就开始以30帧每秒的速度录制。

是否有可能在白天也将帧率锁定为24fps?

提前致谢!


请问您为什么想将帧率锁定在24fps?现在大多数应用程序使用29.97 FPS更为普遍。这可能是您可以在服务器端完成的事情吗?如果我的问题不太合理,那么很抱歉,因为我不了解您的应用程序的性质。 - blindstuff
我想要实现的是电影般的画质。我注意到相机在较低的FPS下捕捉到更高的质量。很难解释,但当你观看24 fps的视频并将其与29 fps的视频进行比较时,它以更好的方式呈现出不同的外观。 - MrByte
4个回答

1
public List<Integer> getSupportedPreviewFrameRates ()

请检查这个列表。我认为你不能设置那里没有列出的帧率。 这可能是因为Android操作系统中使用的编解码器进行了修改。


非常感谢您的回答。我已经检查了这些值,我得到了15000、30000和30000、30000。我的目标是达到每秒24帧的精确数量,所以我假设如果我将这些值更改为24000,它就能奏效,因为我的设备支持这个介于15000和30000之间的值。但是,如果除了这些值之外不能使用其他任何值,那么实际上无法实现吗? - MrByte

1
我建议您查看MediaRecorder:setCaptureRate(双倍fps)。
fps:每秒应捕获帧的速率。
要查询支持的内容:getPreviewFpsRange(int [])。
请注意,由于相机/编码器的限制,您的相机不能保证以给定的速率捕获帧。

谢谢你的回答。这个函数已经过时了。我也尝试过,但没有成功。我想要实现精确的帧率,不多也不少。 - MrByte

1

从我在Android上的个人经验来看,帧率和曝光之间存在依赖关系。我还没有用白平衡检查过,但也有可能存在。

那么为什么不将fps设置为24或其他某个值,以在某个时刻达到24fps。然后您可以持续检查当前fps,当它达到24fps时,您就可以设置setAutoExposureLock(true)(如果需要的话,还可以设置setAutoWhiteBalanceLock(true))。由于自动曝光的变化,帧率不会再改变。


简单而聪明。正如你所说,白平衡在FPS中似乎也起到了一定的作用。在我的情况下,将曝光锁定在稍低的FPS上就解决了问题。 - Cagan Arslan

0

可能您没有锁定自动白平衡和自动曝光。FPS 可能会受到环境的影响。尝试使用 setAutoExposureLock(true)setAutoWhiteBalanceLock(true)


谢谢您的回答,虽然它在某些情况下确实有用(当视频在低光环境下拍摄时),但它只适用于特定情况。例如,如果用户想在家里拍摄视频,然后在有光线的时候出去,相机将只显示“白屏”。此外,如果用户在有很多光线的情况下拍摄视频,FPS将锁定在30而不是我想要的24。 - MrByte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接