定 價(jià):69 元
叢書名:電子與嵌入式系統(tǒng)設(shè)計(jì)叢書
- 作者:劉歧
- 出版時(shí)間:2018/4/1
- ISBN:9787111592204
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TN762
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書是一本介紹FFmpeg的實(shí)戰(zhàn)技術(shù)指南,全書共10章,分為兩個(gè)部分。部分(第1~7章)為FFmpeg的命令行使用篇,介紹了FFmpeg的基礎(chǔ)組成部分、FFmpeg工具使用、FFmpeg的封裝操作、FFmpeg的轉(zhuǎn)碼操作、FFmpeg的流媒體操作、FFmpeg的濾鏡操作、FFmpeg的設(shè)備操作。第二部分(第8~10章)為FFmpeg的API使用篇,介紹了FFmpeg封裝部分的API使用操作、FFmpeg編解碼部分的API使用操作,F(xiàn)Fmpeg濾鏡部分的API使用操作,相關(guān)操作均以實(shí)例方式進(jìn)行說(shuō)明,包括新API及舊API的操作。
前 言為什么要寫這本書在2011年之前,筆者的工作主要是以圖形系統(tǒng)和Linux設(shè)備驅(qū)動(dòng)程序開發(fā)為主,一個(gè)偶然的機(jī)會(huì),筆者參與了Android的流媒體框架開發(fā)與技術(shù)支持工作,于是筆者開始快速地學(xué)習(xí)音視頻流媒體技術(shù)。后來(lái)又因參與某廣電的云計(jì)算項(xiàng)目時(shí)負(fù)責(zé)云轉(zhuǎn)碼項(xiàng)目,筆者又開始學(xué)習(xí)使用FFmpeg,在學(xué)習(xí)的過(guò)程中遇到了很多問(wèn)題,而手冊(cè)的內(nèi)容又非常多,即使系統(tǒng)地學(xué)習(xí)一遍,也很難及時(shí)地解決自己遇到的問(wèn)題。當(dāng)時(shí)(2012年)網(wǎng)絡(luò)中并沒(méi)有現(xiàn)如今這么多的音視頻相關(guān)技術(shù)文檔分享,大多數(shù)都是提問(wèn),很少能看到精確的解答,所以最終還是耐心地讀手冊(cè)。在日積月累的學(xué)習(xí)過(guò)程中,筆者發(fā)現(xiàn)對(duì)FFmpeg感興趣的人越來(lái)越多,因此便計(jì)劃進(jìn)一步地學(xué)習(xí)和整理FFmpeg的相關(guān)使用知識(shí),以期能夠幫助到更多的朋友。
近幾年,音視頻流媒體技術(shù)的應(yīng)用日益廣泛,尤其是以視頻直播中音視頻流媒體處理的應(yīng)用最甚,但是市面上與“老牌”音視頻處理工具FFmpeg相關(guān)的介紹書籍少之又少,雖然市面上有些講述音視頻純理論的書籍,但是并不能快速指導(dǎo)新人上手操作,并且大多數(shù)人看到FFmpeg的官方文檔篇幅之長(zhǎng)時(shí)望而卻步,入門的新手日漸增多并且經(jīng)常會(huì)有不同的人問(wèn)到相同的問(wèn)題,以上種種激發(fā)了筆者編寫本書的想法。
2014年筆者所在的公司主導(dǎo)流媒體CDN的開發(fā),再加上市場(chǎng)對(duì)轉(zhuǎn)碼、移動(dòng)端推流SDK、播放SDK以及音視頻處理的需求愈加強(qiáng)烈,而FFmpeg又剛好可以快速滿足上述需求的大多數(shù)場(chǎng)景,以上種種更加充分地說(shuō)明了本書出版的必要性。
在與FFmpeg相關(guān)的開發(fā)討論與交流過(guò)程中,筆者了解到有很多公司尤其是云服務(wù)相關(guān)的公司,對(duì)FFmpeg的使用各有不同,有的使用命令行,有的使用SDK。所以本書分為兩部分進(jìn)行介紹,前半部分以FFmpeg的命令行使用為主,后半部分以SDK基本使用方法的介紹為主。當(dāng)然,F(xiàn)Fmpeg如今發(fā)展速度迅猛,本書講解的內(nèi)容將會(huì)盡力以最新版本為準(zhǔn)。筆者將會(huì)持續(xù)與廣大讀者溝通交流FFmpeg的相關(guān)技術(shù),希望能夠?yàn)槠髽I(yè)同行或者感興趣的讀者提供參考,筆者希望本書能夠幫助大家提高工作效率、解決工作和學(xué)習(xí)中的實(shí)際問(wèn)題。
另外,市場(chǎng)上還鮮有出現(xiàn)關(guān)于FFmpeg實(shí)戰(zhàn)相關(guān)的技術(shù)書籍,F(xiàn)Fmpeg的技術(shù)知識(shí)主要以網(wǎng)絡(luò)中的博客、論壇等為主,因此筆者希望本書的出版能夠在圖書領(lǐng)域和技術(shù)領(lǐng)域打開新的篇章,讓我們的圖書出版行業(yè)多一個(gè)FFmpeg音視頻處理相關(guān)類目,也讓我們的技術(shù)領(lǐng)域多一個(gè)音視頻流媒體處理實(shí)戰(zhàn)相關(guān)的方向。
本書的讀者對(duì)象本書的讀者對(duì)象具體如下。
音視頻流媒體處理的研究人員音視頻流媒體技術(shù)的研發(fā)人員對(duì)音視頻流媒體處理開發(fā)感興趣的技術(shù)人員計(jì)算機(jī)相關(guān)專業(yè)的高等院校學(xué)生如何閱讀本書本書一共包含10章,按照所講述的內(nèi)容以及所面向讀者的不同層次,可以劃分為兩大部分,具體如下。
第一部分為FFmpeg的命令行使用篇,包括第1~7章,介紹了FFmpeg的基礎(chǔ)組成部分、FFmpeg工具使用、FFmpeg的封裝操作、FFmpeg的轉(zhuǎn)碼操作、FFmpeg的流媒體操作、FFmpeg的濾鏡操作和FFmpeg的設(shè)備操作。
第二部分為FFmpeg的API使用篇,包括第8~10章,介紹了FFmpeg封裝部分的API使用操作、FFmpeg編解碼部分的API使用操作和FFmpeg濾鏡部分的API使用操作,相關(guān)操作均以實(shí)例方式進(jìn)行說(shuō)明,包括新API及舊API的操作。
如果你已經(jīng)能夠通過(guò)源代碼獨(dú)立安裝FFmpeg,那么可以跳過(guò)第1章直接從第2章開始閱讀;如果你對(duì)命令行使用沒(méi)有興趣,或者希望使用FFmpeg的API開發(fā),那么可以跳過(guò)前7章直接從第8章開始閱讀。筆者建議最好是從第1章開始閱讀。
勘誤和支持由于筆者的水平有限,加之編寫的同時(shí)還要參與開發(fā)工作,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。如果讀者有任何寶貴意見,都可以發(fā)送郵件到lq@chinaffmpeg.org或者740936897@qq.com,期待您的真摯反饋。
另外,本書代碼相關(guān)的舉例均可以在FFmpeg的源代碼目錄的doc/examples中獲得,也可以通過(guò)FFmpeg官方網(wǎng)站的文檔獲得:https://ffmpeg.org/doxygen/trunk/examples.html。
FFmpeg發(fā)展了至少17年,積累了極其豐富的資料,能夠滿足大部分的需求。由于FFmpeg的更新與版本的迭代,不同版本之間使用的參數(shù)相對(duì)來(lái)說(shuō)會(huì)稍微有所不同,由于本書篇幅有限,所以FFmpeg的很多交流社區(qū)的資源同樣值得參考。
官方文檔資料FFmpeg官方文檔:http://ffmpeg.org/documentation.htmlFFmpeg官方wiki:https://trac.ffmpeg.org中文經(jīng)典資料雷霄驊博士總結(jié)的資料:http://blog.csdn.net/leixiaohua1020羅索實(shí)驗(yàn)室:http://www.rosoo.netChinaFFmpeg:http://bbs.chinaffmpeg.com除了以上這些信息,還可以通過(guò)Google、百度等搜索引擎獲得大量相關(guān)資料。
FFmpeg本身也提供了命令參數(shù)的詳細(xì)說(shuō)明,讀者可以查看FFmpeg的幫助信息,后面的章節(jié)將會(huì)對(duì)此進(jìn)行詳細(xì)的介紹。
致謝首先感謝我的愛(ài)人一直以來(lái)對(duì)我的工作和寫作的支持與理解,是你在我背后默默的支持,才讓我有更多的時(shí)間和精力放到工作及寫作中。
感謝FFmpeg社區(qū)中的朋友們對(duì)本書提供了大力的支持,感謝藍(lán)汛、高升、金山云、學(xué)而思網(wǎng)校與OnVideo的伙伴們長(zhǎng)期的支持與貢獻(xiàn),沒(méi)有你們也就不會(huì)有這本書的問(wèn)世。
感謝機(jī)械工業(yè)出版社華章公司的編輯,感謝你們的耐心指導(dǎo)與幫助,引導(dǎo)我們順利地完成了全部書稿。
感謝FFmpeg社區(qū)、ChinaUnix社區(qū)、LVS社區(qū),社區(qū)很好地提供了技術(shù)溝通與交流的平臺(tái),幫助我們更好地成長(zhǎng)。
謹(jǐn)以此書獻(xiàn)給我最親愛(ài)的家人、朋友、同事,以及眾多為互聯(lián)網(wǎng)、流媒體添磚加瓦的從業(yè)者們。
劉歧、趙文杰2018年1月于北京
目 錄
本書贊譽(yù)
推薦序一
推薦序二
推薦序三
前言
第一部分 FFmpeg的命令行使用篇
第1章 FFmpeg簡(jiǎn)介 2
1.1 FFmpeg的定義 2
1.2 FFmpeg的歷史 2
1.3 FFmpeg的基本組成 3
1.4 FFmpeg的編解碼工具ffmpeg 6
1.5 FFmpeg的播放器ffplay 9
1.6 FFmpeg的多媒體分析器ffprobe 9
1.7 FFmpeg編譯 11
1.7.1 FFmpeg之Windows平臺(tái)編譯 11
1.7.2 FFmpeg之Linux平臺(tái)編譯 13
1.7.3 FFmpeg之OS X平臺(tái)編譯 15
1.8 FFmpeg編碼支持與定制 16
1.8.1 FFmpeg的編碼器支持 24
1.8.2 FFmpeg的解碼器支持 25
1.8.3 FFmpeg的封裝支持 27
1.8.4 FFmpeg的解封裝支持 28
1.8.5 FFmpeg的通信協(xié)議支持 29
1.9 小結(jié) 29
第2章 FFmpeg工具使用基礎(chǔ) 30
2.1 ffmpeg常用命令 30
2.1.1 ffmpeg的封裝轉(zhuǎn)換 37
2.1.2 ffmpeg的轉(zhuǎn)碼參數(shù) 38
2.1.3 ffmpeg的基本轉(zhuǎn)碼原理 38
2.2 ffprobe常用命令 40
2.3 ffplay常用命令 50
2.3.1 ffplay常用參數(shù) 50
2.3.2 ffplay高級(jí)參數(shù) 53
2.3.3 ffplay的數(shù)據(jù)可視化分析應(yīng)用 57
2.4 小結(jié) 59
第3章 FFmpeg 轉(zhuǎn)封裝 60
3.1 音視頻文件轉(zhuǎn)MP4格式 60
3.1.1 MP4格式標(biāo)準(zhǔn)介紹 61
3.1.2 MP4分析工具 76
3.1.3 MP4在FFmpeg中的Demuxer 79
3.1.4 MP4在FFmpeg中的Muxer 80
3.2 視頻文件轉(zhuǎn)FLV 84
3.2.1 FLV格式標(biāo)準(zhǔn)介紹 84
3.2.2 FFmpeg轉(zhuǎn)FLV參數(shù) 89
3.2.3 FFmpeg文件轉(zhuǎn)FLV舉例 89
3.2.4 FFmpeg生成帶關(guān)鍵索引的FLV 91
3.2.5 FLV文件格式分析工具 91
3.3 視頻文件轉(zhuǎn)M3U8 93
3.3.1 M3U8格式標(biāo)準(zhǔn)介紹 93
3.3.2 FFmpeg轉(zhuǎn)HLS參數(shù) 95
3.3.3 FFmpeg轉(zhuǎn)HLS舉例 96
3.4 視頻文件切片 105
3.4.1 FFmpeg切片segment參數(shù) 105
3.4.2 FFmpeg切片segment舉例 106
3.4.3 FFmpeg使用ss與t參數(shù)進(jìn)行切片 110
3.5 音視頻文件音視頻流抽取 111
3.5.1 FFmpeg抽取音視頻文件中的AAC音頻流 111
3.5.2 FFmpeg抽取音視頻文件中的H.264視頻流 112
3.5.3 FFmpeg抽取音視頻文件中的H.265數(shù)據(jù) 113
3.6 系統(tǒng)資源使用情況 114
3.7 小結(jié) 115
第4章 FFmpeg轉(zhuǎn)碼 116
4.1 FFmpeg軟編碼H.264與H.265 116
4.1.1 x264編碼參數(shù)簡(jiǎn)介 117
4.1.2 H.264編碼舉例 118
4.2 FFmpeg硬編解碼 130
4.2.1 Nvidia GPU硬編解碼 130
4.2.2 Intel QSV硬編碼 133
4.2.3 樹莓派硬編碼 137
4.2.4 OS X系統(tǒng)硬編解碼 139
4.3 FFmpeg輸出MP3 141
4.3.1 MP3編碼參數(shù)介紹 141
4.3.2 MP3的編碼質(zhì)量設(shè)置 142
4.3.3 平均碼率編碼參數(shù)ABR 144
4.4 FFmpeg輸出AAC 145
4.4.1 FFmpeg中的AAC編碼器使用 145
4.4.2 FDK AAC第三方的AAC編解碼Codec庫(kù) 146
4.4.3 高質(zhì)量AAC設(shè)置 148
4.4.4 AAC音頻質(zhì)量對(duì)比 149
4.5 系統(tǒng)資源使用情況 149
4.6 小結(jié) 150
第5章 FFmpeg流媒體 151
5.1 FFmpeg發(fā)布與錄制RTMP流 151
5.1.1 RTMP參數(shù)說(shuō)明 152
5.1.2 RTMP參數(shù)舉例 152
5.2 FFmpeg錄制RTSP流 159
5.2.1 RTSP參數(shù)說(shuō)明 159
5.2.2 RTSP參數(shù)使用舉例 159
5.3 FFmpeg錄制HTTP流 163
5.3.1 HTTP參數(shù)說(shuō)明 163
5.3.2 HTTP參數(shù)使用舉例 163
5.3.3 HTTP拉流錄制 166
5.3.4 拉取HTTP中的流錄制FLV 166
5.4 FFmpeg錄制和發(fā)布UDP / TCP流 166
5.4.1 TCP與UDP參數(shù)說(shuō)明 166
5.4.2 TCP參數(shù)使用舉例 167
5.4.3 TCP/UDP使用小結(jié) 172
5.5 FFmpeg推多路流 173
5.5.1 管道方式輸出多路流 173
5.5.2 tee封裝格式輸出多路流 174
5.5.3 tee協(xié)議輸出多路流 175
5.6 FFmpeg生成HDS流 176
5.6.1 HDS參數(shù)說(shuō)明 177
5.6.2 HDS使用舉例 177
5.7 FFmpeg生成DASH流 179
5.7.1 DASH參數(shù)說(shuō)明 180
5.7.2 DASH參數(shù)使用舉例 180
5.8 小結(jié) 181
第6章 FFmpeg濾鏡使用 182
6.1 FFmpeg濾鏡Filter描述格式 182
6.1.1 FFmpeg濾鏡Filter的參數(shù)排列方式 182
6.1.2 FFmpeg濾鏡Filter時(shí)間內(nèi)置變量 183
6.2 FFmpeg為視頻加水印 183
6.2.1 文字水印 183
6.2.2 圖片水印 187
6.3 FFmpeg生成畫中畫 189
6.4 FFmpeg視頻多宮格處理 192
6.5 FFmpeg音頻流濾鏡操作 193
6.5.1 雙聲道合并單聲道 193
6.5.2 雙聲道提取 194
6.5.3 雙聲道轉(zhuǎn)雙音頻流 195
6.5.4 單聲道轉(zhuǎn)雙聲道 196
6.5.5 兩個(gè)音頻源合并雙聲道 197
6.5.6 多個(gè)音頻合并為多聲道 198
6.6 FFmpeg音頻音量探測(cè) 199
6.6.1 音頻音量獲得 199
6.6.2 繪制音頻波形 200
6.7 FFmpeg為視頻加字幕 201
6.7.1 ASS字幕流寫入視頻流 201
6.7.2 ASS字幕流寫入封裝容器 202
6.8 FFmpeg視頻摳圖合并 205
6.9 FFmpeg 3D視頻處理 206
6.9.1 stereo3d處理3D視頻 206
6.9.2 3D圖像轉(zhuǎn)換舉例 207
6.10 FFmpeg定時(shí)視頻截圖 208
6.10.1 vframe參數(shù)截取一張圖片 208
6.10.2 fps濾鏡定時(shí)獲得圖片 209
6.11 FFmpeg生成測(cè)試元數(shù)據(jù) 210
6.11.1 FFmpeg生成音頻測(cè)試流 210
6.11.2 FFmpeg生成視頻測(cè)試流 211
6.12 FFmpeg對(duì)音視頻倍速處理 212
6.12.1 atempo音頻倍速處理 212
6.12.2 setpts視頻倍速處理 213
6.13 小結(jié) 215
第7章 FFmpeg采集設(shè)備 216
7.1 FFmpeg中Linux設(shè)備操作 216
7.1.1 Linux下查看設(shè)備列表 216
7.1.2 Linux采集設(shè)備fbdev參數(shù)說(shuō)明 217
7.1.3 Linux采集設(shè)備fbdev使用舉例 217
7.1.4 Linux采集設(shè)備v4l2參數(shù)說(shuō)明 218
7.1.5 Linux采集設(shè)備v4l2使用舉例 218
7.1.6 Linux采集設(shè)備x11grab參數(shù)說(shuō)明 220
7.1.7 Linux采集設(shè)備x11grab使用舉例 220
7.2 FFmpeg中OS X設(shè)備操作 222
7.2.1 OS X下查看設(shè)備列表 223
7.2.2 OS X下設(shè)備采集舉例 223
7.3 FFmpeg中Windows設(shè)備操作 227
7.3.1 FFmpeg使用dshow采集音視頻設(shè)備 227
7.3.2 FFmpeg使用vfwcap采集視頻設(shè)備 228
7.3.3 FFmpeg使用gdigrab采集窗口 229
7.4 小結(jié) 230
第二部分 FFmpeg的API使用篇
第8章 FFmpeg接口libavformat的使用 232
8.1 音視頻流封裝 232
8.2 音視頻文件解封裝 235
8.3 音視頻文件轉(zhuǎn)封裝 237
8.4 視頻截取 240
8.5 avio內(nèi)存數(shù)據(jù)操作 242
8.6 小結(jié) 244
第9章 FFmpeg接口libavcodec的使用 245
9.1 FFmpeg舊接口的使用 245
9.1.1 FFmpeg舊接口視頻解碼 245
9.1.2 FFmpeg舊接口視頻編碼 248
9.1.3 FFmpeg舊接口音頻解碼 251
9.1.4 FFmpeg舊接口音頻編碼 252
9.2 FFmpeg新接口的使用 254
9.2.1 FFmpeg新接口音頻編碼 255
9.2.2 FFmpeg新接口音頻解碼 257
9.2.3 FFmpeg新接口視頻編碼 260
9.2.4 FFmpeg新接口視頻解碼 260
9.3 小結(jié) 261
第10章 FFmpeg接口libavfilter的使用 262
10.1 filtergraph和filter簡(jiǎn)述 262
10.2 FFmpeg中預(yù)留的濾鏡 263
10.2.1 音頻濾鏡 263
10.2.2 視頻濾鏡 265
10.3 avfilter流程圖 271
10.4 使用濾鏡加LOGO操作 272
10.5 小結(jié) 275