ffmpeg音視頻框架的簡介

2020-12-22 閒聊代碼

ffmpeg是多媒體領域應用最廣泛的一個開源框架,包含了傳輸協議、視頻格式、編解碼、圖像濾鏡、語音處理等功能,並可以與cuda、opencv等這個領域的其他軟體對接,幾乎是事實上的音視頻標準庫

它的架構清晰簡潔,大體上分為這幾個部分:

1,傳輸協議

tcp、udp、http、rtmp、rtsp等常見協議的支持,本地文件也被實現為一個協議file。

2,視頻封裝格式

ts、flv、mp4、mp3、mov等等,市面上常見的格式,幾乎沒有ffmpeg解析不了的。

3,編解碼協議

視頻的H264、H265、vp8等,

音頻的mp3、aac、opus等,

大概支持幾十種編解碼協議,常見的不常見的都有,最流行的還是H264和aac。

4,圖像濾鏡和語音濾鏡

圖像和語音的處理,在ffmpeg裡都是通過avfilter,它是ffmpeg提供的對解碼後的圖像和語音進行處理的一個框架。

5,模塊化設計

ffmpeg的模塊化設計,足以與nginx和Linux內核相媲美,添加第三方模塊或者自定義模塊都非常方便。

它自帶的各個功能也是以模塊的形式管理的,可以在編譯之前靈活配置。

上圖是ffmpeg官網的下載頁面,可以看到最新的版本為4.3.1。

下圖為解壓後的文件夾,我的是4.2.1,小版本之間的API一般不會有大的改動,除非大版本號換了。

那個綠色的configure文件,就是ffmpeg的配置生成腳本。

它是一個shell腳本,可以根據用戶選擇的配置項生成所需的Makefile,然後直接make -j4就可以編譯所需的版本了。

ffmpeg的編譯需要yasm彙編器,可以直接sudo apt-get安裝。

如果ffmpeg需要的版本與apt-get默認安裝的不一致時,也可以去下載源碼自己編譯安裝。

Linux的軟體安裝現在也是sudo apt-get install 軟體名就行,就算自己下載編譯基本也是./configure,然後make -j4,最後sudo make install

