亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

FFMPEG視音頻編解碼零基礎學習方法

系統(tǒng) 2284 0

在CSDN上的這一段日子,接觸到了很多同行業(yè)的人,尤其是使用FFMPEG進行視音頻編解碼的人,有的已經(jīng)是有多年經(jīng)驗的“大神”,有的是剛開始學習的初學者。在和大家探討的過程中,我忽然發(fā)現(xiàn)了一個問題:在“大神”和初學者之間好像有一個不可逾越的鴻溝?!按笊瘛眰兯礁叱?,探討著深奧的問題;而初學者們還停留在入門階段。究竟是什么原因造成的這種“兩極分化”呢?最后,我發(fā)現(xiàn)了問題的關鍵:FFMPEG難度比較大,卻沒有一個循序漸進,由簡單到復雜的教程?,F(xiàn)在網(wǎng)上的有關FFMPEG的教程多半難度比較大,不太適合剛接觸FFMPEG的人學習;而且很多的例子程序編譯通不過,極大地打消了學習的積極性。我自己在剛開始學習FFMPEG的時候也遇到了很大的困難。為了幫助更多的人快速成為“大神”,我想總結(jié)一個學習FFMPEG的方法,方便大家循序漸進的學習FFMPEG。

0. 背景知識

本章主要介紹一下FFMPEG都用在了哪里(在這里僅列幾個我所知的,其實遠比這個多)。說白了就是為了說明:FFMPEG是非常重要的。

使用FFMPEG作為內(nèi)核視頻播放器:

Mplayer,ffplay,射手播放器,暴風影音,KMPlayer,QQ影音...

使用FFMPEG作為內(nèi)核的Directshow Filter:

ffdshow,lav filters...

使用FFMPEG作為內(nèi)核的轉(zhuǎn)碼工具:

ffmpeg,格式工廠...

事實上,F(xiàn)FMPEG的視音頻編解碼功能確實太強大了,幾乎囊括了現(xiàn)存所有的視音頻編碼標準,因此只要做視音頻開發(fā),幾乎離不開它。

?

1. ffmpeg程序的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe)

本章主要介紹一下ffmpeg工程包含的三個exe的使用方法。

ffmpeg的官方網(wǎng)站是: http://ffmpeg.org/

編譯好的windows可用版本的下載地址(官網(wǎng)中可以連接到這個網(wǎng)站,和官方網(wǎng)站保持同步):? http://ffmpeg.zeranoe.com/builds/

該網(wǎng)站中的FFMPEG分為3個版本:Static,Shared,Dev。

前兩個版本可以直接在命令行中使用,他們的區(qū)別在于:Static里面只有3個應用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每個exe的體積都很大,相關的Dll已經(jīng)被編譯到exe里面去了。Shared里面除了3個應用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,還有一些Dll,比如說avcodec-54.dll之類的。Shared里面的exe體積很小,他們在運行的時候,到相應的Dll中調(diào)用功能。

Dev版本是用于開發(fā)的,里面包含了庫文件xxx.lib以及頭文件xxx.h,這個版本不包含exe文件。

打開系統(tǒng)命令行接面,切換到ffmpeg所在的目錄,就可以使用這3個應用程序了。

1.1 ffmpeg.exe

ffmpeg是用于轉(zhuǎn)碼的應用程序。

一個簡單的轉(zhuǎn)碼命令可以這樣寫:

將input.avi轉(zhuǎn)碼成output.ts,并設置視頻的碼率為640kbps

?

  1. ffmpeg?-i?input.avi?-b:v?640k?output.ts??

具體的使用方法可以參考:? ffmpeg參數(shù)中文詳細解釋

?

詳細的使用說明(英文): http://ffmpeg.org/ffmpeg.html

1.2 ffplay.exe

ffplay是用于播放的應用程序。

一個簡單的播放命令可以這樣寫:

播放test.avi

?

  1. ffplay?test.avi??

具體的使用方法可以參考: ffplay的快捷鍵以及選項

