藍松短視頻經驗分享----摳圖和動畫設計
短視頻處理LanSoEditor-SDK之摳圖和動畫設計
(此介紹,是在和我們客戶長期廣泛交流的基礎上,總結出大部分的客戶使用的方法。如果您有新的思路,也可采用,畢竟我們主要是設計架構。
註釋:我們的SDK每3周更新一次,以下功能是在2.8.2版本上列出的,可能不是最新的功能,請知悉;)
1,摳圖類:
摳圖就是把當前畫面中的某一部分輪廓提取出來,比如把畫面中的人物提取出來,然後放到特定的環境中。LanSoEditor-SDK當前摳圖和其他濾鏡一樣,是基於整個單一幀畫面進行的處理,暫時沒有做人臉識別,人臉檢測,背景分離等人工智能類的處理。
摳圖類的濾鏡有:
l 1.1,LanSongAlphaPixelFilter濾鏡:
去除畫面中綠色背景,從而把綠幕前的各種畫面摳出來,常用的場景是:錄制電影電視劇時, 演員在綠幕前表演,後期把綠幕扣除,把演員放到一個特定的環境中,
比如雲彩上, 舞臺上, 沙灘上, 高樓上等等
比如把一個表演者放到外太空的環境中。
支持實時摳圖, 支持把摳圖的畫面疊加在其他圖層中間,從而實時顯示摳圖後的場景;
(此濾鏡需要用到綠幕, 網上有賣便宜的綠幕,但大部分用在特定的場合,比如特定的電子娛樂設備, 唱吧體驗館等場合)。
l 1.2,LanSongAlphaWhiteFilter濾鏡:
把白色透明化, 比如人站在白墻邊做各種舞蹈,把白墻透明,只保留人物,起到摳圖的效果。相對扣綠色背景, 此濾鏡使用場合更廣泛, 畢竟白墻普遍存在,
l 1.3,LanSongMaskBlendFilter濾鏡:
把當前的畫面和一張白色圖片向參考, 圖片的白色部分顯示正常的畫面,圖片的透明部分, 正常的畫面也透明, 從而根據圖片的透明區域,來確定當前畫面的區域。 從而實現扣去畫面的某一部分。後期我們會增加Canvas的輸入, 從而您手指滑動哪裏,把哪部分透明; 圖片支持圖片序列, 支持動態透明。
l 1.4, 父類Layer中的二種畫面裁剪:
一種是基於XY軸的裁剪的矩形,
另一種是:基於某個中心為原點,設置半徑的裁剪; 此方法也是扣去畫面的某一部分,但實現較為簡單。
l 1.5,采用第三方摳圖SDK:
我們的DrawPadCameraView把數據拉出來, 輸入到第三方SDK中, 識別後,得到特征關鍵點, 根據關鍵點來計算出當前坐標,從而提取出特定畫面。 (在合作後,由我們收取少許費用幫您集成; 也可我們提供技術支持,你們自行集成)
l 1.6,我們計劃中, 有直接摳圖的技術,敬請期待,或聯系我們。
2.疊加動畫:
解釋:是在一個視頻的上面增加美工做的動畫效果,類似直播中的刷火箭,類似舞蹈畫面疊加一個桃花飄落的動畫,類似增加一個閃電動畫等等。
2.1,由於我們的SDK是基於容器和圖層的架構, 類似一層一層的畫面顯示, 故所有的畫面都可作為動畫,疊加在另一個的上面。
2.2,比較常見的動畫疊加有:
l 2.2.1 MV圖層疊加,
讓兩個視頻的組合成透明視頻,作為一個圖層,疊加到原視頻圖層上,好處是:制作簡單,不受限制,任何效果都可實現,調用方便。
l 2.2.2 雙視頻圖層
讓一個黑底的效果視頻,融合到另一個視頻中,好處是只需要一個視頻, 但有些效果在融合後顏色不對。
l 2.2.3 圖片圖層
采用多張PNG帶透明的圖片,在不同的時間來切換,形成動畫。好處是方便控制,清晰易懂。
l 2.2.4 Gif圖層
把Gif動畫直接疊加在視頻上。 建議小的動畫可直接疊加,大的動畫會造成Gif文件過大,浪費流量。
l 2.2.5 UI圖層。
如果視頻實時錄制,可以把各種開源炫酷的UI動畫疊加到視頻中, 也可以采用Lottie(一個強大的開源庫)直接把AE繪制好的動畫疊加到視頻中。
l 2.2.6 Canvas圖層。
android的強大的繪制類Canvas,可以直接移植各種開源的canvas類過來,也可自行繪制。 Canvas圖層在我們架構中是通過容器傳遞過來的時間戳主動繪制動畫。
l 2.2.7 AE圖層
我們後面計劃是 優化Lottie庫,讓Lottie也能工作在後臺, 以更方便一些動畫的繪制。 采用Lottie+json的形式, 原來需要1M的效果資源,現在只需要50k甚至更少即可完成,讓AE美工做好的文件, 直接導入到我們圖層, 省去了工程師的移植開發過程。
3,畫面本身動畫:
解釋:畫面本身動畫,是對當前圖層的畫面做一些動畫效果,比如靈魂出竅,從四周到中間對齊,顏色漸變,飛入,淡出,抖動,展開,濾鏡漸變等;這些動畫,本質是對畫面的每一幀做相關的操作;每一幀都操作了,隨著時間戳連貫起來,就形成了動畫。
3.1我們的父類Layer提供了10種的畫面操作方法,這些方法可單獨使用,也可多個一起使用,比如旋轉著進入到容器中,是設置旋轉+移動的兩個方法;
3.2比如靈魂出竅, 是把當前畫面克隆出一個子畫面,對子畫面做淡出+縮放的操作形成的效果。
3.3比如展開/閉合,是對畫面逐漸做區域顯示,然後顯示到最大/最小。
3.4比如抖動, 是對每幀畫面做左右的位置移動,間隔很小的移動, 就形成了抖動。
3.5有些濾鏡,不斷調節他們的參數值,也可以實現動畫效果。比如GPUImageSwirlFilter,調節setRadius半徑,可以實現把畫面卷起來的效果(有舉例)。
3.6另外,視頻圖層和音頻容器,支持時間靜止,時間拉伸,時間重復,調用這些也可以實現效果。 視頻畫面的倒序是另外一個單獨類實現。
藍松短視頻經驗分享----摳圖和動畫設計