有沒有使用Camera API實現慢動作和延時錄製的方法?如何使用Camera API實現SlowMotion和TimeLapse視頻錄製
我嘗試使用MediaRecorder
設置VideoFrameRate
, VideoBitRate
VideoCaptureRate
但沒有爲我工作。
我已經成功地實現了使用JNI,但是我發現它花費了太多時間並且沒有優化。
如果您發現任何其他解決方案可用,請幫助我。
有沒有使用Camera API實現慢動作和延時錄製的方法?如何使用Camera API實現SlowMotion和TimeLapse視頻錄製
我嘗試使用MediaRecorder
設置VideoFrameRate
, VideoBitRate
VideoCaptureRate
但沒有爲我工作。
我已經成功地實現了使用JNI,但是我發現它花費了太多時間並且沒有優化。
如果您發現任何其他解決方案可用,請幫助我。
我解決我自己,我分享我工作一段代碼,只需使用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);
,現在你需要配置視頻setCaptureRate
和setVideoEncodingBitRate
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否則將無法正常工作。
你好,感謝你的回答,你知道一個已經捕捉到120幀/秒速率的Android相機應用程序(第三方)嗎?謝謝 –
谷歌相機API 2樣品捕獲120fps。但API 2取決於設備硬件。 – IshRoid
這兩個挑戰是非常不同的。雖然SlowMotion依賴於高FPS本機相機支持,但TimeLapse可以使用MediaCodec執行。請參閱http://stackoverflow.com/questions/30972081/how-to-drop-frames-while-recording-with-mediacodec-and-inputsurface和https://github.com/saki4510t/TimeLapseRecordingSample –
另一個開源項目是https://github.com/mercyorangi/sky-camera –
@AlexCohn謝謝你的嘗試,但上面的代碼不適合我,在慢動作的情況下。 – IshRoid