?

詳細的使用說明(英文): http://ffmpeg.org/ffplay.html

1.3 ffprobe.exe

ffprobe是用于查看文件格式的應用程序。

這個就不多介紹了。

詳細的使用說明(英文): http://ffmpeg.org/ffprobe.html

?

2. ffmpeg庫的使用:視頻播放器

本章開始介紹使用ffmpeg的庫進行開發(fā)。

2.1 ffmpeg庫的配置

http://ffmpeg.zeranoe.com/builds/ 網(wǎng)站上

1.下載Dev版本,里面包含了ffmpeg的xxx.h頭文件以及xxx.lib庫文件。

2.下載Shared版本,里面包含了ffmpeg的dll文件。

3.將這兩部分文件拷貝到VC工程下面就可以了

注:可能會出現(xiàn)問題,參見: FFMPEG 庫移植到 VC 需要的步驟

如果不想自己手動配置,可以下載已經(jīng)配置好的工程: 最簡單的基于FFMPEG+SDL的視頻播放器

2.2 最簡單的視頻播放器

學習文章《 100行代碼實現(xiàn)最簡單的基于FFMPEG+SDL的視頻播放器 》中的代碼,這是ffmpeg做視頻播放器最簡單的代碼了,是我自己精簡出來的,已經(jīng)不能再簡化了,每一行都很重要。

ffmpeg的函數(shù)介紹: ffmpeg函數(shù)介紹

注1:播放視頻或音頻數(shù)據(jù)的時候會用到SDL。有關SDL可以參考: SDL介紹

? ? ? ? ?SDL參考文檔: SDL GUIDE 中文譯本

注2:如果想查看解碼后的數(shù)據(jù),需要用到 YUV播放器: YUV播放器源代碼 YUV Player Deluxe 都可以

2.3 相關結(jié)構(gòu)體的研究

ffmpeg的結(jié)構(gòu)體之間的關系參考文章: FFMPEG中最關鍵的結(jié)構(gòu)體之間的關系

結(jié)構(gòu)體中每個變量的分析,參考文章:

FFMPEG結(jié)構(gòu)體分析:AVFrame

FFMPEG結(jié)構(gòu)體分析:AVFormatContext
FFMPEG結(jié)構(gòu)體分析:AVCodecContext
FFMPEG結(jié)構(gòu)體分析:AVIOContext
FFMPEG結(jié)構(gòu)體分析:AVCodec
FFMPEG結(jié)構(gòu)體分析:AVStream
FFMPEG結(jié)構(gòu)體分析:AVPacket

?

?

3. ffmpeg庫的使用:音頻播放器

3.1 最簡單的音頻播放器

學習文章《 最簡單的基于FFMPEG+SDL的音頻播放器 》?中的代碼,和最簡單的視頻播放器一樣,這是最簡單的音頻播放器,每一行代碼都很重要。

注:如果想要查看解碼后的數(shù)據(jù)(PCM數(shù)據(jù)),需要用到Audition。

4. ffmpeg庫的使用:一個真正的播放器——ffplay

4.1 真正的播放器

ffplay流程圖如文章《 FFplay源代碼分析:整體流程圖 》?所示。ffplay代碼比較復雜,但是其核心代碼和《 100行代碼實現(xiàn)最簡單的基于FFMPEG+SDL的視頻播放器 》?是一樣的??梢詢蓚€工程結(jié)合著學習。

ffplay代碼簡介資料: 如何用FFmpeg編寫一個簡單播放器

ffplay使用說明: ffplay的快捷鍵以及選項

ffplay已經(jīng)移植到VC下的工程: ffplay_vc2005 (別人做的,質(zhì)量很不錯)

ffplay移植到MFC下的工程,包含了簡單的圖形界面和一些控制按鈕: ffplay播放器移植VC的工程:ffplay for MFC

?

5. ffmpeg庫的使用:編碼

5.1 編碼

ffmpeg編碼我自己研究的不是很多,可以參考文章?: 使用FFmpeg類庫實現(xiàn)YUV視頻序列編碼為視頻

