FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線
定 價(jià):¥129
中 教 價(jià):¥76.11 (5.90折)
庫 存 數(shù): 0
《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》是一本FFmpeg開發(fā)的實(shí)戰(zhàn)教程,由淺入深,由基礎(chǔ)到高級(jí),帶領(lǐng)讀者一步一步走進(jìn)音視頻開發(fā)的神奇世界。全書共分為12章。其中,第1~5章是基礎(chǔ)部分,主要講解FFmpeg的環(huán)境搭建、FFmpeg的開發(fā)基礎(chǔ)、FFmpeg的編解碼、FFmpeg處理圖像和FFmpeg處理音頻;第6~10章是進(jìn)階部分,主要講解FFmpeg加工視頻、FFmpeg添加圖文、FFmpeg自定義濾鏡、FFmpeg混合音視頻和FFmpeg播放音視頻;第11和12章是平臺(tái)應(yīng)用部分,主要講解FFmpeg的桌面開發(fā)和FFmpeg的移動(dòng)開發(fā)。本書在講解FFmpeg知識(shí)點(diǎn)的同時(shí)給出了大量實(shí)戰(zhàn)范例,方便讀者迅速將所學(xué)的知識(shí)運(yùn)用到音視頻開發(fā)中。通過本書的學(xué)習(xí),讀者能夠掌握音視頻開發(fā)的基本技術(shù),包括音視頻查看、音視頻轉(zhuǎn)換、音視頻播放、音視頻剪輯、視頻推拉流等。《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》適用于廣大從事FFmpeg開發(fā)的專業(yè)人士、有志于轉(zhuǎn)型FFmpeg開發(fā)的程序員以及對(duì)FFmpeg開發(fā)有興趣的業(yè)余愛好者,也可作為大中專院校和培訓(xùn)機(jī)構(gòu)音視頻課程的教材。
由從業(yè)十余年一線資深音視頻開發(fā)專家、暢銷書作者傾力編撰,通俗、易學(xué)、實(shí)用,貼近開發(fā)實(shí)踐。深入淺出地介紹FFmpeg的基本概念、基礎(chǔ)知識(shí)和高級(jí)特性,從入門到精通,適合不同層次的讀者學(xué)習(xí)。案例豐富,基本上每章都提供項(xiàng)目案例,全書共9個(gè)項(xiàng)目案例,所有項(xiàng)目全流程完整呈現(xiàn),并給出詳盡的代碼實(shí)現(xiàn)和注解說明,直接套用即可開發(fā)出自己的應(yīng)用。涵蓋內(nèi)容廣泛,涉及從桌面開發(fā)到移動(dòng)開發(fā),如音視頻查看、播放、轉(zhuǎn)換、剪輯、推拉流等內(nèi)容。
音視頻開發(fā)是近年來的新興軟件開發(fā)行業(yè),廣泛運(yùn)用于在線視頻、網(wǎng)絡(luò)直播、安防監(jiān)控、遠(yuǎn)程辦公、線上課堂等業(yè)務(wù)場景。特別是隨著5G技術(shù)的深入應(yīng)用和短視頻自媒體的廣泛傳播,音視頻領(lǐng)域的技術(shù)支持顯得愈發(fā)重要。在眾多音視頻開發(fā)技術(shù)框架中,F(xiàn)Fmpeg是最基礎(chǔ)的音視頻處理平臺(tái)。不論是音視頻的編碼、加工,還是傳輸,都離不開FFmpeg的支撐。可以說,入門音視頻開發(fā)的第一個(gè)門檻就是FFmpeg,掌握FFmpeg是進(jìn)軍音視頻開發(fā)的必經(jīng)之路。盡管FFmpeg在音視頻領(lǐng)域擁有舉足輕重的地位,但長期以來入門FFmpeg開發(fā)并非易事。一方面,音視頻涉及的專業(yè)概念種類繁多,初學(xué)者容易困惑;另一方面,F(xiàn)Fmpeg基于Linux環(huán)境的C語言開發(fā),個(gè)人開發(fā)由于環(huán)境限制,難以深入FFmpeg編程。此外,F(xiàn)Fmpeg作為底層框架本身并不提供可視化交互界面。例如,桌面程序需要Qt環(huán)境,而手機(jī)App需要Android環(huán)境,因此,在真正運(yùn)用FFmpeg時(shí),需要結(jié)合FFmpeg Qt,或者FFmpeg Android,這無疑增加了學(xué)習(xí)FFmpeg編程的難度。基于以上考慮,本書按照下列章節(jié)結(jié)構(gòu)來介紹FFmpeg開發(fā)實(shí)戰(zhàn)。第一,在解釋音視頻概念時(shí),首先闡述相關(guān)術(shù)語的來龍去脈,然后描述這些概念的原理和分類,并最后提供對(duì)應(yīng)的FFmpeg范例代碼,使讀者能夠逐步理解音視頻的基礎(chǔ)知識(shí),從理論到實(shí)踐。第二,詳細(xì)說明在Linux環(huán)境編譯FFmpeg及其相關(guān)庫的步驟,同時(shí)也詳述在Windows環(huán)境編譯FFmpeg及其相關(guān)庫的步驟,以便讀者能夠在個(gè)人計(jì)算機(jī)上搭建FFmpeg的開發(fā)學(xué)習(xí)環(huán)境。第三,對(duì)于通過FFmpeg實(shí)現(xiàn)的每項(xiàng)功能,不僅提供基于函數(shù)調(diào)用的示例代碼,還提供具體的FFmpeg操作命令,是本書兼具FFmpeg的代碼開發(fā)教程與FFmpeg的命令使用手冊兩種用途。第四,最后兩章介紹了在Qt環(huán)境中集成FFmpeg并在計(jì)算機(jī)上運(yùn)行播放影音的桌面程序,以及在Android Studio環(huán)境中集成FFmpeg并在手機(jī)上運(yùn)行剪輯視頻的手機(jī)App。這方便讀者學(xué)以致用,能夠迅速將FFmpeg編程應(yīng)用到桌面開發(fā)與移動(dòng)開發(fā)中。第五,在介紹FFmpeg開發(fā)的過程中,引入了一些輔助工具用于編譯、瀏覽、分析、加工等操作,包括Visual Studio、MSYS、CMake、VLC、YUView、Audacity、Subtitle Edit、MediaMTX等。本書對(duì)這些工具都進(jìn)行詳細(xì)介紹,以幫助讀者熟練掌握FFmpeg開發(fā)技能。全書共分為12章。其中,第1~5章是基礎(chǔ)部分,主要講解FFmpeg環(huán)境搭建、FFmpeg開發(fā)基礎(chǔ)、FFmpeg的編解碼、FFmpeg處理圖像、FFmpeg處理音頻;第6~10章是進(jìn)階部分,主要講解FFmpeg加工視頻、FFmpeg添加圖文、FFmpeg自定義濾鏡、FFmpeg混合音視頻、FFmpeg播放音視頻; 第11和12章是平臺(tái)應(yīng)用部分,主要講解FFmpeg的桌面開發(fā)和FFmpeg的移動(dòng)開發(fā)。本書在講解FFmpeg知識(shí)點(diǎn)的同時(shí)給出了大量實(shí)戰(zhàn)范例,方便讀者迅速將所學(xué)的知識(shí)運(yùn)用到音視頻開發(fā)中。這些實(shí)戰(zhàn)范例包括:圖片轉(zhuǎn)視頻、拼接兩段音頻、老電影懷舊風(fēng)、卡拉OK音樂短片、側(cè)邊模糊濾鏡、翻書轉(zhuǎn)場動(dòng)畫、同步播放音視頻、桌面影音播放器、仿剪映的視頻剪輯等。通過實(shí)戰(zhàn)項(xiàng)目的練習(xí),讀者能夠掌握音視頻的基本開發(fā)技術(shù),包括音視頻查看、音視頻轉(zhuǎn)換、音視頻播放、音視頻剪輯、視頻推拉流等。所謂零基礎(chǔ),指的是FFmpeg零基礎(chǔ),而非C語言零基礎(chǔ),在讀者開始學(xué)習(xí)本書之前,建議先學(xué)完譚浩強(qiáng)的《C程序設(shè)計(jì)》,且需要掌握基本的Linux操作命令。在學(xué)習(xí)第11章之前,建議先入門Qt平臺(tái)的C 桌面編程。在學(xué)習(xí)第12章之前,建議先掌握Android平臺(tái)的Java移動(dòng)編程,可參考筆者的App開發(fā)專著《Android Studio開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線(第3版)》。本書中與FFmpeg相關(guān)的C代碼都是基于FFmpeg 5.1.2編寫的。前10章的C/C 代碼在Linux(包括EulerOS和CentOS)和Windows(包括Windows 10和Windows 11)上編譯和調(diào)試通過;第11章的程序代碼采用C 編寫,并在Qt 6.5.2上編譯和調(diào)試通過;第12章的App代碼采用Java與C 編寫,并在Android Studio Dolphin(小海豚版本)上編譯和調(diào)試通過。在學(xué)習(xí)音視頻開發(fā)過程中,需要用到一些開源軟件,逐個(gè)下載它們頗費(fèi)功夫,而且部分軟件還要搭配對(duì)應(yīng)的FFmpeg版本。為了方便讀者使用這些軟件,筆者把本書用到的軟件源碼和安裝文件統(tǒng)一打包,并與隨書配套的例程源碼和演示課件放在一起,讀者可掃描下方的二維碼一起下載。 如果你在下載過程中遇到問題,請(qǐng)發(fā)郵件至booksaga@126.com,郵件標(biāo)題為FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線獲得幫助。最后,感謝王金柱編輯的熱情指導(dǎo),感謝出版社其他人員的辛勤工作,感謝我的家人一直以來的支持,感謝各位師長的諄諄教導(dǎo)。沒有他們的鼎力相助,本書就無法順利完成。
歐陽燊 2024年1月
歐陽燊,碩士,資深開發(fā)專家,擁有18年以上軟件開發(fā)經(jīng)驗(yàn),對(duì)C/C 、Java、Android相關(guān)領(lǐng)域的開發(fā)、架構(gòu)駕輕就熟,職業(yè)生涯開發(fā)過大量企業(yè)級(jí)項(xiàng)目,實(shí)戰(zhàn)經(jīng)驗(yàn)極為豐富。出版暢銷書《Android Studio開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線》。
第 1 章 FFmpeg環(huán)境搭建 11.1 FFmpeg簡介 11.1.1 FFmpeg是什么 11.1.2 FFmpeg的用途 11.1.3 FFmpeg的發(fā)展歷程 21.2 Linux系統(tǒng)安裝FFmpeg 21.2.1 Linux開發(fā)機(jī)配置要求 21.2.2 安裝已編譯的FFmpeg及其SO庫 31.2.3 自行編譯與安裝FFmpeg 51.3 在Windows系統(tǒng)下安裝FFmpeg 101.3.1 Windows開發(fā)機(jī)配置要求 101.3.2 安裝依賴的Windows軟件 101.3.3 安裝已編譯的FFmpeg及其DLL庫 151.4 FFmpeg的開發(fā)框架 171.4.1 可執(zhí)行程序 181.4.2 動(dòng)態(tài)鏈接庫 211.4.3 第一個(gè)FFmpeg程序 231.5 小結(jié) 26第 2 章 FFmpeg開發(fā)基礎(chǔ) 272.1 音視頻的編碼標(biāo)準(zhǔn) 272.1.1 音視頻編碼的發(fā)展歷程 272.1.2 音視頻文件的封裝格式 292.1.3 國家數(shù)字音視頻標(biāo)準(zhǔn)AVS 312.2 FFmpeg的主要數(shù)據(jù)結(jié)構(gòu) 342.2.1 FFmpeg的編碼與封裝 352.2.2 FFmpeg的數(shù)據(jù)包樣式 372.2.3 FFmpeg的過濾器類型 392.3 FFmpeg查看音視頻信息 412.3.1 打開與關(guān)閉音視頻文件 412.3.2 查看音視頻的信息 422.3.3 查看編解碼器的參數(shù) 452.4 FFmpeg常見的處理流程 472.4.1 復(fù)制編解碼器的參數(shù) 472.4.2 創(chuàng)建并寫入音視頻文件 512.4.3 使用濾鏡加工音視頻 542.5 小結(jié) 58第 3 章 FFmpeg的編解碼 593.1 音視頻時(shí)間 593.1.1 幀率和采樣率 593.1.2 時(shí)間基準(zhǔn)的設(shè)定 623.1.3 時(shí)間戳的計(jì)算 643.2 分離音視頻 673.2.1 原樣復(fù)制視頻文件 673.2.2 從視頻文件剝離音頻流 703.2.3 切割視頻文件 723.3 合并音視頻 743.3.1 合并視頻流和音頻流 743.3.2 對(duì)視頻流重新編碼 763.3.3 合并兩個(gè)視頻文件 823.4 視頻瀏覽與格式分析 853.4.1 通用音視頻播放器 863.4.2 視頻格式分析工具 883.4.3 把原始的H264文件封裝為MP4格式 903.5 小結(jié) 92第 4 章 FFmpeg處理圖像 934.1 YUV圖像 934.1.1 為什么要用YUV格式 934.1.2 把視頻幀保存為YUV文件 984.1.3 YUV圖像瀏覽工具 1004.2 JPEG圖像 1064.2.1 為什么要用JPEG格式 1064.2.2 把視頻幀保存為JPEG圖片 1074.2.3 圖像轉(zhuǎn)換器 1104.3 其他圖像格式 1124.3.1 把視頻幀保存為PNG圖片 1134.3.2 把視頻幀保存為BMP圖片 1164.3.3 把視頻保存為GIF動(dòng)畫 1194.4 實(shí)戰(zhàn)項(xiàng)目:圖片轉(zhuǎn)視頻 1244.5 小結(jié) 131第 5 章 FFmpeg處理音頻 1325.1 PCM音頻 1325.1.1 為什么要用PCM格式 1325.1.2 把音頻流保存為PCM文件 1355.1.3 PCM波形查看工具 1395.2 MP3音頻 1425.2.1 為什么要用MP3格式 1425.2.2 Linux環(huán)境集成mp3lame 1445.2.3 把音頻流保存為MP3文件 1455.3 其他音頻格式 1485.3.1 把音頻流保存為WAV文件 1485.3.2 把音頻流保存為AAC文件 1525.3.3 音頻重采樣 1585.4 實(shí)戰(zhàn)項(xiàng)目:拼接兩段音頻 1635.5 小結(jié) 168第 6 章 FFmpeg加工視頻 1696.1 濾波加工 1696.1.1 簡單的視頻濾鏡 1696.1.2 簡單的音頻濾鏡 1766.1.3 利用濾鏡切割視頻 1826.1.4 給視頻添加方格 1856.2 添加特效 1886.2.1 轉(zhuǎn)換圖像色度坐標(biāo) 1886.2.2 添加色彩轉(zhuǎn)換特效 192
6.2.3 調(diào)整明暗對(duì)比效果 1956.2.4 添加淡入淡出特效 1976.3 變換方位 1996.3.1 翻轉(zhuǎn)視頻的方向 1996.3.2 縮放和旋轉(zhuǎn)視頻 2006.3.3 裁剪和填充視頻 2026.4 實(shí)戰(zhàn)項(xiàng)目:老電影懷舊風(fēng) 2046.5 小結(jié) 206第 7 章 FFmpeg添加圖文 2077.1 添加圖標(biāo) 2077.1.1 添加圖片標(biāo)志 2077.1.2 清除圖標(biāo)區(qū)域 2097.1.3 利用調(diào)色板生成GIF動(dòng)畫 2117.2 添加文本 2147.2.1 Linux環(huán)境安裝FreeType 2147.2.2 添加英文文本 2167.2.3 添加中文文本 2187.3 添加字幕 2217.3.1 Linux環(huán)境安裝libass 2217.3.2 Linux安裝中文字體 2257.3.3 添加中文字幕 2267.4 實(shí)戰(zhàn)項(xiàng)目:卡拉OK音樂短片 2297.4.1 視頻字幕制作工具 2297.4.2 制作卡拉OK字幕 2337.5 小結(jié) 237第 8 章 FFmpeg自定義濾鏡 2388.1 Windows環(huán)境編譯FFmpeg 2388.1.1 給FFmpeg集成x264 2388.1.2 給FFmpeg集成avs2 2418.1.3 給FFmpeg集成mp3lame 2438.1.4 給FFmpeg集成FreeType 2458.1.5 給FFmpeg集成x265 2488.2 優(yōu)化FFmpeg源碼 2558.2.1 讀寫音視頻文件的元數(shù)據(jù) 2558.2.2 元數(shù)據(jù)的中文亂碼問題處理 258
8.2.3 修改FFmpeg源碼解決亂碼 2628.3 自定義視頻濾鏡 2658.3.1 添加模糊和銳化特效 2658.3.2 視頻濾鏡的代碼分析 2678.3.3 自定義視頻翻轉(zhuǎn)濾鏡 2698.4 實(shí)戰(zhàn)項(xiàng)目:側(cè)邊模糊濾鏡 2718.4.1 實(shí)現(xiàn)兩側(cè)模糊邏輯 2718.4.2 集成側(cè)邊模糊濾鏡 2758.5 小結(jié) 277第 9 章 FFmpeg混合音視頻 2789.1 多路音頻 2789.1.1 同時(shí)過濾視頻和音頻 2789.1.2 利用多通道實(shí)現(xiàn)混音 2819.1.3 給視頻添加背景音樂 2899.2 多路視頻 2939.2.1 通過疊加視頻實(shí)現(xiàn)畫中畫 2939.2.2 多路視頻實(shí)現(xiàn)四宮格效果 3029.2.3 透視兩路視頻的混合畫面 3079.3 轉(zhuǎn)場動(dòng)畫 3119.3.1 給視頻添加轉(zhuǎn)場動(dòng)畫 3119.3.2 轉(zhuǎn)場動(dòng)畫的代碼分析 3149.3.3 自定義斜邊轉(zhuǎn)場動(dòng)畫 3179.4 實(shí)戰(zhàn)項(xiàng)目:翻書轉(zhuǎn)場動(dòng)畫 3229.4.1 貝塞爾曲線實(shí)現(xiàn)翻頁特效 3229.4.2 集成翻書轉(zhuǎn)場動(dòng)畫效果 3269.5 小結(jié) 329第 10 章 FFmpeg播放音視頻 33010.1 通過SDL播放音視頻 33010.1.1 FFmpeg集成SDL 33010.1.2 利用SDL播放視頻 33510.1.3 利用SDL播放音頻 34210.2 FFmpeg推流和拉流 34610.2.1 什么是推拉流 34610.2.2 FFmpeg向網(wǎng)絡(luò)推流 35010.2.3 FFmpeg從網(wǎng)絡(luò)拉流 35310.3 SDL處理線程間同步 35510.3.1 SDL的線程 35510.3.2 SDL的互斥鎖 35710.3.3 SDL的信號(hào)量 36010.4 實(shí)戰(zhàn)項(xiàng)目:同步播放音視頻 36710.4.1 同步音視頻的播放時(shí)鐘 36710.4.2 優(yōu)化音視頻的同步播放 37110.5 小結(jié) 376第 11 章 FFmpeg的桌面開發(fā) 37711.1 搭建Qt開發(fā)環(huán)境 37711.1.1 安裝桌面開發(fā)工具Qt 37711.1.2 創(chuàng)建一個(gè)基于C 的Qt項(xiàng)目 38111.1.3 把Qt項(xiàng)目打包成可執(zhí)行文件 38311.2 桌面程序播放音頻 38511.2.1 給Qt工程集成FFmpeg 38511.2.2 Qt工程使用SDL播放音頻 38711.2.3 通過QAudioSink播放音頻 39211.3 桌面程序播放視頻 39611.3.1 通過QImage播放視頻 39611.3.2 OpenGL的著色器小程序 40411.3.3 使用OpenGL播放視頻 40711.4 實(shí)戰(zhàn)項(xiàng)目:桌面影音播放器 41111.5 小結(jié) 415第 12 章 FFmpeg的移動(dòng)開發(fā) 41612.1 搭建Android開發(fā)環(huán)境 41612.1.1 搭建Android的NDK開發(fā)環(huán)境 41612.1.2 交叉編譯Android需要的SO庫 42012.1.3 App工程調(diào)用FFmpeg的SO庫 42112.2 App通過FFmpeg播放音頻 42712.2.1 交叉編譯時(shí)集成mp3lame 42712.2.2 通過AudioTrack播放音頻 42912.2.3 使用OpenSL ES播放音頻 43212.3 App通過FFmpeg播放視頻 43912.3.1 交叉編譯時(shí)集成x264和FreeType 43912.3.2 通過ANativeWindow播放視頻 44312.3.3 使用OpenGL ES播放視頻 44912.4 實(shí)戰(zhàn)項(xiàng)目:仿剪映的視頻剪輯 45512.5 小結(jié) 461附錄A 音視頻專業(yè)術(shù)語索引 462