多媒體開發(4):在視頻上顯示文字或圖片--ffmpeg命令

小白:我錄了段視頻,裏面用的音樂是有版權的,並且快過時了,能把音樂去掉嗎?

小程拿到視頻後,一個快捷鍵打開命令終端,快速打下一行命令:html

ffmpeg -i 小白.flv -vcodec copy -an -f mp4 quiet.mp4

一個只有視頻圖像的文件就誕生了。git

聲畫分離,這固然只是ffmpeg命令的一個應用場景。macos

那麼,FFmpeg是什麼呢?bash

來看看百度百科的解釋:服務器

FFmpeg是一套能夠用來記錄、轉換數字音頻、視頻,並能將其轉化爲流的開源計算機程序。採用LGPL或GPL許可證。它提供了錄製、轉換以及流化音視頻的完整解決方案。它包含了很是先進的音頻/視頻編解碼庫libavcodec,爲了保證高可移植性和編解碼質量,libavcodec裏不少code都是從頭開發的。

FFmpeg在Linux平臺下開發,但它一樣也能夠在其它操做系統環境中編譯運行,包括Windows、Mac OS X等。這個項目最先由Fabrice Bellard發起,2004年至2015年間由Michael Niedermayer主要負責維護。許多FFmpeg的開發人員都來自MPlayer項目,並且當前FFmpeg也是放在MPlayer項目組的服務器上。項目的名稱來自MPEG視頻編碼標準,前面的"FF"表明"Fast Forward"。工具

小程用本身的話,再來翻譯一下:oop

FFmpeg是一個開源項目,一直有人在加新功能、優化、改bug。這個項目,能夠進行音視頻的錄製、編碼、流化、解碼、效果處理、重採樣等一系列的操做......

基本上,有音視頻功能的應用,都跟FFmpeg扯上關係,好比暴風影音、QQ影音、mplayer、格式工廠等等。優化

小白:我可無論誰在用,我只要本身能用就行。

小程:那FFmpeg的開源協議LGPL跟恥辱柱,你也不想聽了?網站

小白:LGPL?老公漂亮?ui

開源項目都制定本身的開源協議,這裏我不細說了,你以爲有必要的話能夠去搜索瞭解。

本文的重點在於,介紹如何使用ffmpeg命令(FFmpeg程序),實現一些經常使用的音視頻操做功能,好比在視頻上添加文字或水印。

個人開發環境是mac,如下的介紹都默認在mac系統上操做,但FFmpeg命令基本是平臺無差異的。

生成FFmpeg程序有兩個辦法,一個是使用源碼編譯生成,另外一個是直接安裝,我分別介紹這兩種方法。

(一)源碼編譯出FFmpeg,並實現水印添加

這個辦法是下載FFmpeg源碼下來,再編譯生成FFmpeg程序。若是想使用FFmpeg來組裝本身的程序,這個辦法是必經之路。

我這裏介紹怎麼用ffmepg命令來給視頻添加文字或水印,爲了實現這個功能,在編譯FFmpeg時須要增長特定的參數設置。因而可知,爲了知足不一樣的需求,能夠調整編譯FFmpeg的編譯選項。

小白:把文字寫到視頻上?還不簡單,你要什麼顏色,我有彩色筆。

小程:我是說,在視頻幀上加入文字,不是讓你在屏幕上畫個大叉!

在視頻幀上加入文字,可選擇的辦法有幾個,好比能夠找一找「編輯視頻加廣告」、或視頻大師之類的工具,也能夠寫程序來實現(好比提取出全部幀,再對圖片處理,再整合全部圖片),這裏介紹的是直接用ffmpeg命令來實現。

這時,須要使用FFmpeg的drawtext濾鏡來實現添加字幕。

濾鏡,能夠理解爲視頻的編輯功能(視頻效果處理),是FFmpeg強大的功能之一。

先下載FFmpeg的源碼

git clone git://source.ffmpeg.org/ffmpeg.git FFmpeg

