《FFmpeg Basics》中文版-10-為視頻添加文字

寫在前面

如果您對音視頻技術感興趣,可以訂閱我的專題:音視頻專輯
也可以關注我的簡書賬戶: 張芳濤荤傲,我后期會發(fā)布更多的音視頻以及圖像處理方面的文章颈渊。

正文

視頻中包含的文本數據可以顯著提高其信息質量终佛。

在視頻中添加文字的相關介紹

如何將一些文本添加到視頻輸出中的兩種常用方法是使用前一章中的字幕或疊加技術(overlay)雾家。 具有許多可能性的最高級選項是使用表中描述的抽象濾鏡:

描述 從文本文件或字符串在視頻中添加文本芯咧,并使用各種參數進行修改。 文本從文本文件參數指定的文件中加載邪铲,或直接使用文本參數輸入无拗。 其他必需參數是指定選定字體的字體文件。 文本位置由x和y參數設置英染。
Syntax drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[...]]]
p3,p4 ...表示參數#3永丝,參數#4等
********** 參數的描述
box 如果box=1箭养,在文本周圍繪制一個方框,顏色由boxcolor參數設置喝检,默認值為0
boxcolor 顏色為box參數撼泛,顏色名稱或0xRRGGBB[AA]格式(詳見第1章的顏色名稱),默認值為白色
draw 表達式指定如果表達式求值為0時损俭,是否應該繪制文本潘酗,則不繪制文本,默認為“1”仔夺。它用于指定只在特定條件下繪制文本。接受的變量和函數將在下一頁和本章的內置數學函數中描述
fix_bounds 如果是true日裙,文本坐標是固定的,以避免剪切
fontcolor 用于繪制字體受神、顏色名稱或0xRRGGBB[AA]格式的顏色格侯,默認為黑色
fontfile 字體文件用于繪制文本的正確路徑,強制參數
fontsize 要繪制的文本字體大小,默認值為16
ft_load_flags 用于加載字體的標志瓢宦,默認值是“render”;更多信息在FT_LOAD_* libfreetype標志的文檔中
shadowcolor 在繪制的文本、顏色名稱或0xRRGGBB[AA]格式后面繪制陰影的顏色鱼辙,可能后面跟著一個alpha說明符玫镐,默認值是黑色
shadowx, shadowy x和y抵消了文本陰影位置對文本位置的影響,它們可以是正的杜跷,也可以是負值矫夷,兩者的默認值是“0”
tabsize 用于呈現(xiàn)選項卡的空間大小,默認值為4
timecode hh:mm:ss[:;]ff格式淑趾,可以使用或不使用文本參數忧陪,但必須指定timecode_rate參數
timecode_rate, rate, r timecode幀率(僅限時間)
text 要繪制的文本字符串,必須是UTF-8編碼的字符序列延蟹,如果沒有指定textfile參數更卒,該參數是必需的
textfile 文本文件與要繪制的文本,文本必須是一個UTF-8編碼字符序列;如果不使用文本參數蹂空,則該參數是強制性的;如果指定了文本和文本文件參數果录,則顯示一條錯誤消息
x, y x和y值是表示文本將在視頻幀中繪制的偏移量的表達式;它們相對于左上角弱恒,而x和y的默認值為“0”;下面描述了接受的變量和函數
*********** 接受變量和函數表達式中的x和y參數
dar 輸入顯示縱橫比棋恼,與(w / h) * sar相同
hsub, vsub 水平和垂直的色度子樣本值。例如义起,像素格式的“yuv422p”hsub是2师崎,而vsub是1
line_h, lh 每個文本行的高度
main_h, h, H 輸入的高度
main_w, w, W 輸入的寬度
max_glyph_a, ascent 從基線到最高/上格坐標的最大距離,用于放置一個字形輪廓點齐蔽,用于所有呈現(xiàn)的字形;一個正值床估,由于網格
max_glyph_d, descent 從基線到最低網格坐標的最大距離,用于放置一個字形輪廓點谈况,用于所有呈現(xiàn)的字形;一個負值递胧,由于網格
max_glyph_h 最大字形高度,即所呈現(xiàn)文本中所包含的所有字形的最大高度泼诱,相當于上升下降
max_glyph_w 最大的字形寬度赊锚,這是在呈現(xiàn)的文本中所包含的所有字形的最大寬度
n 輸入框的數目,從0開始
rand(min, max) 返回最小值和最大值之間的隨機數
sar 輸入樣本比例
t 時間戳以秒表示舷蒲,如果輸入時間戳未知
text_h or th 呈現(xiàn)文本的高度
text_w or tw 渲染文本的寬度
x, y x和y坐標牲平,在這里文本被繪制,這些參數允許x和y表達式相互引用,所以你可以指定y=x/dar

