怎麼在視頻上疊加字幕和Logo--開題篇

     視頻疊加字幕和圖標(在某些地方也叫疊加OSD)在很多場合都很有用,比如電視臺在直播的節目上疊加臺標;美女主播在直播時在視頻上加上自己喜愛的飾物或大頭貼以增加娛樂的氣氛;電影播放時在視頻下方顯示中英文字幕。正因爲疊加字幕和圖標的技術用得比較廣,在我們日常工作中可能經常被用到,所以我們作爲程序員有必要掌握這種技術。

一般地,視頻製作、處理和發佈的流程爲:採集、編碼、保存爲文件,然後分享,而在用戶端,對視頻的處理一般是:讀取文件、視頻解碼、顯示。我們要疊加字幕首先要確定要在哪個階段疊加,是在發佈端(製作端)還是在用戶端。如果要把字幕固化到視頻(比如,一些外文電影的字幕已經打印到原視頻圖像上,用戶不需要另外找字幕文件),這時候就應該在發佈端處理好字幕。而如果是在用戶端疊加,那麼字幕可以不固化到視頻上,我們可以在顯示視頻的時候才把字幕輸出或顯示上去。針對前面兩種不同階段的疊加引出兩種常見的疊加字幕的技術實現方式。第一種方式是在視頻渲染的時候疊加上去。我們知道用OpenGL,Direct3D、GDI等圖像渲染API能將視頻圖像渲染到界面上,那麼字幕也可以用這些API畫到界面的某個位置上,按先畫視頻圖像再畫字幕的的順序輸出圖像,圖形繪製操作是在顯卡的後備緩存或前向緩存中進行,最終合成的畫面是在顯存裏面存儲,並沒有修改原視頻。另外一種方式修改原視頻的像素,將原圖像上指定位置的像素值用字符圖像的像素值代替,相當於將視頻圖像和字幕圖像兩個圖像的像素進行混合,混合原則是根據字幕圖像的文字顏色或Alpha通道值來決定目標像素值(什麼是Alpha通道以及Alpha通道有什麼用,後續博文中會進行解釋)。第二種疊加字幕方式因爲修改了視頻像素,字幕已經合成到視頻,所以比較適合在發佈端的階段用,但它也可以在用戶端需要呈現字幕的時候用,所以適用範圍比較廣。第一種方式顯示字幕的原理簡單,由於用到顯卡硬件資源來處理圖像,一般處理效率比較高,但是隻能在向用戶呈現視頻的時候顯示字幕,需要播放器支持,應用的場合比較狹窄。兩種技術實現方式很難說孰優孰劣,選擇哪種主要看應用場合,還有開發者對哪種技術比較熟悉。

我寫了兩篇文章分別介紹這兩種字幕疊加方式的技術實現,並每個文章給出一個相應的Demo。

第一篇博文《怎麼在視頻上疊加字幕和Logo--技術實現1》講解第一種方式(即渲染時疊加字幕)的技術實現。

第二篇博文《怎麼在視頻上疊加字幕和Logo--技術實現2》講解第二種方式(即修改視頻像素)的實現方法。

另外補充一篇博文《利用FFmpeg API進行字符疊加和加水印》講解基於FFmpeg的Filter濾鏡功能疊加字幕和水印(修改圖像像素的原理)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章