ffmpeg入門到實戰(zhàn)-ffmpeg是怎么轉(zhuǎn)碼的宪祥?

轉(zhuǎn)發(fā)自白狼棧:查看原文

閱讀目錄

視頻是怎么被播放的?

我們知道蝗羊,當(dāng)下大多數(shù)播放器都是基于ffmpeg二次開發(fā)的藏澳。你有沒有想過,你用播放器打開一個視頻的時候耀找,是怎么看到的畫面翔悠,怎么聽到的聲音?

我們用這張圖簡單描繪出視頻被播放的流程涯呻。

image

下面稍微解釋下圖中的含義凉驻。

  1. 解封裝:播放器將輸入的封裝格式(mp4、mkv)的數(shù)據(jù)分離复罐,產(chǎn)生音頻流和視頻流兩部分涝登,注意此時這兩部分數(shù)據(jù)還只是壓縮的數(shù)據(jù),類似分流效诅,后面我們也會介紹如何從視頻文件中抽離出音頻和視頻胀滚。
  2. 下一步就是解碼操作了趟济,我們說解碼就是將視頻、音頻壓縮的編碼數(shù)據(jù)咽笼,解碼成為非壓縮的視頻顷编、音頻原始數(shù)據(jù)。這里將音頻解碼為pcm格式的數(shù)據(jù)剑刑,將視頻解碼為yuv格式的數(shù)據(jù)媳纬。
  3. 音視頻同步播放:把解封裝和解碼分別拿到的視頻信息和音視頻數(shù)據(jù),發(fā)送給顯卡和聲卡即可播放施掏。

ffmpeg命令的格式

我們在音視頻基礎(chǔ)概念一文中介紹轉(zhuǎn)碼的時候钮惠,拋出過一條轉(zhuǎn)碼的命令,如下

ffmpeg -i input.flv output.mp4

對于ffmpeg命令的基本格式七芭,參考ffmpeg官網(wǎng)

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

翻譯過來就是

ffmpeg [全局選項] {[輸入文件選項] -i 輸入文件} ... {[輸出文件選項] 輸出文件} ...

... 表示一條命令可能會有多個輸入和多個輸出素挽。

比如我們可以通過輸入多個文件轉(zhuǎn)碼后輸出多個文件

ffmpeg -i input1 -i input2 \
    -acodec … -vcodec … output1 \
    -acodec … -vcodec … output2 \
    -acodec … -vcodec … output3

據(jù)不完全統(tǒng)計,ffmpeg命令的選項數(shù)量就有小幾萬狸驳,所以不僅要多掌握學(xué)習(xí)技巧预明,更多的是多積累經(jīng)驗,靠死記硬背是完全行不通的耙箍。

那么多的選項撰糠,體現(xiàn)在一條命令上,一個基本的通用規(guī)則就是:

輸入文件選項只作用于它后面的第一個輸入文件究西,自然窗慎,輸出文件選項也只作用于它后面的第一個輸出文件。所以是有順序要求的卤材。

全局選項倒是可以隨便寫遮斥,比如有個全局選項 -y,詢問我們是否要覆蓋輸出扇丛,下面兩種寫法都可以

ffmpeg -y -i input.flv output.mp4
ffmpeg -i input.flv -y output.mp4

但是术吗,如果命令很長很長(比如我們前面給的音視頻案例,一條命令甚至都有幾百個字符)帆精,類似這種全局選項较屿,最好寫在輸入文件前面或者輸出文件前面。

另外卓练,千萬不要先寫輸出文件隘蝎,再寫輸入文件,至少應(yīng)該寫完輸入文件襟企,再寫輸出文件嘱么,比如下面這樣就是不好的寫法

ffmpeg output.mp4 -i input.flv

良好的習(xí)慣才是好的開始。

ffmpeg轉(zhuǎn)碼輸出的過程

ffmpeg -i input.flv output.mp4

還是上面這條簡單的轉(zhuǎn)碼命令顽悼,對于類似這樣的一條命令曼振,對于ffmpeg几迄,又是怎么處理的呢?

我們用下面這個圖來表示轉(zhuǎn)碼輸出的過程冰评。

image

具體描述如下

  1. ffmpeg 調(diào)用一個包含解復(fù)用器demuxer的libavformat庫映胁,從輸入文件中讀取包含編碼的數(shù)據(jù)包
  2. 然后將編碼的數(shù)據(jù)包傳遞給解碼器(decoder)(流復(fù)制操作忽略該步驟)
  3. 解碼器(decoder)產(chǎn)生未壓縮的幀(即原始幀)可以進一步被濾鏡處理
  4. 接下來,被濾鏡處理的原始數(shù)據(jù)被傳遞給編碼器(encoder)
  5. 編碼器對傳遞過來的數(shù)據(jù)進行編碼并輸出編碼數(shù)據(jù)包
  6. 最后甲雅,這些數(shù)據(jù)被復(fù)用器(muxer)寫入輸出文件解孙。

任何復(fù)雜的命令历造,都必須經(jīng)過上面這樣的轉(zhuǎn)碼過程蚜厉,底層代碼你可以不看汹粤,但是整個過程必須了解惕橙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市但指,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖盅惜,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忌穿,居然都是意外死亡抒寂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門掠剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屈芜,“玉大人,你說我怎么就攤上這事朴译【樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵眠寿,是天一觀的道長躬翁。 經(jīng)常有香客問我,道長盯拱,這世上最難降的妖魔是什么盒发? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮狡逢,結(jié)果婚禮上宁舰,老公的妹妹穿的比我還像新娘。我一直安慰自己奢浑,他們只是感情好蛮艰,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殷费,像睡著了一般印荔。 火紅的嫁衣襯著肌膚如雪低葫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天仍律,我揣著相機與錄音嘿悬,去河邊找鬼。 笑死水泉,一個胖子當(dāng)著我的面吹牛善涨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草则,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钢拧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炕横?” 一聲冷哼從身側(cè)響起源内,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎份殿,沒想到半個月后膜钓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡卿嘲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年颂斜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拾枣。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡沃疮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梅肤,到底是詐尸還是另有隱情司蔬,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布姨蝴,位于F島的核電站葱她,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏似扔。R本人自食惡果不足惜吨些,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炒辉。 院中可真熱鬧豪墅,春花似錦、人聲如沸黔寇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屏轰,卻和暖如春颊郎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霎苗。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工姆吭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唁盏。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓内狸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厘擂。 傳聞我的和親對象是個殘疾皇子昆淡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容