寫在前面
如果您對音視頻技術(shù)感興趣梧躺,可以訂閱我的專題:音視頻專輯
也可以關(guān)注我的簡書賬戶: 張芳濤,我后期會發(fā)布更多的音視頻以及圖像處理方面的文章嘀韧。
正文
FFmpeg項目由4個命令行工具和9個軟件庫組成梁只,可供許多公司和軟件項目使用。 ffmpeg工具的語法和用法在第一章有相關(guān)介紹旨别。
FFplay介紹
FFplay是一個簡單的媒體播放器,能夠播放ffmpeg工具可以解碼的所有媒體格式汗茄,請參閱第二章顯示可用的格式和其他列表秸弛。
FFmpeg組件:ffplay
描述 | 簡單的媒體播放器,使用FFmpeg和SDL庫,它主要用于測試和開發(fā) |
---|---|
語法 | ffplay [options] [input_file] |
參數(shù)描述 | |
options | 幾乎所有可用于ffmpeg工具的選項都可以與ffplay一起使用 |
input_file | 輸入可以是常規(guī)文件递览,管道叼屠,網(wǎng)絡(luò)流,抓取設(shè)備等 |
在顯示相同的輸出之前绞铃,F(xiàn)Fplay在編碼到文件之前非常有用镜雨,請參閱第一章的顯示輸出預(yù)覽部分了解詳細信息。 例如儿捧,要使用ffplay在lightorange背景上顯示各種testsrc視頻源荚坞,我們可以使用以下命令:
ffplay -f lavfi -i testsrc -vf pad=400:300:(ow-iw)/2:(oh-ih)/2:orange
我的測試命令:
ffplay -f lavfi -i testsrc -vf pad=400:300:\(ow-iw\)/2:\(oh-ih\)/2:orange
- 顯示的效果:
如果我們想從文件文檔中觀看視頻。從文件評論中收聽mp3格式的音頻菲盾,我們可以使用以下命令:
ffplay -i lavfi "movie=document.avi[out0];amovie=comments.mp3[out1]
-
聲明一下颓影,書上寫錯了,至少在我電腦上這樣執(zhí)行是不行的懒鉴,下面是我的測試命令:
ffplay -f lavfi "movie=/Users/zhangfangtao/Desktop/test.mp4[out0];amovie=/Users/zhangfangtao/Desktop/DYZDJ.mp3[out1]"
執(zhí)行結(jié)果就是播放視頻里面的畫面诡挂,然而聲音是我指定的mp3的聲音。
如果FFmpeg被編譯為-enable-libiec61883
選項疗我,連接到計算機的FireWire DV/HDV設(shè)備的輸入可以通過命令顯示:
ffplay -f iec61883 -i auto
- 我電腦上測試報錯咆畏。也不知道哪兒可以用得著。吴裤。旧找。
重放期間的鍵和鼠標控制
在播放過程中,ffplay可以用鍵和鼠標控制麦牺,細節(jié)在下面這個表格里面:
key | 描述 |
---|---|
q, ESC | 退出 |
f | 切換全屏 |
p, Spacebar | 切換暫停 |
a | 音頻通道 |
v | 視頻通道 |
t | 可用的字幕 |
w | 在可用的顯示模式選項中循環(huán):視頻钮蛛,rdft,音頻 |
向左的箭頭 /向右的箭頭 | 向后/向前拖動10秒鐘 |
向下翻頁/ 向上翻頁 | 向后/向前拖動10分鐘 |
點擊鼠標 | 查找與寬度部分對應(yīng)的文件中的百分比 |
就像MPlayer一樣剖膳,ffplay也會退出ESC鍵魏颓,并用空格鍵切換暫停。 f鍵切換全屏模式吱晒,但有時它會中止Windows計算機甸饱,至少是在舊版本會這樣。 如果媒體文件包含多個視頻流仑濒,則可以使用v鍵循環(huán)播放叹话,音頻流可以使用t鍵循環(huán)播放一個鍵和字幕流。 按下右箭頭鍵將視頻快進10秒墩瞳,PageUp鍵視頻快進10分鐘; 箭頭左鍵視頻快退10秒驼壶,pageDown鍵退10分鐘。 鼠標點擊事件提供了功能更靈活的時間搜索喉酌,我們可以通過點擊相應(yīng)的播放器窗口部分移動到任何部分热凹,例如點擊中心將移動到媒體文件的中間泵喘。
FFplay顯示模式
當播放視頻文件時,ffplay顯示視頻般妙,它是其-showmode
選項的默認值纪铺,其他值是rdft
(逆實數(shù)離散傅立葉變換)和waves
(來自濾波器顯示波的音頻波)。 按w鍵可在播放過程中切換這些模式:
我的測試結(jié)果:
FFprobe介紹
ffprobe是一種從多媒體流中收集信息并以人機和機器可讀方式打印的實用程序股冗。 它可用于檢查多媒體流使用的容器的格式以及其中每個媒體流的格式和類型霹陡。 選項用于列出ffprobe支持的一些格式或設(shè)置顯示哪些信息和蚪,并設(shè)置ffprobe如何顯示它止状。 其輸出易于通過文本過濾器進行分析,并且由-of
(或-print_format
)選項指定的選定writer定義的表單的一個或多個部分組成攒霹。 ffprobe使用的例子在調(diào)試和測試章節(jié)中怯疤。
FFmpeg組件:ffprobe
描述 | 命令行工具,用于檢測多媒體流中的各種數(shù)據(jù)以進行分析催束。 它可以單獨使用或與文本過濾器一起使用集峦,以獲得復(fù)雜的處理 |
---|---|
語法 | ffprobe [options] [input_file] |
參數(shù)描述 | |
options | 幾乎所有的ffmpeg工具可用的選項都可以使用ffprobe |
input_file | 輸入可以是常規(guī)文件、管道抠刺、網(wǎng)絡(luò)流塔淤、抓取設(shè)備等 |
附加的ffprobe選項 | |
-bitexact | force bit精確輸出,用于產(chǎn)生不依賴于特定構(gòu)建的輸出 |
-count_frames | 每個流的幀數(shù)速妖,并在相應(yīng)的流部分報告 |
-count_packets | 每個流的數(shù)據(jù)包數(shù)高蜂,并以相應(yīng)的流部分方式報告設(shè)置打印格式,w_name是寫入器名稱罕容,w_options是寫入器選項 |
-of w_name[=w_options] | 設(shè)置打印格式备恤,w_name是寫入器名稱,w_options是寫入器選項 |
-select_streams str_spec | 只選擇str_spec指定的流锦秒,可以是下一個字母:a=audio, d=data, s=subtitle, t=attachment, v=video |
-show_data | 顯示有效負載數(shù)據(jù)露泊,如hex和ASCII轉(zhuǎn)儲,加上- show_數(shù)據(jù)包旅择,它轉(zhuǎn)儲數(shù)據(jù)包的數(shù)據(jù)惭笑,再加上-show_streams,它轉(zhuǎn)儲codec extradata |
-show_error | 在探測輸入時顯示有關(guān)發(fā)現(xiàn)錯誤的信息 |
-show_format | 顯示有關(guān)輸入媒體流的容器格式的信息 |
-show_format_entry name | 像-show_format生真,但只打印由容器格式信息指定的條目沉噩,而不是全部 |
-show_frames | 顯示輸入媒體流中包含的每個框架的信息 |
-show_library_version | 顯示與庫版本相關(guān)的信息 |
-show_packets | 輸入媒體流中包含的每個數(shù)據(jù)包的信息如何 |
-show_private_data -private |
顯示數(shù)據(jù)依賴于特定顯示元素的格式,選項是默認啟用的汇歹,但是可以設(shè)置為0屁擅,例如在創(chuàng)建符合xsd的XML輸出時 |
-show_streams | 顯示輸入媒體流中包含的每個媒體流的信息 |
-show_versions | 顯示與程序和庫版本相關(guān)的信息,這相當于設(shè)置了-show_program_version和-show_library_version選項 |
FFserver介紹
ffserver是一個在Linux上運行的多媒體流媒體服務(wù)器产弹,官方的Windows二進制文件還不能使用
FFmpeg組件:ffserver
描述 | 為音頻和視頻提供流媒體服務(wù)器的實用程序派歌。 它支持多個實時供稿弯囊,從文件流式傳輸并在實時供稿上進行時間轉(zhuǎn)換。 如果在ffserver.conf配置文件中指定了足夠的存儲源存儲胶果,則可以在每個實時供稿中尋找過去的位置匾嘱。 ffserver默認在守護進程模式下在Linux上運行,這意味著它將自身置于后臺并從其控制臺分離早抠,除非它以調(diào)試模式啟動或在配置文件中指定了NoDaemon選項霎烙。 |
---|---|
語法 | ffserver [options] |
參數(shù)的描述 | |
options | 幾乎所有的ffmpeg工具可用的選項都可以與ffserver一起使用 |
額外的ffserver選項 | |
-d | 啟用調(diào)試模式,這會增加日志的冗余性蕊连,將日志消息定向到stdout悬垃,并導(dǎo)致ffserver在前臺運行,而不是作為一個守護進程 |
-f configfile | 使用configfile而不是/etc/ffserver.conf |
-n | 啟用無啟動模式甘苍,這將禁用各種部分的所有啟動指令尝蠕,因為ffserver將不會啟動任何ffmpeg實例,您將不得不手動啟動它們 |
FFmpeg軟件庫
libavcodec
libavcodec是一個用于解碼和編碼多媒體的編解碼器庫载庭,它非常受歡迎看彼,而MPlayer和VLC等多平臺媒體播放器則用它來播放許多音頻和視頻格式。 它能夠解碼囚聚,并且在某些情況下還可以編碼一些專有格式靖榕,包括沒有官方規(guī)范的格式。 標準libavcodec框架中的這些編解碼器提供了優(yōu)于使用原始編解碼器的優(yōu)勢顽铸,主要是增加了可移植性茁计,有時還具有更好的性能,因為libavcodec包含一個標準庫跋破,用于像DCT和色彩空間轉(zhuǎn)換這樣的常見構(gòu)建塊的精確優(yōu)化實現(xiàn)簸淀。
libavcodec中已實現(xiàn)的編解碼器列表位于“顯示幫助和功能”一章中。
libavdevice
libavdevice是一個特殊的設(shè)備復(fù)用/解復(fù)用庫毒返,是libavformat庫的補充租幕。 它提供了各種平臺特定的復(fù)用器和解復(fù)用器,例如用于抓取設(shè)備拧簸,音頻采集和播放劲绪。 因此libavdevice中的(解復(fù)用)復(fù)用是AVFMT_NOFILE
類型(它們使用自己的I / O函數(shù))。 傳遞給avformat_open_input()
的文件名通常不是指實際存在的文件盆赤,而是具有特殊的設(shè)備特定含義贾富,例如對于x11grab
設(shè)備而言,它是顯示名稱牺六。
可用設(shè)備列在第二章“可用媒體格式”部分颤枪。
libavfilter
libavfilter是一個過濾器庫,它為FFmpeg和客戶端庫或應(yīng)用程序提供媒體過濾層淑际。 它簡化了FFmpeg工具的設(shè)計并增強了它們的靈活性畏纲。
libavfilter包含格式協(xié)商的高級機制扇住,并最小化像素/格式轉(zhuǎn)換。 過濾器處理緩沖區(qū)盗胀,其中緩沖區(qū)可以包含視頻幀或音頻源艘蹋。 每個緩沖區(qū)的屬性 - 幀類型,時間戳票灰,文件位置等可以在處理過程中訪問和處理女阀。 可用過濾器的列表在第二章中。
libavformat
libavformat是一個包含音頻/視頻容器格式的解復(fù)用和復(fù)用的庫屑迂。 在實現(xiàn)的復(fù)用器中有crc浸策,framecrc,ico屈糊,md5的榛,MOV / MP4 / ISMV琼了,mpegts逻锐,matroska
等。
在第二章中列出可以使用的媒體格式雕薪。
libavutil
libavutil是包含用于FFmpeg的不同部分的例程的輔助庫昧诱,例如:
-
av_get_token
函數(shù)在libavutil/avstring.h
文件里面,可以用來解析或者轉(zhuǎn)義 -
libavutil/eval.h
文件包含用于計算算術(shù)表達式的接口 -
libavutil/samplefmt.h
文件包含可用音頻樣本格式的定義 -
libavutil/audioconvert.h
文件包含音頻通道布局的規(guī)范
libpostproc
libpostproc是一個包含視頻后處理例程的庫所袁。
libswresample
libswresample庫能夠處理不同的采樣格式盏档,采樣率和不同數(shù)量的通道以及不同的通道布局。 它支持直接轉(zhuǎn)換樣品格式和一次打包/平面燥爷。
libswscale
libswscale是一個包含視頻圖像縮放例程的庫蜈亩,并提供快速模塊化縮放界面。
項目使用FFmpeg組件
使用各種FFmpeg工具和庫的項目數(shù)量很大前翎,其中許多項目列在http://ffmpeg.org/projects.html上
谷歌Chrome瀏覽器中支持HTML5
可能是使用FFmpeg庫最常用的應(yīng)用程序是Google Chrome網(wǎng)絡(luò)瀏覽器稚配,它是最流行的網(wǎng)絡(luò)瀏覽器之一。 2009年港华,F(xiàn)Fmpeg庫被納入Chrome道川,以支持HTML5音頻和視頻元素。 其他使用FFmpeg的瀏覽器還包括Chromium和Orygin網(wǎng)絡(luò)瀏覽器立宜。
在YouTube和Facebook上播放視頻
最大的視頻分享網(wǎng)站YouTube和最大的社交網(wǎng)絡(luò)Facebook是全球最大的使用ffmpeg的項目冒萄,在處理視頻方面,每周有幾百萬個視頻橙数。
多媒體框架利用FFmpeg
在表中描述了使用FFmpeg庫的多媒體框架:
名稱 | 網(wǎng)站 | 描述 |
---|---|---|
ffdshow | ffdshow-tryout.sourceforge.net | 媒體編碼器和解碼器尊流,實現(xiàn)為DirectShow和VFW過濾器,僅Windows |
GStreamer | gstreamer.freedesktop.org | 用于構(gòu)建媒體處理組件圖的庫。它支持的應(yīng)用范圍從簡單的Ogg/Vorbis回放、音頻/視頻流到復(fù)雜的音頻(混合)和視頻(非線性編輯)處理 |
MLT | www.mltframework.org | MLT是一個開源的多媒體框架簇宽,為電視廣播設(shè)計和開發(fā)千扶。它為廣播公司扇救、視頻編輯自赔、媒體播放器蹈丸、轉(zhuǎn)編碼器瓤的、網(wǎng)絡(luò)流媒體和其他類型的應(yīng)用提供了一個工具箱 |
OpenMAX | www.khronos.org/openmax | OpenMAX是一個免版權(quán)的忿晕、跨平臺的API装诡,它提供了全面的流媒體編碼和應(yīng)用程序的可移植性,它可以使加速的多媒體組件在多個操作系統(tǒng)和硅平臺上被開發(fā)践盼、集成和編程 |
視頻編輯器
- Avidemux
- Blender (3D)
- Cinelerra
- Kdenlive
- Kino
音頻編輯器
- Audacity
- Sox
媒體播放器使用FFmpeg
使用FFmpeg庫的媒體框架在表中描述:
名稱 | 網(wǎng)站 | 描述 |
---|---|---|
Audacious | audacious-media-player.org | Audacious是一個開源的音頻播放器鸦采。拖放文件夾和個人歌曲文件,在您的整個音樂庫中搜索藝術(shù)家和專輯咕幻,或者創(chuàng)建和編輯您自己的自定義播放列表渔伯。從網(wǎng)上聽CD或流音樂。用圖形化的均衡器或?qū)嶒瀬碚{(diào)整聲音肄程。享受現(xiàn)代的GTK主題的界面锣吼,或者用Winamp經(jīng)典皮膚改變一些東西。使用包含大膽的插件來為你的音樂取歌詞蓝厌,在早上設(shè)置一個鬧鐘玄叠,等等 |
Gnash | www.gnashdev.org | Gnash是GNU SWF電影播放器,它可以在桌面或嵌入式設(shè)備上獨立運行拓提,也可以作為多個瀏覽器的插件 |
KMPlayer | http://kmplayer.kde.org | KDE的視頻播放器插件和基本的MPlayer / Xine / ffmpeg / ffserver / VDR前端读恃。KMPlayer KPart插件用于Konqueror mimics QuickTime, MS Media Player和RealPlayer插件瀏覽器插件 |
MPlayer | www.mplayerhq.hu | 在許多系統(tǒng)上運行的電影播放器。它播放MPEG/VOB代态、AVI寺惫、Ogg/OGM、VIVO蹦疑、ASF/WMA/WMV西雀、QT/MOV/MP4、RealMedia必尼、Matroska蒋搜、NUT、NuppelVideo判莉、FLI豆挽、YUV4MPEG、FILM券盅、RoQ帮哈、PVA文件,由許多本機锰镀、XAnim和Win32 DLL編解碼器支持娘侍。你可以觀看VideoCD, SVCD, DVD, 3ivx, DivX 3/4/5, WMV咖刃,甚至H.264電影 |
Rockbox | www.rockbox.org | Rockbox是為數(shù)字音樂播放器提供的免費更換固件。它在很多player身上運行 |
VLC | www.videolan.org/vlc | VLC是一個免費的開源跨平臺多媒體播放器和框架憾筏,它播放大多數(shù)多媒體文件以及DVD嚎杨、音頻CD、VCD和各種流媒體協(xié)議 |
V-Player | vchannel.sourceforge.net/ player.html | 基于ffmpeg庫的跨平臺媒體播放器⊙跹現(xiàn)在V播放器支持Windows, Linux和OS X平臺枫浙。用戶界面是用c++編寫的,所有平臺上都有Qt 4 |
Xine | www.xine-project.org | 免費的多媒體播放器古拴。它播放cd箩帚、dvd和vcd。它還可以解碼本地磁盤驅(qū)動器上的AVI黄痪、MOV紧帕、WMV和MP3等多媒體文件,并在Internet上顯示多媒體流 |