在FFmpeg目錄下面,能夠看到FFmpeg的編譯配置程序configure。

(1)支持濾鏡filter

要保證ffmpeg程序支持filter,不然ffmpeg在使用drawtext時,會看到這樣的提示:
找不到drawtext濾鏡

這時,查看FFmpeg配置後(即執行./configure後)生成的頭文件config.h(若是配置過就會有這個文件),能夠看到:

#define CONFIG_DRAWTEXT_FILTER 0

這是尚未打開drawtext濾鏡的表現。

那怎麼樣讓ffmpeg程序支持filter呢?

首先,須要安裝yasm,若是當前的macos沒有這個執行程序的話(能夠用wihch yasm 來查看一下)。yasm是一個彙編編譯器,我會在FFmpeg編譯給移動平臺使用時再介紹一下yasm,如今直接安裝便可:

brew install yasm

你若是不瞭解brew的話,能夠搜索homebrew進行了解。

安裝yasm後,就能夠配置FFmpeg,讓它支持filter(drawtext依賴於libfreetype):

./configure --enable-libfreetype --enable-avfilter

這時,在配置輸出中(執行./configure),能夠看到:
配置增長了drawtext

而此時,config.h中是這樣:

#define CONFIG_DRAWTEXT_FILTER 1

接着,編譯出ffmpeg工具便可:

make

小程不建議執行make install來安裝到系統,由於在介紹第二種安裝ffmpeg程序的辦法時,會給系統安裝一個ffmpeg。因此,只執行make在當前目錄生成ffmpeg便可。

查一下ffmpeg程序,有沒有支持到drawtext濾鏡:

./ffmpeg -filters

能夠看到,已經有這一項:
是否支持了drawtext

(2)使用drawtext濾鏡

以一個視頻爲例,在沒有加字幕前,這個視頻是這樣的:
演示視頻

使用ffmpeg命令,這樣加上字幕:

左右滾動的字幕:

./ffmpeg -i ~/Desktop/hello.mp4 -b:v 500K -vf drawtext="fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=0xaaff00:fontsize=18:shadowy=0:\x='if(gte(t,2), (main_w-mod(t*50,main_w)), NAN)':y=(main_h-line_h-10):text='關注廣州小程,提高專業技能。'" hello.mp4

固定位置的字幕(這裏加了兩行):

./ffmpeg -i ~/Desktop/hello.mp4 -b:v 500K -vf "drawtext=fontfile=/Library/Fonts/華文黑體.ttf:fontcolor=yellow:fontsize=20:shadowy=0:x=(w-tw)/2-30:y=(main_h-line_h-50):text="關注廣州小程",drawtext=fontfile=/Library/Fonts/YaHei.Consolas.1.11b.ttf:fontcolor=0xaaff00:fontsize=18:shadowy=0:x=(w-tw)/2-30:y=(main_h-line_h-20):text='提高專業技能'" hello1.mp4

把上面加了字幕的mp4文件,轉換成gif(由於不少網站支持gif上傳而不支持視頻),好比:

./ffmpeg -i hello.mp4 -b:v 10K -s 200x200 hello.gif

而後看一下這兩個效果,一個是滾動文字,另外一個是固定文字:
滾動文字的演示效果
滾動文字的演示效果

小程簡單講解一下命令中的參數,請參考下圖的註解:
drawtext命令的參數

另外注意一下,x與y參數指定了位置,是能夠變化的值;

若是須要輸出多行文字,則可使用多個drawtext字段;

若是以爲文字的顏色很差調整,那能夠考慮給文字加上背景框,試一下這些參數:

box --是否使用背景框,默認爲0
boxcolor --背景框的顏色
borderw  --背景框的陰影,默認爲0
bordercolor  --背景框陰影的顏色

以上是在視頻上繪製字幕,若是想在視頻上繪製圖片,包括動態的gif圖,怎麼處理呢?

視頻添加圖片:

