2012-08-23 6 views
2

비디오 녹화 기능이있는 응용 프로그램을 작성하고 있습니다. 평상시에는 빛이 많은 시간대에 30fps의 비디오를 녹화 할 수 있습니다.낮은 조명으로 인해 비디오 녹화시 낮은 fps가 발생합니다.

그러나 빛이 적 으면 프레임 속도가 약 7.5fps로 떨어집니다 (정확히 동일한 코드 사용). 내 생각 엔 안드로이드는 노출 시간으로 무대 뒤에서 무언가를하고 결과 비디오의 이미지 품질을 최상으로 유지할 수 있습니다.

그러나 더 나은 품질의 이미지보다 높은 fps를 선호합니다. 노출이 문제라고 가정 할 때, 적절한 fps (15fps +)를 보장하기 위해 노출 시간을 제어 할 수있는 방법이 있습니까? setExposureCompensation()setAutoExposureLock() 기능이 있지만 아무 것도하지 않는 것 같습니다.

이전에이 문제가 있었던 사람이 있습니까? 내 문제를 일으키는 노출일까요?

어떤 조회수 나 제안 사항이 좋을 것입니다.

+0

여러 기기에서 사용해 보셨나요? 사용중인 기기에 자동 프레임 속도가있는 문제 일 수 있습니다. MediaRecorder.setVideoFrameRate (...)'... ** "의 문서에서 이것을 발견했습니다. 참고 : 자동 프레임 속도를 가진 일부 장치에서는 일정한 프레임 속도가 아닌 최대 프레임 속도가 설정됩니다. 실제 프레임 속도는 조명 조건에 따라 달라질 것입니다. "** – Squonk

+0

흥미롭게도 코드에서 프레임 속도를 설정했습니다. 내가 자동 프레임 속도 장치 (Google Nexus 7)를 가지고 있는지 어떻게 알 수 있습니까? 매개 변수'flatten()'을 검사했지만 문자열에서 볼 수있는 것이 없습니다. – Cheetah

답변

3

여기에 간단한 설명이 있습니다. 낮은 조명은 비디오에 더 많은 노이즈가 있음을 의미합니다. 더 많은 노이즈가 발생하면 인코딩 엔진은 필요한 압축을 얻기 위해 훨씬 더 많은 노력을 기울여야합니다. 인코더에 노이즈 제거기가없는 경우 인코딩 엔진은 일반적인 조건보다 처리 할 노이즈가 훨씬 많습니다.

좀 더 기술적 인 답변을 원할 경우 : 노이즈가 많을수록 인코더의 동작 추정 엔진이 던져 질 때 발생합니다. 이것은 최대 CPU주기를 소모하는 부분입니다. 노이즈가 많을수록 압축률이 떨어지고 따라서 엔코더의 다른 부분도 기본적으로 더 많이 처리됩니다. 더 많은 비트가 생성됩니다. 즉, 엔코딩 엔진과 엔트로피 엔진이 더 많이 처리되어 성능이 저하됩니다.

일반적으로 하이 엔드 카메라에서는 센서에서 이미징 파이프 라인으로 많은 노이즈가 제거됩니다. 그러나 휴대 전화 센서에서이를 기대하지 마십시오. [이것은 DSLR에서 볼 수있는 ISO 성능]입니다.

+0

그래서 노출은 실제로 문제가되지 않습니다. 조명이 나쁘다면 .. 할 수있는 일이별로 없습니다. 과다 노출은 보이는 것을 씻어 내릴 것입니다. – av501

+0

나는 당신이 말하는 것을 이해하고 있지만, CPU 사용량은 증가하지 않으며, 사용과 fps가 끝날 때까지 일정합니다. – Cheetah

+0

@Ben, 동일한 fps가 높은 CPU를 필요로하므로 CPU 사용량이 일정하게 유지되기 때문에 fps가 떨어지고 있습니다. 따라서 내부적으로 CPU 사용량이 제한되어 시스템이 정상적으로 유지되며 fps가 다양합니다. – av501

2

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가 일정 FPS를 얻기 위해 약 30

+0

SO @josef (-. – Audrius

0

이 잘, 당신은 setPreviewFpsRange()를 호출해야 머물 적용합니다. CCD로 인해 프레임 속도가 떨어지며, 빛이 적을 때 fps가 내려 가서 더 좋은 사진을 만들 수 있습니다 (스틸 모드에서).

또한 더 높은 프레임 속도를 달성하려면 사용해야

Camera.Parameters parameters=camera.getParameters(); 
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); 
parameters.setRecordingHint(true); 

camera.setParameters (파라미터);

2

죄송하지만 허용되는 대답은 완전히 잘못되었습니다. 사실이 문제를 해결하기 위해 계정을 만들었습니다.

어쨌든 비트율에 따라 잡음 정보가 삭제되지만, 왜 이것이 사람이 이것이 CPU에 추가 부하가 될 것이라고 생각하는지 이해할 수 없습니다.

실제로 모바일 장치의 비디오 프레임 속도는 노출과 관련이 있습니다. 조명이 약한 상황에서는 노출이 자동으로 증가하므로 셔터를 길게하여 더 많은 빛을 들여 놓을 수 있습니다. 그러면 초 단위로 캡처 할 수있는 프레임 수가 줄어들고 맨 위에 일부 동작 흐림 효과가 추가됩니다. DSLR 카메라를 사용하면 셔터 속도를 변경하지 않고 조리개를 더 밝게 변경할 수 있지만 휴대 기기에서는 조리개가 고정됩니다.

더 많은 fps를 얻으려면 노출 보정을 혼란스럽게 할 수 있지만, 나는 어둠의 슈퍼 비디오를 원하는 것으로 생각하지 않습니다.


자세한 정보; https://www.anyline.io/blog/2015/12/11/low-end-android-devices-and-the-exposure-triangle/