例如启绰,要在白色背景上使用黑色字體的Arial字體繪制一個受歡迎的消息(默認位于左上角)沟使,我們可以使用該命令(字符在一行上鍵入):

ffplay -f lavfi -i color=c=white ^ -vf drawtext=fontfile=/Windows/Fonts/arial.ttf:text=Welcome

在Linux上,TTF字體位于文件夾“/usr/share/字體/TTF”中着倾。結果如下圖:


我的測試命令如下:

ffplay -f lavfi -i color=white -vf drawtext=fontfile=/Library/Fonts/Baskerville.ttc:text=Welcome

顯示的效果如圖:


如果難以指定字體文件的路徑卡者,則可以將字體文件(例如arial.ttf)復制到當前目錄客们,以便將前面的命令簡化為表單:

ffplay -f lavfi -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcome
  • 這個我就不測試了,太簡單了。岳守。。涝缝。譬重。。

使用ffmpeg的例子臀规,省略“-f lavfi -i顏色=c=白色”,并包含輸入和輸出文件:

ffmpeg -i input -vf drawtext=fontfile=arial.ttf:text=Welcome output

我的測試命令如下:

 ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf drawtext=fontfile=/Library/Fonts/Baskerville.ttc:text=Welcome /Users/zhangfangtao/Desktop/newTest.mp4 

效果圖如下:(在右上角玩徊,看到了么谨究,特別小)

右上角畔塔,看到了么

為了關注其他參數,下面的示例將指定位于當前目錄中的字體文件把敢,您可以根據實際的字體文件位置來包含路徑棚辽。

文本定位

文本位置設置為指定為需要值的x和y參數,這是可以包含變量的數學表達式榔组,以及在上一頁中描述的特殊的rand()函數

水平位置設置

水平文本放置是通過將x坐標設置為需要值來管理的联逻,例如,從左側放置文本40像素包归,我們使用x=40。表達式x=(w-tw)/2將文本定位到中心换可,其中tw為文本寬度厦幅,w為幀寬度。為了將文本對齊到右邊译荞,我們使用x=w-tw的表達式休弃。

垂直位置設置

y坐標的設置決定了水平文本位置,例如篙骡,我們用y=50來定位文本50像素。表達式y(tǒng)=(h-th)/2將文本放置到中心医增,其中th為文本高度老虫,h為幀高度。對于對齊到底部忽刽,我們使用表達式x=h

下一個示例文本在一個中心位置的視頻幀,請注意,該文本包含空格或制表符必須被引號括起來,有時ffmpeg引擎也需要引用所有drawtext參數,所以所有參數的下一個命令使用雙引號和單引號的文本參數(單引號和雙引號可以交換,但不能混合):

ffplay -f lavfi -i color=c=white -vf ^ drawtext="fontfile=arial.ttf:text='Good day':x=(w-tw)/2:y=(h-th)/2"

我自己的測試命令:

ffplay -f lavfi -i color=c=white -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Baskerville.ttc:text='Good day ,How are you?’:x=(w-tw)/2:y=(h-th)/2"

效果圖:

image.png

字體大小和顏色設置

為了使文本更醒目、更有趣今膊,使用了比默認16像素更大字體的彩色文本伞剑。使用其他參數fontcolor和fontsize,我們可以修改前面的例子黎泣,以30像素字體大小為中心的綠色文本“Happy Holidays”:

ffplay -f lavfi -i color=c=white -vf drawtext=^ "fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:^ fontcolor=green:fontsize=30"

我自己的測試命令:

ffply -f lavfi -i color=c=white -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Baskerville.ttc:text='Happy Holidys':x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=30"

顯示的效果:

為了改變背景色褐着,從綠白到黃藍,我們用藍色的值替換白色含蓉,用黃色的值代替綠色项郊,字體大小的值增加到40:

ffplay -f lavfi -i color=c=blue -vf drawtext=^ "fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:^ fontcolor=yellow:fontsize=40"

顏色也可以用HTML格式指定,例如紅色=#ff0000差油,綠色=#00ff00,等等。

我的測試命令:

ffplay -f lavfi -i color=c=green -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Baskerville.ttc:text='Happy Holidys':x=(w-tw)/2:y=(h-th)/2:fontcolor=red:fontsize=40"

顯示的效果:

動態(tài)文本

表示時間的t(時間)變量可以根據當前時間改變x和y值侈咕。

文字水平運動

要將文本橫向移動到視頻幀中器紧,我們將t變量包括到x參數的表達式中,例如铲汪,在右向左方向以n個像素每一秒移動提供的文本,我們使用x=w-tn的表達式狰住。為了將運動改變?yōu)閺淖蟮接业姆较虺萘海褂脁=w+tn的表達式肮蛹。例如创南,要顯示“動態(tài)RTL文本”字符串在頂部移動,我們使用命令昆码。

