我正在编写一个具有视频录制功能的应用程序。在光线充足的正常日光下,我可以拍摄30fps的视频。
但是,当光线较少时,帧速率会降至7.5fps左右(代码完全相同)。我的猜测是android正在幕后做一些曝光时间,以确保产生的视频具有最佳的图像质量。
但是,我更喜欢更高的fps,以获得更高质量的图像。假设曝光是问题,有没有办法控制曝光时间,以确保一个像样的fps(15fps +)。功能setExposureCompensation()
和setAutoExposureLock()
但它们似乎什么都不做。
以前有人有这个问题吗?甚至曝光是否会导致我的问题?
任何点击/建议都会很棒。
答案 0 :(得分:4)
这里有一个简单的解释。较低的灯光意味着视频中存在更多噪音。随着噪声的增加,编码引擎必须付出更多努力才能获得所需的压缩。除非编码器具有降噪器,否则编码引擎的处理噪声远远超过正常情况。
如果你想要一个更技术性的答案:更多的噪音意味着编码器的运动估计引擎被扔掉了。这是消耗最大CPU周期的部分。噪声越大,压缩越差,因此编码器的其他部分基本上也越来越嘎吱嘎吱。生成更多的比特,这意味着编码和熵引擎也更多地处理,因此性能更差。
通常在高端相机中,传感器中的成像管道会消除很多噪音。但是不要指望在手机传感器中。 [这是您在DSLR中看到的ISO性能]。
答案 1 :(得分:4)
我很抱歉,但接受的答案是完全错误的。事实上,我创建了一个帐户只是为了纠正这个问题。
根据比特率,噪声信息会被丢弃,我不明白为什么会有人认为这会对cpu造成额外的负担。
事实上,移动设备上的视频帧率与曝光有很大关系。在光线不足的情况下,曝光会自动增加,这也意味着快门将保持打开更长时间以让更多光线进入。这将减少您在一秒钟内捕获的帧数,并在顶部添加一些运动模糊。使用数码单反相机,您可以更改光圈以获得更多光线,而不会触及快门速度,但在移动设备上,光圈是固定的。
你可以搞乱曝光补偿以获得更多的fps,但我不认为超级暗视频是你想要的。
更多信息; https://www.anyline.io/blog/2015/12/11/low-end-android-devices-and-the-exposure-triangle/
答案 2 :(得分:3)
我遇到了Android 4.2 Galaxy S III的这个问题。在试验参数后发现一个开始工作的调用。
查看Camera.Parameters,如果你打印出来,你会看到:
preview-fps-range=15000,30000;
preview-fps-range-values=(8000,8000),(10000,10000),(15000,15000),(15000,30000),(30000,30000);
range
允许fps“减速”。
通话setPreviewFpsRange(30000, 30000);
强制fps保持在30左右。
答案 3 :(得分:1)
这是对的,你应该调用setPreviewFpsRange()
来获得常量fps。您看到的帧速率因CCD而下降,当光线较低时fps会下降,因此可以产生更好的图像(在静止模式下)。
为了获得更高的帧速率,您应该使用:
Camera.Parameters parameters=camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
parameters.setRecordingHint(true);
camera.setParameters(参数);