書名:只要一行指令!FFmpeg應用開發完全攻略
原文書名:
產品代碼:
9786267146330系列編號:
DM2256定價:
880元作者:
殷汶杰頁數:
544頁開數:
17x23x2.37裝訂:
平裝上市日:
20220921出版日:
20220921出版社:
深智數位股份有限公司CIP:
312.8市場分類:
電腦資訊產品分類:
書籍免稅聯合分類:
電腦資訊類- ※缺書中
商品簡介
★FFmpeg 繁體中文全球第 1 本
★最完整 Know-How 與應用開發完全攻略!
【Video Makers 經常遇到的困難】:
「常常到處找工具網站,整個 PC 中充滿了各種僅支援單一功能的軟體」
「檢舉魔人 —— 常常需要剪接行車記錄器的檔案」
「TikTok 的玩家 —— 常常要修改短影音」
「YouTuber —— 更需要強大的剪片軟體」
►►►【FFmpeg】就是 Video Makers 的救星!
FFmpeg 一行指令就能做到影音的轉檔、合併、分割、擷取、下載、串流存檔,你沒有看錯,一行指令就可以搞定上面所有的工作!連早期的 YouTube 都靠 FFmpeg,因此你需要一本輕鬆上手的 FFmpeg 指南!
本書特色:
►►► 從影音原理解析到 FFmpeg 應用開發,邁向影音開發達人之路!
● 從原理說起,讓你先對影音資料有最完整的認識
● 了解組成影音的像素╱顏色╱位元深寬度╱解析度╱H.264╱H.265
● MP3╱AAC╱FLV╱MP4╱AVI╱MPEG…等數不完的格式分析介紹
● 串流媒體網路原理詳解:ISO → TCP/IP → Streaming
● 了解組成影音的取樣率╱波長╱頻率╱位元數╱音色
● FFplay╱FFprobe╱FFmpeg:一行指令就搞定轉檔、剪接、合併、截圖、編碼
● CPU/GPU硬解軟解原理以及濾鏡的介紹
● NGINX 的 RTMP╱HLS╱HTTP-FLV 串流媒體伺服器
● 完整的 FFmpeg SDK 在各種語言中的應用及程式範例
● FFmpeg SDK 完成音訊、影片的編解碼、打包拆包、濾鏡、採樣
● 範例 code 超值下載:deepmind.com.tw
Ch01-06 影音技術的基礎知識
講解影音編碼與解碼標準、媒體容器的封裝格式、網路流媒體協定簡介
Ch07-09 命令列工具 FFmpeg╱FFprobe╱FFplay 的使用方法
解析命令列工具在建立測試環境、建構測試用例、排查系統 Bug 時常常發揮重要作用 → 掌握 FFmpeg 命令列工具的使用方法,就能在實際工作中有效提升工作效率!
Ch10-15 FFmpegSDK 編解碼的使用方法╱封裝與解封裝╱媒體資訊編輯
實際的企業影音 project 中,通常呼叫 FFmpeg 相關的 API 而非使用命令列工具的方式實現最基本的功能,因此該部分內容具有較強的實踐意義,推薦所有讀者閱讀並多加實踐。本部分的程式碼來自於 FFmpeg官方範例程式碼,由筆者精心改編,穩定性高,且更易於理解。
★FFmpeg 繁體中文全球第 1 本
★最完整 Know-How 與應用開發完全攻略!
【Video Makers 經常遇到的困難】:
「常常到處找工具網站,整個 PC 中充滿了各種僅支援單一功能的軟體」
「檢舉魔人 —— 常常需要剪接行車記錄器的檔案」
「TikTok 的玩家 —— 常常要修改短影音」
「YouTuber —— 更需要強大的剪片軟體」
►►►【FFmpeg】就是 Video Makers 的救星!
FFmpeg 一行指令就能做到影音的轉檔、合併、分割、擷取、下載、串流存檔,你沒有看錯,一行指令就可以搞定上面所有的工作!連早期的 YouTube 都靠 FFmpeg,因此你需要一本輕鬆上手的 FFmpeg 指南!
本書特色:
►►► 從影音原理解析到 FFmpeg 應用開發,邁向影音開發達人之路!
● 從原理說起,讓你先對影音資料有最完整的認識
● 了解組成影音的像素╱顏色╱位元深寬度╱解析度╱H.264╱H.265
● MP3╱AAC╱FLV╱MP4╱AVI╱MPEG…等數不完的格式分析介紹
● 串流媒體網路原理詳解:ISO → TCP/IP → Streaming
● 了解組成影音的取樣率╱波長╱頻率╱位元數╱音色
● FFplay╱FFprobe╱FFmpeg:一行指令就搞定轉檔、剪接、合併、截圖、編碼
● CPU/GPU硬解軟解原理以及濾鏡的介紹
● NGINX 的 RTMP╱HLS╱HTTP-FLV 串流媒體伺服器
● 完整的 FFmpeg SDK 在各種語言中的應用及程式範例
● FFmpeg SDK 完成音訊、影片的編解碼、打包拆包、濾鏡、採樣
● 範例 code 超值下載:deepmind.com.tw
Ch01-06 影音技術的基礎知識
講解影音編碼與解碼標準、媒體容器的封裝格式、網路流媒體協定簡介
Ch07-09 命令列工具 FFmpeg╱FFprobe╱FFplay 的使用方法
解析命令列工具在建立測試環境、建構測試用例、排查系統 Bug 時常常發揮重要作用 → 掌握 FFmpeg 命令列工具的使用方法,就能在實際工作中有效提升工作效率!
Ch10-15 FFmpegSDK 編解碼的使用方法╱封裝與解封裝╱媒體資訊編輯
實際的企業影音 project 中,通常呼叫 FFmpeg 相關的 API 而非使用命令列工具的方式實現最基本的功能,因此該部分內容具有較強的實踐意義,推薦所有讀者閱讀並多加實踐。本部分的程式碼來自於 FFmpeg官方範例程式碼,由筆者精心改編,穩定性高,且更易於理解。
作者簡介
殷汶杰
2013 年畢業於上海大學資訊與通信工程學院,主要研究方向為視訊壓縮編碼、流媒體技術,其間發表了多篇高水準學術論文。具有多家一線互聯網上市公司、世界五百強企業與行業獨角獸公司的核心開發工作經驗,成功申請了多項專利(其中一項國際專利)。發表了數百篇技術博客,並發佈了多個線上教學課程,在行業內具有較強的技術影響力。
書籍目錄
►►► PART 1 基礎知識
第 1 章 影音技術概述
1.1 影音資訊與多媒體系統
1.2 典型的影音與多媒體系統結構
第 2 章 圖型、像素與顏色空間
2.1 圖型與像素
2.2 圖型的位深與顏色空間
2.3 圖型壓縮編碼
第 3 章 視訊壓縮編碼
3.1 視訊壓縮編碼的基礎知識
3.2 視訊壓縮編碼標準的發展歷程
3.3 視訊壓縮編碼的基本原理
3.4 視訊編碼標準 H.264
3.5 高效視訊編碼標準 H.265
第 4 章 音訊壓縮編碼
4.1 音訊壓縮編碼的基礎知識
4.2 音訊資訊採樣與數位化
4.3 脈衝碼調制
4.5 AAC 格式與 AAC 編碼標準
第 5 章 影音檔案容器和封裝格式
5.1 概述
5.2 FLV 格式
5.3 MPEG-TS 格式
5.4 MP4 格式
第 6 章 影音串流媒體協定
6.1 網路通訊協定模型
6.2 網路串流媒體協定——RTMP
6.3 網路串流媒體協定——HLS 協定
►►► PART 2 命令列工具
第 7 章 FFmpeg 的基本操作
7.1 FFmpeg 概述
7.2 ffplay 的基本使用方法
7.3 ffprobe 的基本使用方法
7.4 ffmpeg 的基本使用方法
第 8 章 濾鏡圖
8.1 ffmpeg 影音濾鏡
8.2 簡單濾鏡圖的應用
8.3 複合濾鏡圖的應用
第 9 章 串流媒體應用
9.1 建構 SRS 串流媒體服務
9.2 建構 Nginx RTMP 串流媒體服務
►►► PART 3 開發實戰
第 10 章 FFmpeg SDK 的使用
10.1 使用 CMake 建構專案
10.2 FFmpeg SDK 基本使用方法範例:獲取目錄下的檔案資訊
第 11 章 使用 FFmpeg SDK 進行視訊編解碼
11.1 libavcodec 視訊編碼
11.2 libavcodec 視訊解碼
第 12 章 使用 FFmpeg SDK 進行音訊編解碼
12.1 libavcodec 音訊編碼
12.2 libavcodec 音訊解碼
第 13 章 使用 FFmpeg SDK 進行影音檔案的解封裝與封裝
13.1 影音檔案的解封裝
13.2 音訊流與視訊流檔案的封裝
第 14 章 使用 FFmpeg SDK 添加視訊濾鏡和音訊濾鏡
14.1 視訊濾鏡
14.2 音訊濾鏡
第 15 章 使用 FFmpeg SDK 進行視訊圖型轉換與音訊重採樣
15.1 視訊圖型轉換
15.2 音訊重採樣
推薦序/導讀/自序
多年來,影音、多媒體技術一直以各種各樣的形式對社會產生深刻影響,從專業領域的廣播電視到消費領域的個人數位攝影機等這些都已融入人們生活的各方面。進入網際網路時代,線上視訊、短視訊等娛樂場景,以及遠端會議、遠端醫療等專業應用進一步擴展了影音技術的應用領域,使其與現代文明的聯繫更加密不可分。
● 影音技術推動泛娛樂行業高速發展
從 21 世紀的最初幾年開始,線上視訊產業便漸漸開始興起。隨著寬頻網逐漸走入尋常百姓家,消費者們無須再忍受撥號網路緩慢的傳送速率,部分知名門戶網站也逐漸開始涉足線上視訊領域。此後線上視訊網站層出不窮,線上視訊行業呈現百花齊放的場景。
在視訊網站平台的發展起起伏伏之際,另一種線上視訊娛樂的形態——網路互動直播開始異軍突起。直播本是歷史最悠久的視訊應用之一,多年以來廣電領域的數位電視廣播、閉路電視系統一直是直播系統的最典型應用。進入網際網路時代,直播的整體形態與產品細節與傳統的閉路電視系統相比發生了翻天覆地的變化,最典型的升級是從主播到觀眾的單方面放送,轉變為主播與觀眾的雙向互動,網路互動直播從萌芽到興起,到最為繁榮的「千播大戰」,直到最終經歷多次的兼併和淘汰,其中的倖存者已經寥寥無幾。
除中、長視訊外,隨著以智慧手機為代表的移動智慧裝置的日漸普及,短視訊作為一項新的業務形態逐漸佔據了消費者的碎片時間。通常認為短視訊起源自本世紀早期的微電影、網路短片和校園 DV 等形態,伴隨著各種 UGC 視訊平台的蓬勃發展而越發興盛。在智慧行動裝置全面進入人們的生活後,透過行動裝置進行「短、平、快」風格的內容分享重新點燃了短視訊行業的星星之火,低成本、快節奏的短視訊拍攝成為人們分享生活和觀點的重要手段。行動短視訊平台憑藉其豐富的內容和對使用者心理與喜好的研究在使用者中產生了巨大影響,成為當前基於影音的泛娛樂場景中新的一極。
● 影音技術給商務與辦公領域帶來新生命
目前,遠端辦公已成為必然選擇。當前市場上多家科技企業發佈了多款遠端辦公產品軟體或一體式解決方案,典型的有 Microsoft 的 Teams、Google 的Google Meet、Zoom 等。這些產品的共同特點是基於網際網路、雲端運算等技術,整合了電子郵件、電子白板、遠端連接與桌面共用等模組,旨在為異地辦公的員工和團隊提供強大而可靠的交流和共用服務。建構一個穩定而完備的遠端辦公系統需要多個不同的系統精密配合,而即時影音通訊可謂其中技術最為複雜、挑戰最大的模組之一,其穩定性和性能直接決定了系統整體的性能與使用者體驗。
目前主流的即時影音通訊解決方案主要基於 WebRTC 標準。與傳統的 RTMP+CDN 系統相比,基於 WebRTC 的方案延遲更低,卡頓情況更少,且支援直接連線瀏覽器進行推流與播放。
● 影音技術具有廣闊的發展前景和學習價值
從上述影音應用的發展歷史我們可以看出,影音技術始終在行業內佔據重要地位。從線上視訊網站到互動直播,再到短視訊與即時影音通訊,當影音領域在某一個行業發展到頂峰,甚至隨後開始逐漸衰落時,也總是有另一個風口異軍突起成功接棒。究其原因在於,影音由於具有可以生動形象地攜帶大量資訊,且易於被人們快速理解的特性,已成為資訊傳輸效率最高的通訊媒介。幾乎所有的商業形態都可以透過影音技術實現資訊的快速理解與交換,實現效率的倍增。因此,近年來無論社會如何發展變化,影音領域依然以朝陽產業的面貌蓬勃發展。
另一方面,影音技術是軟體程式設計的一項高階技術,具有較高的存取控制門檻。一名優秀的影音專案師應當從原理到實踐做到融會貫通,至少需要掌握以下領域的知識與技能:
數學、資訊與編碼理論、電腦系統原理、演算法理論、程式設計語言(如 C++、Java、Go 等)、網路開發、跨平台軟體開發(如行動端、服務端和用戶端)和系統架構設計等。
因此,影音技術的學習之路比普通的軟體開發之路更加艱難、漫長。而另一方面,這也成為影音領域技術人員最好的護城河,為行業內的開發者提供了深入沉澱的機會。
● 本書的價值
影音技術並不是一項可以輕鬆掌握的技術,為了解決這個問題,許多天才程式設計師貢獻了多項開放原始碼專案對影音開發的底層技術進行了封裝與整合,以提升整體的開發效率,FFmpeg 便是其中的典型。作為最強大的影音開放原始碼項目之一,FFmpeg 提供了影音的編碼與解碼、封裝與解封裝、推拉流和影音資料編輯等操作,遮罩了許多底層技術細節,使得開發者可以將更多的精力專注在業務邏輯的實現上,大幅提升了開發如播放機、推流、影音編輯等用戶端或 SDK 等產品的效率。
儘管如此,對初學者來說,FFmpeg 提供的命令列工具和 SDK 的使用方法仍然較為困難。除影音的基本概念外,繁冗複雜的命令列參數與 API 常常讓初學者無從下手,除官方提供的文件外,幾乎沒有完備的技術資料可供參考。本書系統地講解了影音領域的基礎知識,並由淺入深地介紹了 FFmpeg 的基本使用方法,筆者希望本書的面世可以進一步降低影音開發的入門門檻,讓更多有志於從事影音開發的讀者可以為整個行業作出貢獻。
● 本書的內容及學習方法
本書內容分為三部分,各部分之間的內容相互連結但又相對獨立,讀者可以根據自身的需求按順序閱讀或選擇性學習。
◎ 第 1∼6 章為本書的第一部分,主要講解影音技術的基礎知識,包括影音編碼與解碼標準、媒體容器的封裝格式和網路串流媒體協定簡介。建議對影音技術不夠熟悉的讀者從該部分開始閱讀,有一定基礎的讀者可以選擇泛讀或跳過該部分。
◎ 第 7∼9 章為本書的第二部分,主要講解命令列工具 ffmpeg、ffprobe 和 ffplay的主要使用方法。命令列工具在架設測試環境、建構測試用例和排除系統 Bug 時常常造成重要作用。如果想要在實際工作中有效提升工作效率,那麼應熟練掌握 FFmpeg 命令列工具的使用方法。
◎ 第 10∼15 章為本書的第三部分,主要講解如何使用 libavcodec、libavformat 等 FFmpeg SDK 進行編碼與解碼、封裝與解封裝,以及媒體資訊編輯等影音基本功能開發的方法。在實際的企業級影音專案中,通常採用呼叫 FFmpeg 相關的 API 而非使用命令列工具的方式實現最基本的功能,因此該部分內容具有較強的實踐意義,推薦所有讀者閱讀並多加實踐。此部分的程式實現基本來自 FFmpeg 官方文件中的範例程式,筆者在此基礎上進行了一定的改編。書中程式整體上遵循了範例程式的指導,穩定性較強,且更易於理解。
● 勘誤與聯繫方式
由於本書內容較為繁雜,且筆者在撰寫稿件的同時仍承擔繁重的最前線開發任務,因此書中極有可能出現部分疏漏或錯誤,望讀者們閱讀後不吝指正,提出寶貴的意見或建議,聯繫電子郵件:[email protected]。
● 致謝
自本書初步策劃開始,截至今日已一年有餘。這是我第一次獨立撰寫書稿,其間所經歷的困難甚至痛苦不言而喻。最終初稿得以完成,首先必須感謝我的伴侶,在本書定稿的過程中,你完成了身份從女朋友到妻子的升級,沒有你的支持,本書斷無問世的可能。此外還必須感謝我的父母,你們的關愛、期望與督促,也是本書問世的源動力之一。
感謝博文視點的編輯老師,你們的專業程度一直令我嘆服。沒有你們從開始到最終的指導和幫助,本書是一定無法完成的。
感謝各個技術交流群中的同行與朋友,以及我的網誌與課程的讀者,有了你們的支持,我才克服了所經歷的困難,將本書帶到你們的面前。
希望在不久的將來,能有更多更有價值的內容貢獻給大家,謝謝!
殷汶杰