1

有沒有使用Camera API實現慢動作和延時錄製的方法?如何使用Camera API實現SlowMotion和TimeLapse視頻錄製

我嘗試使用MediaRecorder設置VideoFrameRate, VideoBitRateVideoCaptureRate但沒有爲我工作。

我已經成功地實現了使用JNI,但是我發現它花費了太多時間並且沒有優化。

如果您發現任何其他解決方案可用,請幫助我。

+0

這兩個挑戰是非常不同的。雖然SlowMotion依賴於高FPS本機相機支持,但TimeLapse可以使用MediaCodec執行。請參閱http://stackoverflow.com/questions/30972081/how-to-drop-frames-while-recording-with-mediacodec-and-inputsurface和https://github.com/saki4510t/TimeLapseRecordingSample –

+0

另一個開源項目是https://github.com/mercyorangi/sky-camera –

+0

@AlexCohn謝謝你的嘗試,但上面的代碼不適合我,在慢動作的情況下。 – IshRoid

回答

6

我解決我自己,我分享我工作一段代碼,只需使用Camera API慢動作和延時實現

開始之前,你必須知道的setCaptureRate(double fps)

集視頻幀捕獲率定義。 這可用於設置不同於錄製視頻播放速率的視頻幀捕獲率。此方法還將記錄 模式設置爲時間流逝。在時間推移錄像中,只錄像了 。如果應用程序設置它們,則在錄製會話開始時,時間流逝 會忽略與音頻相關的參數。

延時
對於時間的推移,你需要使用下面的相機配置文件,根據您的視頻幀的寬度和高度。 從下面的檔案中選擇一個,或者根據您的需要選擇其他人。

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_1080P); 

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_720P); 

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P); 

,現在你需要配置視頻setCaptureRatesetVideoEncodingBitRate

video_recorder.setCaptureRate(profile.videoFrameRate/6.0f); 
video_recorder.setVideoEncodingBitRate(profile.videoBitRate); 

,最後你需要在你配置的配置文件設置爲您MediaRecorder。

video_recorder.setProfile(profile); 

慢動作
對於慢動作,你還需要配置CamcorderProfile我使用流動配置的個人資料。

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH); 
video_recorder.setCaptureRate(profile.videoFrameRate/0.25f); 
video_recorder.setVideoEncodingBitRate(profile.videoBitRate); 
video_recorder.setProfile(profile); 

對於慢動作,你必須使用CameraAPI2否則將無法正常工作。

+0

你好,感謝你的回答,你知道一個已經捕捉到120幀/秒速率的Android相機應用程序(第三方)嗎?謝謝 –

+0

谷歌相機API 2樣品捕獲120fps。但API 2取決於設備硬件。 – IshRoid