上面那篇文章是用的類庫比較舊,新版類庫的的使用可以參考下面幾篇文章。

圖像的編碼可以參考: 最簡單的基于FFMPEG的圖像編碼器(YUV編碼為JPEG)

音頻的編碼可以參考: 最簡單的基于FFMPEG的音頻編碼器(PCM編碼為AAC)

視頻的編碼可以參考: 最簡單的基于FFMPEG的視頻編碼器(YUV編碼為H.264)

5.2 轉(zhuǎn)碼

轉(zhuǎn)碼實際上是先解碼然后編碼。

不進行轉(zhuǎn)碼,只進行封裝格式轉(zhuǎn)換的程序可參考: 最簡單的基于FFMPEG的封裝格式轉(zhuǎn)換器(無編解碼)

轉(zhuǎn)碼程序可參考: 最簡單的基于FFMPEG的轉(zhuǎn)碼程序

比較復雜的轉(zhuǎn)碼程序可以參考ffmpeg.c,它移植到MFC下的工程: ffmpeg轉(zhuǎn)碼器移植VC的工程:ffmpeg for MFC

6. ffmpeg源代碼分析

通曉了ffmpeg庫的使用以后,可以看一下ffmpeg的源代碼。注意ffmpeg的源代碼只有在linux下才能編譯,在windows下可以使用MinGW進行編譯。推薦使用Eclipse查看ffmpeg的源代碼。

有一個很完整的ffmpeg源代碼的分析文檔: ffdoc

ffmpeg源代碼分析文章列表如下。

庫函數(shù)分析:

圖解FFMPEG打開媒體的函數(shù)avformat_open_input

ffmpeg 源代碼簡單分析 : av_register_all()
ffmpeg 源代碼簡單分析 : avcodec_register_all()
ffmpeg 源代碼簡單分析 : av_read_frame()
ffmpeg 源代碼簡單分析 : avcodec_decode_video2()
FFMPEG源碼分析:avformat_open_input()(媒體打開函數(shù))

?

ffmpeg.exe源代碼分析:

ffmpeg源碼分析:transcode_init()函數(shù)
ffmpeg源碼分析:transcode()函數(shù)

7. ffmpeg相關工程的學習

學習完成ffmpeg,還可以了解一下基于ffmpeg的相關的多媒體開源工程,在這里推薦以下幾個:

7.1 ffdshow

ffdshow是基于ffmpeg的解碼器類庫libavcodec的DirectShow Filter。廣泛安裝在PC上。

FFMPEG視音頻編解碼零基礎學習方法

有關ffdshow的源代碼分析文章(更新中):

ffdshow 源代碼分析1 : 整體結(jié)構(gòu)
ffdshow 源代碼分析 2: 位圖覆蓋濾鏡(對話框部分Dialog)

ffdshow 源代碼分析 3: 位圖覆蓋濾鏡(設置部分Settings)
ffdshow 源代碼分析 4: 位圖覆蓋濾鏡(濾鏡部分Filter)
ffdshow 源代碼分析 5: 位圖覆蓋濾鏡(總結(jié))
ffdshow 源代碼分析 6: 對解碼器的dll的封裝(libavcodec)
ffdshow 源代碼分析 7: libavcodec視頻解碼器類(TvideoCodecLibavcodec)
ffdshow 源代碼分析 8: 視頻解碼器類(TvideoCodecDec)
ffdshow 源代碼分析 9: 編解碼器有關類的總結(jié)

?

7.2 LAV filters

LAV Filter是基于ffmpeg的解碼器類庫libavcodec,以及解封裝器類庫libavformat的DirectShow Filter。廣泛安裝在PC上。

有關LAV Filter的源代碼分析文章:

LAV Filter 源代碼分析 1: 總體結(jié)構(gòu)

LAV Filter 源代碼分析 2: LAV Splitter

LAV Filter 源代碼分析 3: LAV Video (1)

