如果您對音視頻技術(shù)感興趣,可以訂閱我的專(zhuān)題:音視頻專(zhuān)輯
也可以關(guān)注我的簡(jiǎn)書(shū)賬戶(hù): 張芳濤,我后期會(huì )發(fā)布更多的音視頻以及圖像處理方面的文章。
FFmpeg項目由4個(gè)命令行工具和9個(gè)軟件庫組成,可供許多公司和軟件項目使用。 ffmpeg工具的語(yǔ)法和用法在第一章有相關(guān)介紹。
FFplay是一個(gè)簡(jiǎn)單的媒體播放器,能夠播放ffmpeg工具可以解碼的所有媒體格式,請參閱第二章顯示可用的格式和其他列表。
FFmpeg組件:ffplay
| 描述 | 簡(jiǎn)單的媒體播放器,使用FFmpeg和SDL庫,它主要用于測試和開(kāi)發(fā) |
|---|---|
| 語(yǔ)法 | ffplay [options] [input_file] |
| 參數描述 | |
| options | 幾乎所有可用于ffmpeg工具的選項都可以與ffplay一起使用 |
| input_file | 輸入可以是常規文件,管道,網(wǎng)絡(luò )流,抓取設備等 |
在顯示相同的輸出之前,FFplay在編碼到文件之前非常有用,請參閱第一章的顯示輸出預覽部分了解詳細信息。 例如,要使用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如果我們想從文件文檔中觀(guān)看視頻。從文件評論中收聽(tīng)mp3格式的音頻,我們可以使用以下命令:
ffplay -i lavfi "movie=document.avi[out0];amovie=comments.mp3[out1]聲明一下,書(shū)上寫(xiě)錯了,至少在我電腦上這樣執行是不行的,下面是我的測試命令:
ffplay -f lavfi "movie=/Users/zhangfangtao/Desktop/test.mp4[out0];amovie=/Users/zhangfangtao/Desktop/DYZDJ.mp3[out1]"執行結果就是播放視頻里面的畫(huà)面,然而聲音是我指定的mp3的聲音。
如果FFmpeg被編譯為-enable-libiec61883選項,連接到計算機的FireWire DV/HDV設備的輸入可以通過(guò)命令顯示:
ffplay -f iec61883 -i auto在播放過(guò)程中,ffplay可以用鍵和鼠標控制,細節在下面這個(gè)表格里面:
| key | 描述 |
|---|---|
| q, ESC | 退出 |
| f | 切換全屏 |
| p, Spacebar | 切換暫停 |
| a | 音頻通道 |
| v | 視頻通道 |
| t | 可用的字幕 |
| w | 在可用的顯示模式選項中循環(huán):視頻,rdft,音頻 |
| 向左的箭頭 /向右的箭頭 | 向后/向前拖動(dòng)10秒鐘 |
| 向下翻頁(yè)/ 向上翻頁(yè) | 向后/向前拖動(dòng)10分鐘 |
| 點(diǎn)擊鼠標 | 查找與寬度部分對應的文件中的百分比 |
就像MPlayer一樣,ffplay也會(huì )退出ESC鍵,并用空格鍵切換暫停。 f鍵切換全屏模式,但有時(shí)它會(huì )中止Windows計算機,至少是在舊版本會(huì )這樣。 如果媒體文件包含多個(gè)視頻流,則可以使用v鍵循環(huán)播放,音頻流可以使用t鍵循環(huán)播放一個(gè)鍵和字幕流。 按下右箭頭鍵將視頻快進(jìn)10秒,PageUp鍵視頻快進(jìn)10分鐘; 箭頭左鍵視頻快退10秒,pageDown鍵退10分鐘。 鼠標點(diǎn)擊事件提供了功能更靈活的時(shí)間搜索,我們可以通過(guò)點(diǎn)擊相應的播放器窗口部分移動(dòng)到任何部分,例如點(diǎn)擊中心將移動(dòng)到媒體文件的中間。
當播放視頻文件時(shí),ffplay顯示視頻,它是其-showmode選項的默認值,其他值是rdft(逆實(shí)數離散傅立葉變換)和waves(來(lái)自濾波器顯示波的音頻波)。 按w鍵可在播放過(guò)程中切換這些模式:
ffprobe是一種從多媒體流中收集信息并以人機和機器可讀方式打印的實(shí)用程序。 它可用于檢查多媒體流使用的容器的格式以及其中每個(gè)媒體流的格式和類(lèi)型。 選項用于列出ffprobe支持的一些格式或設置顯示哪些信息,并設置ffprobe如何顯示它。 其輸出易于通過(guò)文本過(guò)濾器進(jìn)行分析,并且由-of(或-print_format)選項指定的選定writer定義的表單的一個(gè)或多個(gè)部分組成。 ffprobe使用的例子在調試和測試章節中。
FFmpeg組件:ffprobe
| 描述 | 命令行工具,用于檢測多媒體流中的各種數據以進(jìn)行分析。 它可以單獨使用或與文本過(guò)濾器一起使用,以獲得復雜的處理 |
|---|---|
| 語(yǔ)法 | ffprobe [options] [input_file] |
| 參數描述 | |
| options | 幾乎所有的ffmpeg工具可用的選項都可以使用ffprobe |
| input_file | 輸入可以是常規文件、管道、網(wǎng)絡(luò )流、抓取設備等 |
| 附加的ffprobe選項 | |
| -bitexact | force bit精確輸出,用于產(chǎn)生不依賴(lài)于特定構建的輸出 |
| -count_frames | 每個(gè)流的幀數,并在相應的流部分報告 |
| -count_packets | 每個(gè)流的數據包數,并以相應的流部分方式報告設置打印格式,w_name是寫(xiě)入器名稱(chēng),w_options是寫(xiě)入器選項 |
| -of w_name[=w_options] | 設置打印格式,w_name是寫(xiě)入器名稱(chēng),w_options是寫(xiě)入器選項 |
| -select_streams str_spec | 只選擇str_spec指定的流,可以是下一個(gè)字母:a=audio, d=data, s=subtitle, t=attachment, v=video |
| -show_data | 顯示有效負載數據,如hex和ASCII轉儲,加上- show_數據包,它轉儲數據包的數據,再加上-show_streams,它轉儲codec extradata |
| -show_error | 在探測輸入時(shí)顯示有關(guān)發(fā)現錯誤的信息 |
| -show_format | 顯示有關(guān)輸入媒體流的容器格式的信息 |
| -show_format_entry name | 像-show_format,但只打印由容器格式信息指定的條目,而不是全部 |
| -show_frames | 顯示輸入媒體流中包含的每個(gè)框架的信息 |
| -show_library_version | 顯示與庫版本相關(guān)的信息 |
| -show_packets | 輸入媒體流中包含的每個(gè)數據包的信息如何 |
| -show_private_data -private | 顯示數據依賴(lài)于特定顯示元素的格式,選項是默認啟用的,但是可以設置為0,例如在創(chuàng )建符合x(chóng)sd的XML輸出時(shí) |
| -show_streams | 顯示輸入媒體流中包含的每個(gè)媒體流的信息 |
| -show_versions | 顯示與程序和庫版本相關(guān)的信息,這相當于設置了-show_program_version和-show_library_version選項 |
ffserver是一個(gè)在Linux上運行的多媒體流媒體服務(wù)器,官方的Windows二進(jìn)制文件還不能使用
FFmpeg組件:ffserver
| 描述 | 為音頻和視頻提供流媒體服務(wù)器的實(shí)用程序。 它支持多個(gè)實(shí)時(shí)供稿,從文件流式傳輸并在實(shí)時(shí)供稿上進(jìn)行時(shí)間轉換。 如果在ffserver.conf配置文件中指定了足夠的存儲源存儲,則可以在每個(gè)實(shí)時(shí)供稿中尋找過(guò)去的位置。 ffserver默認在守護進(jìn)程模式下在Linux上運行,這意味著(zhù)它將自身置于后臺并從其控制臺分離,除非它以調試模式啟動(dòng)或在配置文件中指定了NoDaemon選項。 |
|---|---|
| 語(yǔ)法 | ffserver [options] |
| 參數的描述 | |
| options | 幾乎所有的ffmpeg工具可用的選項都可以與ffserver一起使用 |
| 額外的ffserver選項 | |
| -d | 啟用調試模式,這會(huì )增加日志的冗余性,將日志消息定向到stdout,并導致ffserver在前臺運行,而不是作為一個(gè)守護進(jìn)程 |
| -f configfile | 使用configfile而不是/etc/ffserver.conf |
| -n | 啟用無(wú)啟動(dòng)模式,這將禁用各種部分的所有啟動(dòng)指令,因為ffserver將不會(huì )啟動(dòng)任何ffmpeg實(shí)例,您將不得不手動(dòng)啟動(dòng)它們 |
libavcodec是一個(gè)用于解碼和編碼多媒體的編解碼器庫,它非常受歡迎,而MPlayer和VLC等多平臺媒體播放器則用它來(lái)播放許多音頻和視頻格式。 它能夠解碼,并且在某些情況下還可以編碼一些專(zhuān)有格式,包括沒(méi)有官方規范的格式。 標準libavcodec框架中的這些編解碼器提供了優(yōu)于使用原始編解碼器的優(yōu)勢,主要是增加了可移植性,有時(shí)還具有更好的性能,因為libavcodec包含一個(gè)標準庫,用于像DCT和色彩空間轉換這樣的常見(jiàn)構建塊的精確優(yōu)化實(shí)現。
libavcodec中已實(shí)現的編解碼器列表位于“顯示幫助和功能”一章中。
libavdevice是一個(gè)特殊的設備復用/解復用庫,是libavformat庫的補充。 它提供了各種平臺特定的復用器和解復用器,例如用于抓取設備,音頻采集和播放。 因此libavdevice中的(解復用)復用是AVFMT_NOFILE類(lèi)型(它們使用自己的I / O函數)。 傳遞給avformat_open_input()的文件名通常不是指實(shí)際存在的文件,而是具有特殊的設備特定含義,例如對于x11grab設備而言,它是顯示名稱(chēng)。
可用設備列在第二章“可用媒體格式”部分。
libavfilter是一個(gè)過(guò)濾器庫,它為FFmpeg和客戶(hù)端庫或應用程序提供媒體過(guò)濾層。 它簡(jiǎn)化了FFmpeg工具的設計并增強了它們的靈活性。
libavformat是一個(gè)包含音頻/視頻容器格式的解復用和復用的庫。 在實(shí)現的復用器中有crc,framecrc,ico,md5,MOV / MP4 / ISMV,mpegts,matroska等。
在第二章中列出可以使用的媒體格式。
libavutil是包含用于FFmpeg的不同部分的例程的輔助庫,例如:
av_get_token函數在libavutil/avstring.h文件里面,可以用來(lái)解析或者轉義libavutil/eval.h文件包含用于計算算術(shù)表達式的接口libavutil/samplefmt.h文件包含可用音頻樣本格式的定義libavutil/audioconvert.h文件包含音頻通道布局的規范libpostproc是一個(gè)包含視頻后處理例程的庫。
libswresample庫能夠處理不同的采樣格式,采樣率和不同數量的通道以及不同的通道布局。 它支持直接轉換樣品格式和一次打包/平面。
libswscale是一個(gè)包含視頻圖像縮放例程的庫,并提供快速模塊化縮放界面。
使用各種FFmpeg工具和庫的項目數量很大,其中許多項目列在http://ffmpeg.org/projects.html上
可能是使用FFmpeg庫最常用的應用程序是Google Chrome網(wǎng)絡(luò )瀏覽器,它是最流行的網(wǎng)絡(luò )瀏覽器之一。 2009年,FFmpeg庫被納入Chrome,以支持HTML5音頻和視頻元素。 其他使用FFmpeg的瀏覽器還包括Chromium和Orygin網(wǎng)絡(luò )瀏覽器。
最大的視頻分享網(wǎng)站YouTube和最大的社交網(wǎng)絡(luò )Facebook是全球最大的使用ffmpeg的項目,在處理視頻方面,每周有幾百萬(wàn)個(gè)視頻。
在表中描述了使用FFmpeg庫的多媒體框架:
| 名稱(chēng) | 網(wǎng)站 | 描述 |
|---|---|---|
| ffdshow | ffdshow-tryout.sourceforge.net | 媒體編碼器和解碼器,實(shí)現為DirectShow和VFW過(guò)濾器,僅Windows |
| GStreamer | gstreamer.freedesktop.org | 用于構建媒體處理組件圖的庫。它支持的應用范圍從簡(jiǎn)單的Ogg/Vorbis回放、音頻/視頻流到復雜的音頻(混合)和視頻(非線(xiàn)性編輯)處理 |
| MLT | www.mltframework.org | MLT是一個(gè)開(kāi)源的多媒體框架,為電視廣播設計和開(kāi)發(fā)。它為廣播公司、視頻編輯、媒體播放器、轉編碼器、網(wǎng)絡(luò )流媒體和其他類(lèi)型的應用提供了一個(gè)工具箱 |
| OpenMAX | www.khronos.org/openmax | OpenMAX是一個(gè)免版權的、跨平臺的API,它提供了全面的流媒體編碼和應用程序的可移植性,它可以使加速的多媒體組件在多個(gè)操作系統和硅平臺上被開(kāi)發(fā)、集成和編程 |
使用FFmpeg庫的媒體框架在表中描述:
| 名稱(chēng) | 網(wǎng)站 | 描述 |
|---|---|---|
| Audacious | audacious-media-player.org | Audacious是一個(gè)開(kāi)源的音頻播放器。拖放文件夾和個(gè)人歌曲文件,在您的整個(gè)音樂(lè )庫中搜索藝術(shù)家和專(zhuān)輯,或者創(chuàng )建和編輯您自己的自定義播放列表。從網(wǎng)上聽(tīng)CD或流音樂(lè )。用圖形化的均衡器或實(shí)驗來(lái)調整聲音。享受現代的GTK主題的界面,或者用Winamp經(jīng)典皮膚改變一些東西。使用包含大膽的插件來(lái)為你的音樂(lè )取歌詞,在早上設置一個(gè)鬧鐘,等等 |
| Gnash | www.gnashdev.org | Gnash是GNU SWF電影播放器,它可以在桌面或嵌入式設備上獨立運行,也可以作為多個(gè)瀏覽器的插件 |
| KMPlayer | http://kmplayer.kde.org | KDE的視頻播放器插件和基本的MPlayer / Xine / ffmpeg / ffserver / VDR前端。KMPlayer KPart插件用于Konqueror mimics QuickTime, MS Media Player和RealPlayer插件瀏覽器插件 |
| MPlayer | www.mplayerhq.hu | 在許多系統上運行的電影播放器。它播放MPEG/VOB、AVI、Ogg/OGM、VIVO、ASF/WMA/WMV、QT/MOV/MP4、RealMedia、Matroska、NUT、NuppelVideo、FLI、YUV4MPEG、FILM、RoQ、PVA文件,由許多本機、XAnim和Win32 DLL編解碼器支持。你可以觀(guān)看VideoCD, SVCD, DVD, 3ivx, DivX 3/4/5, WMV,甚至H.264電影 |
| Rockbox | www.rockbox.org | Rockbox是為數字音樂(lè )播放器提供的免費更換固件。它在很多player身上運行 |
| VLC | www.videolan.org/vlc | VLC是一個(gè)免費的開(kāi)源跨平臺多媒體播放器和框架,它播放大多數多媒體文件以及DVD、音頻CD、VCD和各種流媒體協(xié)議 |
| V-Player | vchannel.sourceforge.net/ player.html | 基于ffmpeg庫的跨平臺媒體播放器?,F在V播放器支持Windows, Linux和OS X平臺。用戶(hù)界面是用c++編寫(xiě)的,所有平臺上都有Qt 4 |
| Xine | www.xine-project.org | 免費的多媒體播放器。它播放cd、dvd和vcd。它還可以解碼本地磁盤(pán)驅動(dòng)器上的AVI、MOV、WMV和MP3等多媒體文件,并在Internet上顯示多媒體流 |
聯(lián)系客服