Android相机开发 延时摄影的一些实现思路
??? 最近在做一款相機相關app,因為里面功能蠻多,所以除了基本的相機操作,其他的像慢動作、延時攝影、濾鏡、直播這些都很費工夫,那么今天就來和大家探討一下延時攝影的一些實現思路。
??? 延時攝影,簡單來講就是將一段時間很長的視頻,錄制到很短的時間里,相對于慢動作來說,可以稱之為快動作。看過人與自然之類節目的,想想里面的那些植物從發芽到枝繁葉茂,或者某個地方一年四季地貌變換的快速鏡頭就知道了。具體到手機上來說,比如我們每秒錄制1幀,而錄制出來的視頻播放速率是每秒60幀,那么本來錄制了一分鐘的視頻播放只有1秒鐘,可以說他是加速了60倍。
??? 下面就來講一下一些實現思路,由于參考資料較少,如有更好實現方式還請賜教,按照安卓官網給出的提示,視頻錄制時有兩個概念,一個capture rate和一個frame rate,即采樣速率和幀速率,分別表示從相機獲取數據的速率和播放時的速率,所以普通視頻我們設置兩個速率相同即可,而錄制慢動作或者延時攝影時兩者應該成一定的倍數關系,同時bit rate比特率也應做相應調整,那么具體實現的時候遇到的問題是,使用media codec和media format通過配置相關參數來實現的錄制方式參數配置無效,也沒有找到可參考的demo,而用mediarecorder實現的方式也有一定的局限,比如一些手機前置鏡頭不支持前面說的采樣速率和幀速率不同,另外一個問題是,采樣速率最少為1,也就是每秒最少一幀,這樣也就限制了它的加速倍數不會太高,因為實際情況很可能幾秒甚至幾分鐘才錄一幀;后來研究發現可以使用的幾種方式是:使用open cv 的 videowriter來寫數據,速率可以自己把握,數據來源是相機callback的onpreviewframe中的data,因為open cv有配套的Java代碼,所以操作并不難,缺點是需要導入opencv的so庫和jar包,并且只能錄制avi格式的視頻,而這種視頻體積較大,在安卓上操作也沒有mp4格式好使,所以最后放棄了,考慮過的優化方式為為open cv加入h264編碼的支持,即引入x264庫并編寫相關本地代碼等,鑒于研究較少暫時放棄;另一種思路就是目前的做法,即仍然使用media codec和media format,但是參數配置和普通視頻相同,只是為muxer添加數據的drainencorder方法的調用時間間隔和時間戳由我們自己控制,而不是像之前的每來一幀就填充,比如第一幀的時間為獲取當前時間,后面的時間戳在此基礎加一個固定值即可,至于數據來源,既可以是onpreviewframe,也可以是ondrawframe,或者其他,具體看自己的項目。
??? 以上就是目前自己的一些實現思路,聽說通過ffpemg也可以進行相關操作,暫時也沒研究,各位安卓小伙伴如有更好的方法或實現思路也請不吝賜教,在此謝過!!!
總結
以上是生活随笔為你收集整理的Android相机开发 延时摄影的一些实现思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Exynos 4412处理器IIC总线控
- 下一篇: axios 的responseType