LAV Filter 源代碼分析 4: LAV Video (2)

?

7.3 Mplayer

Mplayer是Linux下使用最廣泛的播放器,也有Windows版本的。其中使用了ffmpeg。

FFMPEG視音頻編解碼零基礎學習方法

有關Mplayer的源代碼分析文章:

MPlayer源代碼分析

7.4 Media Player Classic - HC

現(xiàn)在廣為使用很多播放器都是構(gòu)建于Media Player Classic - HC的基礎之上的。

FFMPEG視音頻編解碼零基礎學習方法

有關Media Player Classic - HC的源代碼分析文章:

Media Player Classic - HC 源代碼分析 1:整體結(jié)構(gòu)
Media Player Classic - HC 源代碼分析 2:核心類 (CMainFrame)(1)
Media Player Classic - HC 源代碼分析 3:核心類 (CMainFrame)(2)
Media Player Classic - HC 源代碼分析 4:核心類 (CMainFrame)(3)
Media Player Classic - HC 源代碼分析 5:關于對話框 (CAboutDlg)
Media Player Classic - HC 源代碼分析 6:MediaInfo選項卡 (CPPageFileMediaInfo)
Media Player Classic - HC 源代碼分析 7:詳細信息選項卡(CPPageFileInfoDetails)

?

?

from:http://blog.csdn.net/leixiaohua1020/article/details/15811977

7.5 XBMC

XBMC是一個優(yōu)秀的自由和開源的(GPL)媒體中心軟件。

FFMPEG視音頻編解碼零基礎學習方法

有關XBMC源代碼分析文章:

XBMC源代碼分析 1:整體結(jié)構(gòu)以及編譯方法

XBMC源代碼分析 2:Addons(皮膚Skin)

XBMC源代碼分析 3:核心部分(core)-綜述

XBMC源代碼分析 4:視頻播放器(dvdplayer)-解碼器(以ffmpeg為例)

XBMC源代碼簡析 5:視頻播放器(dvdplayer)-解復用器(以ffmpeg為例)

XBMC源代碼分析 6:視頻播放器(dvdplayer)-文件頭(以ffmpeg為例)

XBMC源代碼分析 7:視頻播放器(dvdplayer)-輸入流(以libRTMP為例)

?

8.FFmpeg其它方面的功能

在這里介紹一下FFmpeg中AVFilter的使用。AVFilter可以給試飲品添加各種處理效果。有一個簡單的例子,是給視頻添加水?。?

最簡單的基于FFmpeg的AVfilter例子(水印疊加)

FFMPEG視音頻編解碼零基礎學習方法


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黄色片网站在线观看 | 韩国一级理黄论片 | 日韩亚洲国产综合久久久 | 久久久久久夜精品精品免费啦 | 正在播放一区二区 | 欧美激情在线播放一区二区 | 91av爱爱| 九九热视频精品 | 欧美激情精品久久久久久久久久 | 中文字幕亚洲视频 | 久久久久久久一精品 | 日韩大片 | 无遮挡又黄又爽又色1000部 | 欧美毛片免费 | 国产亚洲精品久久久久91网站 | 中文一区二区视频 | 欧美另类高清xxxxx | 欧美激情中文字幕一区二区 | 免费看国产一级特黄aa大片 | 我要看免费一级毛片 | 色拍拍欧美视频在线看 | 久久草在线观看 | 日本黄页免费 | 日本毛片在线观看 | 伊人成年综合网 | 亚洲综合色婷婷在线观看 | 欧美18—19sex性护士 | 欧美啊v | 综合亚洲一区二区三区 | 一本清高清dvd日本播放器 | 久久艹伊人 | 九一视频在线免费观看 | 久久99国产亚洲高清观看首页 | 久草视频免费在线看 | 刺激videoschina偷拍| 快播激情| 香蕉久久网站 | 可以免费观看欧美一级毛片 | 97在线观看中心 | 九九99久久精品午夜剧场免费 | 免费看欧美一级片 |