比windows的滑鼠一路next還是稍微麻煩點,但靈活呀:(

視頻的三要素:寬度width、高度height、像素格式pix_fmt

音頻的三要素:採樣率sample_rate、聲道數channels、採樣格式sample_fmt

視頻常見的是1280x720,yuv420p。

音頻常見的是44100(44.1k)、2聲道、S16,或者48000(48k)、2聲道、S16。

他們都有播放時間PTS和解碼時間DTS

ffmpeg是圍繞這8個參數處理的,其中dts一般不需要過於關注,重點是pts,它確定了音視頻的每一幀的播放時間。

ffmpeg(多媒體框架都一樣)的視頻數據流是這樣的:

流媒體伺服器->傳輸協議->解封裝demux->解碼decode->音視頻原始流->avfilter濾鏡->音畫同步->輸出(編碼encode->封裝mux->傳輸協議->保存本地或推流伺服器)。

美顏、美聲之類的處理,都可以在avfilter中實現為一個濾鏡,或多個濾鏡組合。

ffmpeg的例子代碼在doc/examples目錄,實際做項目時可以參考。

文件名可以看出大概是哪方面的例子。

ffmpeg的主要是數據結構:

1,AVFrame

存儲的是原始音視頻幀的數據,剛採集的,解碼後的,編碼前的,都是這類數據。

2,AVPacket

編碼後的,解碼前的,壓縮數據。

H264、AAC的數據包,都是這類,需要解碼之後才能獲得AVFrame數據。

3,AVFormatContext

一個視頻文件,或者直播流的結構體,在播放時使用avfortmat_open_input()函數打開,如果是編碼輸出則使用

avformat_alloc_output_context2()。

4,AVStream

表示視頻中的一路視頻或者音頻流,文件或者直播點播流裡可以包含多路視頻音頻流,每一路就是一個AVStream。

5,AVCodecAVCodecContext

解碼器或者編碼器,及他們對應的上下文結構體。

6,AVFilterAVFilterContext

視頻或者音頻濾鏡,和他們對應的上下文結構體。

編解碼器和濾鏡是提前寫好、編譯在ffmpeg庫裡的,他們的上下文則是應用程式使用的時申請的。

協議和封裝格式相關代碼在libavformat目錄。

濾鏡相關代碼在libavfilter目錄。

編解碼相關代碼在libavcodec目錄。

libavutil目錄為一些常用的公共函數。

libswscale為圖像的釋放處理函數,libswresample為聲音的重採樣函數,例如44.1k轉48k,5.1聲道轉2聲道,等等。

fftools則是自帶的視頻處理工具,ffmpeg和ffplay的代碼都在這個目錄。

相關焦點

  • ffmpeg的avfilter簡介
    avfilter,是ffmpeg為圖像和語音處理提供的濾鏡子框架,代碼位於libavfilter目錄。ffmpeg本身提供了很多的濾鏡模塊,也可以添加自定義模塊,在編譯時可以使用./configure腳本靈活配置。
  • Android中集成FFmpeg及NDK基礎知識
    來源:xinyang_codehttps://juejin.im/post/5b631145e51d45162679f09e程式設計師共讀整理髮布,轉載請聯繫作者獲得授權前言在日常App開發中,難免有些功能是需要藉助NDK來完成的,比如現在常見的音視頻處理等
  • [You-get]下載m3u8問題,即安裝ffmpeg問題
    前言本來吧,今天是想聊點其他的,畢竟這幾天說的都是Python相關的,然後想今天聊點其他;但是有兩個朋友都談到了ffmpeg的問題,那麼今天還是來聊聊you-get的問題吧;昨天發了文章後,就有朋友留言說ffmpeg的問題:截圖
  • 【Android 音視頻開發打怪升級:音視頻硬解碼篇】二、音視頻硬解碼流程:封裝基礎解碼框架
    音視頻硬解碼篇:1,音視頻基礎知識2,音視頻硬解碼流程:封裝基礎解碼框架3,音視頻播放:音視頻同步4,音視頻解封和封裝:生成一個MP4二、使用OpenGL渲染視頻畫面篇1,初步了解OpenGL ES2,使用OpenGL渲染視頻畫面3,OpenGL渲染多視頻,實現畫中畫4,深入了解OpenGL之EGL
  • FFmpeg時間戳詳解
    視頻中由於 B 幀需要雙向預測,B 幀依賴於其前和其後的幀,因此含 B 幀的視頻解碼順序與顯示順序不同,即 DTS 與 PTS 不同。當然,不含 B 幀的視頻,其 DTS 和 PTS 是相同的。下圖以一個開放式 GOP 示意圖為例,說明視頻流的解碼順序和顯示順序採集順序指圖像傳感器採集原始信號得到圖像幀的順序。
  • 【專題】在線視頻下載完全指南
    -->> 目錄用戶界面的小科普安裝 youtube-dl 下載器安裝 FFmpeg 音視頻編解碼庫使用 youtube-dl 進行下載        youtube 的超高清視頻採用音視頻分離的方式存儲,為節省後期手動合併所帶了的種種麻煩 youtube-dl 可以自動調用 ffmpeg 進行合併。我所需要做的就是把 ffmpeg 的運行環境搭建好。
  • IVWEB玩轉wasm系列-純web視頻剪輯/轉換工具
    videoconverter將音視頻領域中的瑞士軍刀ffmpeg通過emscripten(一個可以將C/C++代碼生成asm/wasm的編譯工具)轉化為javascript,實現了在瀏覽器上對視頻的簡單操作,包括視頻的裁剪/轉換。
  • 音視頻技術開發周刊|172
    ,我們通常可以使用libx264, ffmpeg等第三方視頻編碼庫,但是如果對編碼的速度有一定的要求,要實現實時甚至超實時的高速視頻編碼,我們並沒有太多選項,只能使用Android提供的MediaCodec硬編碼模塊。
  • 我的視頻製作工具
    先把拍攝的視頻,音頻或者照片都導入到iMovie的素材庫中,利用iMovie進行視頻剪輯,除了基本的視頻分割、剪切、編排、字幕等外,iMovie本身也提供一些主題,比如小樂說唐詩就採用News的新聞報導方式,也可以對幀畫面進行一些特效的製作,比如快動作,做老照片的效果等等。
  • 音視頻測試實戰——記音視頻測試那些事
    通過這篇文章,期望讓大家了解到音視頻關注的指標,對音視頻的評測過程有一個基本的了解。 本文主要從三個方面展開,一是音視頻測試的目的,主要說音視頻測試能解決的問題,比較通用;二是從音視頻的角度介紹怎麼做測試,包括測試維度、評價框架、整體結構和每一部分的具體內容
  • Java框架視頻入門教程,常用開發框架
    Java框架視頻入門教程,常用開發框架,一般來說,很多Web框架都在是前端變得更有趣,對用戶更加友好。Java有很多用戶,也有很多開發框架適用他,選擇哪個框架才能更適合我的項目呢?
  • FFmpeg 簡單合成 MP4 :視頻解封與重新封裝
    教程代碼:【Github傳送門:https://github.com/ChenLittlePing/LearningVideo】目錄一、Android音視頻硬解碼篇:二、使用OpenGL渲染視頻畫面篇三、Android FFmpeg音視頻解碼篇本文你可以了解到 利用 FFmpeg 對音視頻進行簡單的解封和重新封裝
  • 猜音謎——倒放音頻挑戰賽
    前兩天刷嗶哩嗶哩,看了兩期《小翔哥是世界上最帥的男人》和《笑死人的倒放挑戰》視頻,視頻裡他們將語音或者音頻倒著播放,特別搞笑。
  • 下載視頻and轉音頻,youtube-dl自己就給辦了
    這個參數再配合另一個ffmpeg模塊居然...居然可以把視頻轉化成mp3音頻,而且強大到不限定必須是mp4視頻,也不限定必須是mp3音頻。1、如果視頻網站有提供視頻對應的音頻,可以直接下載它的音頻先給個視頻的連結:油管有提供該視頻對應的音頻,然後你還不嫌乎音頻的格式,那麼可以用以下代碼直接下載油管提供的視頻對應的音頻。
  • 《視頻直播技術詳解》之(四):編碼和封裝
    ffmpeg  -flags2 +export_mvs -i tutu.mp4 -vf codecview=mv=pf+bf+bb tutudebug2.mp4ffmpeg -i tutudebug2.mp4 'tutunormal-%03d.bmp'除了空間冗餘和時間冗餘的壓縮,主要還有編碼壓縮和視覺壓縮,下面是一個編碼器主要的流程圖:圖 3、圖
  • 一個實用的在線m3u8視頻在線下載工具
    自己下載m3u8還是喜歡用youtube-dl,或者直接用ffmpeg下載,很多下載工具都是基於ffmpeg的,不如直接用也是挺方便的。https://bbs.zsxwz.com/thread-2691.htmffmpeg -allowed_extensions ALL -i http://xxx.m3u8 -c copy -bsf:a aac_adtstoasc xxx.mp4不過命令行下載需要記很多參數,很多人也未必喜歡,但批量下載的時候,一個簡單的
  • 下面是一些對林海音的簡介內容
    第一眼看到林海音這個名字,會令人覺得非常熟悉,似乎以前在哪裡見過一樣。當看完林海音簡介才會發現,原來是她讓我們看到了關於爸爸和花的故事,雖然在先秦驪歌已經出現,但人們真正接觸驪歌卻是通過讀林海音的文章。她的作品在我國初中小學的多版課本中出現。