前幾天,Anthony跟我聊,說他找到一個(gè)開源的庫,可以做Chromakey,問我能不能用它來做點(diǎn)好玩的事情。我還是第一次聽說Chromakey,抓緊查了查,懂了,不就是個(gè)虛擬演播室么。以前,參加各種新科技展會(huì)的時(shí)候曾玩過幾次。大致是,你站在一個(gè)綠幕(有的也用藍(lán)幕)前面,表演各種動(dòng)作,后期進(jìn)行圖像處理時(shí)就可以把背景去掉,然后拼接到一個(gè)更煊的背景上,然后,你就可以在中央電視臺(tái)直播,或者在夏威夷海灘上寫代碼了。
這種技術(shù)也多用在電影里,在綠幕前拍攝,后期處理時(shí)把背景去掉,就可以把人拼到任何煊酷的場(chǎng)景了。
當(dāng)然,作為一個(gè)程序員,我只想寫代碼。
為了能優(yōu)雅地在夏威夷海灘上寫代碼,我也是拼了。對(duì)著那個(gè)庫的文檔和代碼看了半天,得出結(jié)論,太復(fù)雜,光編譯就得依賴許許多多的庫,而我們還要做跨平臺(tái),不大好弄。那個(gè)庫叫OpenShot。
后來,又仔細(xì)研究了一下里面的算法,查了一些資料,發(fā)現(xiàn),算法其實(shí)不難。無非就是有幾個(gè)公式,逐一計(jì)算每個(gè)像素跟背景色的差異,如果跟背景差異少,則把背景做成透明的。只是,算法復(fù)雜度比較高,因?yàn),一?080p的圖像,會(huì)有1920x1080個(gè)像素點(diǎn)。
得了,不管怎么樣,挽起袖子自己做。在一個(gè)月黑風(fēng)高的晚上,正趕上出差,在酒店昏暗的燈光下把代碼寫好了。
其實(shí)該技術(shù)需要一個(gè)主要的道具就是綠幕(或藍(lán)幕,理論上任何單色的都可以,但紅色跟人的膚色近,所以少用,一說歐美人的眼睛是藍(lán)色的,所以多用綠幕),而我現(xiàn)場(chǎng)沒有道具,就把代碼發(fā)給Anthony,說你試試效果吧,結(jié)果,他團(tuán)隊(duì)所有人都試了。
昨天,著名FreeSWITCH網(wǎng)紅Seven Du就在網(wǎng)上用FreeSWITCH搞起了直播,為FreeSWITCH精英群會(huì)員講FreeSWITCH,為了演示這一神奇的技術(shù),他還把Ken的圖片當(dāng)成了背景,雖然他連個(gè)綠幕都沒有,燈光也不明亮,但整體效果還不錯(cuò)。
當(dāng)然,后來,還為改進(jìn)算法糾結(jié)了好幾天,Anthony又加了些代碼,把背景換成了視頻,外國人真會(huì)玩。
Anthony還在家里開起了汽車
其實(shí)上面的視頻有個(gè)Bug。你發(fā)現(xiàn)了嗎?當(dāng)然,這個(gè)Bug現(xiàn)在已經(jīng)修好了,但你很有幸看到了一個(gè)帶Bug的視頻。
上面?zhèn)鞯膱D片多是一些早期的圖片和視頻,所以,如果仔細(xì)觀察,會(huì)發(fā)現(xiàn)畫面的邊緣還是有些拖泥帶水。
我已經(jīng)把這部分最新的代碼寫到了《FreeSWITCH源代碼分析》里,感興趣的話,買一本看看吧。
話說,還有不到一個(gè)月我們的FreeSWITCH培訓(xùn)班就開班了。好多人誤以為FreeSWITCH只是用來打電話的,但其實(shí),F(xiàn)reeSWITCH能做的事情很多很多,要不要來上海切磋切磋?