小白:我錄了段視頻,裏面用的音樂是有版權的,並且快過時了,能把音樂去掉嗎?
小程拿到視頻後,一個快捷鍵打開命令終端,快速打下一行命令: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來組裝本身的程序,這個辦法是必經之路。
我這裏介紹怎麼用ffmepg命令來給視頻添加文字或水印,爲了實現這個功能,在編譯FFmpeg時須要增長特定的參數設置。因而可知,爲了知足不一樣的需求,能夠調整編譯FFmpeg的編譯選項。
小白:把文字寫到視頻上?還不簡單,你要什麼顏色,我有彩色筆。小程:我是說,在視頻幀上加入文字,不是讓你在屏幕上畫個大叉!
在視頻幀上加入文字,可選擇的辦法有幾個,好比能夠找一找「編輯視頻加廣告」、或視頻大師之類的工具,也能夠寫程序來實現(好比提取出全部幀,再對圖片處理,再整合全部圖片),這裏介紹的是直接用ffmpeg命令來實現。
這時,須要使用FFmpeg的drawtext濾鏡來實現添加字幕。
濾鏡,能夠理解爲視頻的編輯功能(視頻效果處理),是FFmpeg強大的功能之一。
先下載FFmpeg的源碼:
git clone git://source.ffmpeg.org/ffmpeg.git FFmpeg
在FFmpeg目錄下面,能夠看到FFmpeg的編譯配置程序configure。
要保證ffmpeg程序支持filter,不然ffmpeg在使用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),能夠看到:
而此時,config.h中是這樣:
#define CONFIG_DRAWTEXT_FILTER 1
接着,編譯出ffmpeg工具便可:
make
小程不建議執行make install來安裝到系統,由於在介紹第二種安裝ffmpeg程序的辦法時,會給系統安裝一個ffmpeg。因此,只執行make在當前目錄生成ffmpeg便可。
查一下ffmpeg程序,有沒有支持到drawtext濾鏡:
./ffmpeg -filters
能夠看到,已經有這一項:
以一個視頻爲例,在沒有加字幕前,這個視頻是這樣的:
使用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
而後看一下這兩個效果,一個是滾動文字,另外一個是固定文字:
小程簡單講解一下命令中的參數,請參考下圖的註解:
另外注意一下,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庫,好比在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.wavffmpeg -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。