./ffmpeg -i ~/Desktop/2.mp4 -acodec copy -b:v 800K -vf "movie=in.png[watermark];inoverlay=main_w-100:main_h-100[out]" out4-1.mp4

其中:

movie --水印圖片
overlay --三個參數,[距視頻原圖左邊的距離,距上邊的距離,是否透明],對於視頻,最後一個參數不能使用

視頻添加動態水印(gif):

./ffmpeg -y -i ~/Desktop/v.mp4 -ignore_loop 0 -i hello.gif -ss 0 -t 9 -filter_complex overlay=main_w-138:0:1 v-3.mp4

因爲沒法上傳視頻,這裏就不展現效果了。至此,小程介紹瞭如何在視頻上添加文字、圖片及gif動態水印。

接着介紹的是直接安裝FFmpeg的辦法。

(二)直接安裝FFmpeg,並作一些常規操做

直接安裝FFmpeg庫,好比在mac機上,直接用brew來安裝。若是你的系統自帶ffmpeg,那就沒必要了。

這樣安裝FFmpeg:

sudo brew link x264
brew install ffmpeg

若是以前已經安裝過FFmpeg,那要留意提示,是否新安裝的FFmpeg有link成功。若是沒有成功也是可使用的,只是要找對文件來運行。若是不想幹擾到原來安裝的ffmpeg,也能夠起個別名來使用,好比新安裝目錄是:/usr/local/Cellar/ffmpeg/2.6.2/bin,則在~/.bash_profile中增長一項:alias f26='/usr/local/Cellar/ffmpeg/2.6.2/bin/ffmpeg',即可以使用f26來調動新安裝的FFmpeg。

安裝辦法可能變化的,遇到問題不要慌,按錯誤提示,具體問題具體分析。

安裝完成後,這樣查看一下ffmpeg的信息:

ffmpeg -version

能夠看到,默認安裝下,已經支持lamemp三、x26四、librtmp第三方庫等。

安裝完ffmpeg,就能夠作一些常規操做了。有什麼常規操做呢,提取、合成、轉碼、錄製,等等,這些操做均可以使用ffmpeg命令來完成。

那麼問題就來了,這麼多命令與參數,能記得住嗎?不能。因此一方面能夠自行記錄一些經常使用的命令,另外一方面須要知道在哪裏查看命令與參數。全部命令與參數的使用均可以在這個地址查到: https://ffmpeg.org/ffmpeg.html ,或者更具體一點的好比: https://ffmpeg.org/ffmpeg.htm...

小程在這裏簡單列舉幾個,你應該根據本身的需求來查看適當的命令。

提取視頻流:

ffmpeg -i xx.flv -vcodec copy -an output.h264

提取音頻流:

ffmpeg -i fx_flash22298734.flv -acodec copy -vn audio.aac

提取音軌(音頻流):

ffmpeg -i 後來_MQ.m4a -map 0:0 0.wav

ffmpeg -i 後來_MQ.m4a -map 0:1 1.wav

提取聲道:

ffmpeg -i "TFBOYS - 是你.mp3" -map_channel 0.0.0 1.aac -map_channel 0.0.1 2.aac

合成音頻與視頻:

ffmpeg -i 1.mp4 -i 1.wav -vcodec copy mix_test.mp4

轉碼:

ffmpeg -i 22298734.flv -vcodec mpeg4 -s 320*240 -an -f m4v test.mp4

保存rtmp流在本地:

ffmpeg -i "rtmp://xxx.com/live/hks live=1" -vcodec copy -acodec copy out.flv

以上介紹了直接安裝FFmpeg,並使用ffmpeg命令的內容。


好了,總結一下,本文介紹瞭如何生成ffmpeg命令程序的辦法,包括經過源碼編譯與直接安裝的辦法。同時,也演示了使用ffmpeg命令來給視頻添加字幕或圖像(包括動態圖像)的操做,以及列舉了可能經常使用的ffmpeg命令。有緣再見,see you。

相關文章
相關標籤/搜索