視頻水印添加及反色

icon

一.前言

曾經(jīng)有個(gè)項(xiàng)目要求給實(shí)時(shí)畫面添加時(shí)間水印驾讲,當(dāng)時(shí)在老大的帶領(lǐng)下岔乔,使用的方案是ffmpeg+freetype瞻佛,但是這種方案有兩點(diǎn)不太好

  1. 性能問(wèn)題梅忌,視頻分辨率設(shè)置為1920*1080時(shí)就有點(diǎn)處理不過(guò)來(lái)并且CPU略高
  2. 水印看不清問(wèn)題


    1.jpeg

因?yàn)槲覀兊臅r(shí)間水印是白色匕垫,這樣一旦背景是白色時(shí)僧鲁,就會(huì)導(dǎo)致水印看不到,當(dāng)時(shí)是給白色字體加了黑邊來(lái)規(guī)避這個(gè)問(wèn)題象泵,但是看到很多大廠都是用反色的方案


水印反色

二.實(shí)現(xiàn)思路

  1. 視頻畫面作為一路原始圖像輸入寞秃,背景透明的時(shí)間水印(背景的alpha值為0,時(shí)間字體的alpha值不為0)作為第二路的原始圖像輸入,然后判斷以下兩個(gè)條件同時(shí)成立偶惠,將時(shí)間水印的像素點(diǎn)變黑
    • 時(shí)間水印背景不透明時(shí)(也就是當(dāng)前渲染的像素點(diǎn)為時(shí)間像素時(shí))
    • 視頻背景為白色時(shí)
  2. 如何判斷視頻畫面為白色呢春寿,不會(huì)真的去判斷RGB三個(gè)像素都等于1.0把,這樣的代碼計(jì)算也太嚴(yán)格了點(diǎn)洲鸠,參考下面RGB轉(zhuǎn)YUV公式我們可以知道堂淡,當(dāng)RGB值都比較大時(shí),亮度分量Y的值也會(huì)比較大扒腕,因此這里我們用亮度分量Y來(lái)判斷绢淀,當(dāng)Y大于某個(gè)值時(shí),我們就覺得背景色比較白會(huì)導(dǎo)致我們的時(shí)間水印看不清了


    RGB轉(zhuǎn)換YUV公式
  3. 采用OpenGL用GPU代替CPU的方式來(lái)做圖像處理瘾腰,增加效率

三.實(shí)現(xiàn)后的效果

3F1D8F41-8313-4B6A-A918-48F30A805528.jpeg

四.關(guān)鍵代碼

  1. 生成時(shí)間水印
- (UIImage *)string2image皆的;
- (char*)image2pixel:(CGImageRef)image;
  1. shader判斷當(dāng)背景亮度大于0.85時(shí)將時(shí)間像素變?yōu)楹谏?/li>
// gray是Y分量的大小
time = mix(time, vec4(vec3(0.0), time.a), step(0.85, gray));
  1. shader判斷當(dāng)時(shí)間水印像素點(diǎn)不透明度大于0.9時(shí)顯示時(shí)間水印像素蹋盆,否則顯示視頻畫面
time = mix(result, time, step(0.90, time.a));

五.遇到的問(wèn)題

  1. 用UIGraphicsBeginImageContextWithOptions開啟包含透明通道的位圖并用NSString的drawInRect畫字符串上去時(shí)以為只要有字符串的地方alpha一定是1.0费薄,然后判斷alpha只有為1.0時(shí)才顯示時(shí)間,結(jié)果導(dǎo)致時(shí)間水印顯示不全栖雾,后來(lái)一個(gè)像素一個(gè)像素去讀才發(fā)現(xiàn)并不是有時(shí)間像素的位置alpha一定是1.0
  2. 時(shí)間水印在OpenGL中的紋理環(huán)繞方式之前用的GL_REPEAT楞抡,結(jié)果導(dǎo)致時(shí)間水印顯示不出來(lái),改用GL_CLAMP_TO_EDGE后正常析藕,這個(gè)問(wèn)題是沒(méi)有找到原因的召廷,因?yàn)檫@兩個(gè)參數(shù)按道理是超出紋理坐標(biāo)后的貼圖方式,個(gè)人不覺得在這個(gè)Demo里會(huì)影響水印顯示的账胧,希望有高人能指出原因吧竞慢。

六.總結(jié)

  1. Demo在1920x1080 30fps 渲染時(shí)的CPU大概維持在百分之8左右,加入時(shí)間水印的邏輯后CPU大概在百分之14左右治泥,因此在性能上是沒(méi)問(wèn)題的
  2. OpenGL的學(xué)習(xí)個(gè)人感覺難度還是不小的筹煮,因?yàn)镺penGL的接口出錯(cuò)不那么好定位,而且稍微有調(diào)用接口順序不對(duì)居夹,就容易黑屏败潦,因此定位問(wèn)題需要更扎實(shí)的理論基礎(chǔ)本冲,繼續(xù)加強(qiáng)學(xué)習(xí)吧
  3. 剛開始學(xué)習(xí)OpenGL的同學(xué)可以跟著這位大神的博客,本人最開始學(xué)習(xí)就參考了他的很多文章及Demo
    落影l(fā)oyinglin:OpenGLES

七.參考書籍及文章

天天P圖攻城獅:OpenGL shader性能優(yōu)化策略一減少分支語(yǔ)句
LearnOpenGL CN-紋理
Dev_Maskmale:iOS 開發(fā)之字符串轉(zhuǎn)圖片
書籍:音視頻開發(fā)進(jìn)階指南(基于Android與iOS平臺(tái)的實(shí)踐)

八.Demo地址

視頻水印添加及反色 Demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末变屁,一起剝皮案震驚了整個(gè)濱河市眼俊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粟关,老刑警劉巖疮胖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闷板,居然都是意外死亡澎灸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門遮晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)性昭,“玉大人,你說(shuō)我怎么就攤上這事县遣∶拥撸” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵萧求,是天一觀的道長(zhǎng)其兴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夸政,這世上最難降的妖魔是什么元旬? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮守问,結(jié)果婚禮上匀归,老公的妹妹穿的比我還像新娘。我一直安慰自己耗帕,他們只是感情好穆端,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仿便,像睡著了一般徙赢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上探越,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音窑业,去河邊找鬼钦幔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛常柄,可吹牛的內(nèi)容都是我干的鲤氢。 我是一名探鬼主播搀擂,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卷玉!你這毒婦竟也來(lái)了哨颂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤相种,失蹤者是張志新(化名)和其女友劉穎威恼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寝并,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箫措,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衬潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斤蔓。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖镀岛,靈堂內(nèi)的尸體忽然破棺而出弦牡,到底是詐尸還是另有隱情,我是刑警寧澤漂羊,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布驾锰,位于F島的核電站,受9級(jí)特大地震影響拨与,放射性物質(zhì)發(fā)生泄漏稻据。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一买喧、第九天 我趴在偏房一處隱蔽的房頂上張望捻悯。 院中可真熱鬧,春花似錦淤毛、人聲如沸今缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姓言。三九已至,卻和暖如春蔗蹋,著一層夾襖步出監(jiān)牢的瞬間何荚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工猪杭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留餐塘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓皂吮,卻偏偏與公主長(zhǎng)得像戒傻,于是被迫代替她去往敵國(guó)和親税手。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容