Android開源:高仿微信視頻錄制,涂鴉水印添加

QuyenRLS 7年前發布 | 32K 次閱讀 FFmpeg 安卓開發 Android開發 移動開發

WeiXinRecordedDemo

功能主要包含5點:

1.基于ffmpeg的視頻拍攝及合成;

2.自定義拍攝按鈕, 長按放大并且顯示拍攝進度;

3.自定義view, 實現手繪涂鴉;

4.自定義可觸摸旋轉縮放位移的表情文字view;

5.基于ffmpeg的圖片和視頻合成處理.</code></pre>

界面風格高仿微信, 只不過微信的編輯處理是作用于圖片, 而我們的是基于視頻, 所以如果你有需求, 把視頻編輯處理換成圖片編輯, 更是簡單.

1.實現使用ffmpeg錄制視頻

首先導入lib庫和ffmpeg的錄制java文件, 我使用的是第三方VCamera封裝的ffmpeg, 他沒有jar包, 所以需要將con.yixia包下的所有文件都copy過來,

然后在application里面初始化VCamera:

這個時候, 你就可以在SurfaceView上看見拍攝預覽界面了,

然后mMediaRecorder.startRecord()拍攝視頻,

調用mMediaRecorder.stopRecord()停止錄制視頻,

因為拍攝出來的文件是ts視頻流, 所以還要調用mMediaRecorder.startEncoding()開始合成MP4視頻文件.

MediaRecorderBase類還可以設置視頻各個參數, 如:

2.自定義拍攝按鈕, 長按放大并且顯示拍攝進度

自定義RecordedButton繼承View, 在onDraw里分三部分繪制:

在拍攝模式下, 改變radius(半徑), 達到放大或者縮小外圈和內圈圓的效果, 不斷增加girth值達到顯示拍攝進度的效果, 是不是很簡單.

3.自定義view, 實現手繪涂鴉

自定義TuyaView繼承View, 重寫onTouch(), 在手指點下和移動時實時繪制觸摸軌跡:

在手指按下時創建new Path()對象, 記錄本次手指觸摸移動軌跡, 并且實時調用invalidate() 達到不斷調用onDraw()的目的, 然后使用canvas.drawPath(path,paint)繪制觸摸路徑, 是不是非常簡單.

4.自定義可觸摸旋轉縮放位移的表情文字view

這個view稍微有點麻煩, 但我單獨寫了一篇文章 點擊跳轉 , 非常詳細的講解了這個view, 而且封裝的非常好, 只要addView到布局中就可以使用了, 大家可以點擊鏈接過去看一下.

5.基于ffmpeg的圖片和視頻合成處理

這也是demo的最后一步, 將涂鴉,和表情文字全部合成到視頻當中, 首先是得到需要合成的圖片, 我們可以通過view.draw(Canvas canvas),得到布局的bitmap:

然后通過ffmpeg來執行圖片和視頻的合成, 具體語句是這樣的:

ffmpeg -i videoPath -i imagePath -filter_complex overlay=0:0 -vcodec libx264 -profile:v baseline -preset ultrafast -b:v 3000k -g 25 -f mp4 outPath

我把參數講解一下: videoPath代表你要編輯視頻的路徑

imagePath代表你要合成的圖片路徑

outPath是合成之后的輸出視頻路徑

這些是我們需要替換的參數至于一些別的, 例如:

overlay=0:0表示圖片坐標位置, 0:0表示x軸=0,y軸=0

-vcodec后面表示視頻輸出格式, 3000k碼率, 25幀數, 總之ffmpeg的參數還有很多, 如果感興趣可以去ffmpeg官網看命令大全.

向UtilityAdapter.FFmpegRun()里傳入ffmpeg語句就可以執行了, 返回值 int , 如果等于0就是成功, 非0則是失敗, FFmpegRun()方法的第一參數如果傳入空字符串就是異步執行視頻處理, 否則就是同步執行, 這點要注意.

如果這篇文章對大家有所幫助, 希望可以點一下star哦, 我會經常在上面分享我工作中遇到的問題和酷炫的特效實現.

 

 

 

 本文由用戶 QuyenRLS 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!