ffmpeg -f lavfi -i color=c=#abcdef -vf drawtext=^ "fontfile=arial.ttf:text='Dynamic RTL text':x=w-t*50:^ fontcolor=darkorange:fontsize=30" output

我的測試命令:

ffmpeg -f lavfi -i color=#abcdef -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Baskerville.ttc:text='Dynamic RTL Text':x=w-t*50:fontcolor=orange:fontsize=30" -t 15 /Users/zhangfangtao/Desktop/newTest.mp4 

效果圖如下:

更常見的用法是在底部附近滾動一行文本赋咽,文本位于文本文件中芥备,該文本文件只包含一條非常長的行。下一個示例使用帶有值info.txt的textfile參數萌壳。

ffmpeg -f lavfi -i color=c=orange -vf drawtext="fontfile=arial.ttf:^ textfile=info.txt:x=w-t*50:y=h-th:fontcolor=blue:fontsize=30" output

信息的內容。txt文件如下缤骨,下面是在t=5時滾動的圖片尺借。

這是一個添加到橙色背景的文本,使用帶有30像素字體大小的Arial字體的drawtext過濾器燎斩。


我的測試命令:

ffmpeg -f lavfi -i color=orange -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Songti.ttc:textfile=/Users/zhangfangtao/Desktop/test.rtf:x=w-t*50:y=h-th:fontcolor=blue:fontsize=30" -t 50 /Users/zhangfangtao/Desktop/newTest.mp4 

顯示的效果:

垂直文本運動

文本垂直滾動從底部到頂部是常用的視頻顯示生產商的名稱,演員,日期,等栅表。文本垂直移動,t變量包含y參數的表達式,例如移動提供的文本每一秒×n像素從上到下,我們使用一個表達式y(tǒng) = t * n。從下到下滾動萧落,使用y=h-t*n洗贰。下一個命令顯示信用文件的內容,從底部向上移動敛滋,速度為每秒100像素。信用檔案的內容爹脾,包括開始的空格處是:
ffmpeg -i palms.avi -vf drawtext="fontfile=arial.ttf:textfile=Credits:^ x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30" clip.mp4

我的測試命令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf drawtext="fontfile=/Users/zhangfangtao/Desktop/Songti.ttc:textfile=/Users/zhangfangtao/Desktop/test.txt:x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30" -t 100 /Users/zhangfangtao/Desktop/newTest.mp4

效果圖:(從下往上滑動)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末灵妨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子货抄,更是在濱河造成了極大的恐慌,老刑警劉巖蟹地,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藤为,死亡現(xiàn)場離奇詭異,居然都是意外死亡分别,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門耘斩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桅咆,“玉大人,你說我怎么就攤上這事岩饼。” “怎么了籍茧?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵硕糊,是天一觀的道長腊徙。 經常有香客問我,道長撬腾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任胰默,我火速辦了婚禮场斑,結果婚禮上漏隐,老公的妹妹穿的比我還像新娘奴迅。我一直安慰自己,他們只是感情好取具,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产阱,像睡著了一般块仆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榨乎,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音蜜暑,去河邊找鬼。 笑死隐绵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拙毫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼峭跳,長吁一口氣:“原來是場噩夢啊……” “哼缺前!你這毒婦竟也來了?” 一聲冷哼從身側響起衅码,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垛玻,沒想到半個月后割捅,有當地人在樹林里發(fā)現(xiàn)了一具尸體帚桩,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年颊乘,在試婚紗的時候發(fā)現(xiàn)自己被綠了醉锄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡檩小,死狀恐怖烟勋,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情卵惦,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布丛塌,位于F島的核電站畜疾,受9級特大地震影響,放射性物質發(fā)生泄漏啡捶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一彤敛、第九天 我趴在偏房一處隱蔽的房頂上張望了赌。 院中可真熱鬧,春花似錦揍拆、人聲如沸茶凳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辩恼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疆前,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工竹椒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留米辐,地道東北人胸完。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像赊窥,于是被迫代替她去往敵國和親狸页。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言脖卖,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,203評論 9 467
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理畦木,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程唇礁,因...
    小菜c閱讀 6,365評論 0 17
  • 她是一個很單純的女孩砸讳,看著那個坐在她后排的男生打動了她年少的心扉。他們戀愛了漾抬,很單純很單純的戀愛,每天寫一封信奋蔚,互...
    某某人_3794閱讀 221評論 0 0
  • 文字BY張永彬 有些事烈钞, 已經過去。 過去的60天毯欣, 值得我永遠想念。 有過失敗酗钞, 有過沮喪, 有過憤怒砚作, 還有過...
    張永彬敏捷管理閱讀 592評論 0 1