ffmpeg入門篇-流的操作(二)如何選擇流仅政?

流的操作(一)視頻轉(zhuǎn)音頻引發(fā)的血案一文中我們了解到,流的選擇盆驹,實(shí)際有兩種方式圆丹,一種是ffmpeg自動(dòng)選擇,一種是設(shè)置參數(shù)手動(dòng)選擇躯喇。

對(duì)于自動(dòng)選擇辫封,ffmpeg默認(rèn)選擇規(guī)則如下:

  1. 視頻流:默認(rèn)選擇分辨率最高的流
  2. 音頻流:默認(rèn)選擇通道最多的流
  3. 字幕流:默認(rèn)選擇第一個(gè)字幕編碼器支持的字幕流

對(duì)于視頻流和音頻流,如果分辨率相等或者通道相等則以第一個(gè)為準(zhǔn)廉丽,數(shù)據(jù)流和附件流不支持自動(dòng)選擇秸讹,需要手動(dòng)選擇。

自動(dòng)選擇的情況下雅倒,ffmpeg每種類型只會(huì)選擇一路璃诀,舉個(gè)例子

ffmpeg -i r3.mp4 -hide_banner 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r3.mp4': 
... 
Duration: 00:00:58.54, start: 0.000000, bitrate: 1998 kb/s 
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1732 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default) 
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default) 
Stream #0:2(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)

注:Stream #0:0,第一個(gè)0表示第一個(gè)輸入文件蔑匣,第二個(gè)0表示第一個(gè)輸入文件的第一路流

如果我們直接對(duì) r3.mp4 轉(zhuǎn)碼操作劣欢,你會(huì)發(fā)現(xiàn)輸出的視頻只保留了一路視頻和一路音頻。

1裁良、ffmpeg -i r3.mp4 tmp-r3.mp4 
2凿将、ffmpeg -i tmp-r3.mp4 
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1684 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default) 
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)

這就是ffmpeg自動(dòng)選擇的結(jié)果。

如果想要輸入視頻的Stream #0:2這路音頻流价脾,就只能手動(dòng)指定了牧抵。

流的手動(dòng)模式,使用 -map 參數(shù)操作,-map 非常重要犀变,后面我們還會(huì)反復(fù)使用它妹孙。它表示我們需要從輸入文件中選擇哪些流到輸出文件。

語(yǔ)法規(guī)則:

-map [-]input_file_index[:stream_type_specifier][:stream_index]
  1. 中括號(hào)[]表示可選获枝,input_file_index 之前的 - 表示反選蠢正,即可以剔除某一路流。
  2. input_file_index 指的是某個(gè)輸入文件省店,我們可以用下標(biāo)0表示第一個(gè)輸入文件嚣崭,1表示第二個(gè)輸入文件,以此類推懦傍;
  3. stream_type_specifier (可選)指的是指定輸入文件的某路流的類型雹舀,我們用 a、v粗俱、s葱跋、d、t分別表示音頻流源梭、視頻流娱俺、字幕流、數(shù)據(jù)流和附件流废麻;
  4. stream_index(可選)指的是具體的某個(gè)類型的某路流荠卷。

我們?nèi)匀灰?a target="_blank">案例一的素材視頻為例(沒(méi)有下載的可以點(diǎn)擊這里下載

如果我們以r1ori.mp4為輸入烛愧,想得到r3.mp4的結(jié)果油宜,即多了一路音頻流且是mp3格式的,怎么做怜姿?

ffmpeg -i r1ori.mp4 -map 0:v -map 0:a:0 -map 0:a:0 -c:v copy -c:a:0 copy -c:a:1 libmp3lame -y r3.mp4

注意輸出代碼段Stream mapping這一段

Stream mapping: 
Stream #0:0 -> #0:0 (copy) 
Stream #0:1 -> #0:1 (copy) 
Stream #0:1 -> #0:2 (aac (native) -> mp3 (libmp3lame))

簡(jiǎn)單分析下

  1. 因?yàn)橹挥幸粋€(gè)輸入文件慎冤,所以-map的第一個(gè)參數(shù)都是0
  2. -map 0:v 表示選擇輸入文件的所有視頻流(這里視頻流只有一個(gè))到輸出,-c:v copy表示復(fù)制所有的視頻流沧卢,即你看到的 Stream #0:0 -> #0:0 (copy)
  3. -map 0:a:0 我們寫了兩遍蚁堤,第一個(gè)表示選擇輸入文件的第一個(gè)音頻流到輸出,第二個(gè)仍然表示選擇輸入文件的第一個(gè)音頻流到輸出但狭,相當(dāng)于輸出了兩路音頻流
  4. -map 0:v -map 0:a:0 -map 0:a:0 連起來(lái)也有關(guān)系披诗,表示要按照我們選擇的這三路順序輸出
  5. -c:a:0 copy 針對(duì)第一個(gè)音頻流進(jìn)行復(fù)制,不重新編碼立磁,即 Stream #0:1 -> #0:1 (copy)呈队; -c:a:1 libmp3lame 針對(duì)第二個(gè)音頻流使用libmp3lame編碼器重新編碼,即輸出過(guò)程中的 Stream #0:1 -> #0:2 (aac (native) -> mp3 (libmp3lame))

后面我們還會(huì)大量使用-map命令唱歧,所以上面這段分析宪摧,務(wù)必要理解清楚。

上面的命令同樣等價(jià)于

ffmpeg -i r1ori.mp4 -map 0:0 -map 0:1 -map 0:1 -c:v copy -c:a:0 copy -c:a:1 libmp3lame -y r3.mp4

-map 0:v 這里等價(jià)于 -map 0:0,-map 0:a:0 等價(jià)于-map 0:1,這是因?yàn)樵趓1ori.mp4中#0:0就是視頻流得运,#0:1就是音頻流

ffmpeg -i r1ori.mp4 
... 
Stream #0:0(und): Video: h264 
Stream #0:1(und): Audio 
...

注意:-map的參數(shù),針對(duì)的是輸入流饱搏,因?yàn)槭俏覀兿胍獜妮斎肓髦羞x擇流到輸出;-c選項(xiàng)的參數(shù)鬓催,針對(duì)的并不再是輸入流了宇驾,-c的參數(shù)針對(duì)的是-map選擇的流,即輸出流筝尾。

除此之外,下面我們?cè)倏磶讉€(gè)簡(jiǎn)單的例子贸街,你可以在看結(jié)果之前嘗試下

1、復(fù)制輸入文件的所有流到輸出,輸出結(jié)果可就不止只有兩路流了

ffmpeg -i r3.mp4 -map 0 -c copy output.mp4

2娇跟、把輸入文件的三路流分別拆開盹沈,輸出三個(gè)文件

ffmpeg -y -i r3.mp4 -map 0:v -c:v copy output-silent.mp4 \
-map 0:a:0 -c:a copy output-audio.aac \
-map 0:a:1 -c:a copy output-audio.mp3

我們還可以設(shè)置一些選項(xiàng),比如可以設(shè)置r3.mp4的兩路音頻流有不同的碼率。

ffmpeg -i r3.mp4 -b:a:0 32k -b:a:1 64k -map 0 -y r4.mp4

-map 0 是必須的关串,不然輸出結(jié)果并不會(huì)輸出兩路音頻流。

對(duì)于音視頻流還有很多選項(xiàng)設(shè)置,具體你可以查閱官方文檔了解趴拧,你也可以在我們平時(shí)練習(xí)中多查閱資料,奠定基礎(chǔ)。

最后问麸,我們還有一種最最常見的操作——結(jié)合濾鏡使用布轿。

比如把原視頻 r3.mp4 等比例縮放一倍

ffmpeg -i r3.mp4 -vf scale=272:480 -y filter.mp4

我們也可以手動(dòng)選擇流處理

ffmpeg -i r3.mp4 -filter_complex "[0]scale=272:480[out]" -map 0:a -map "[out]" -y filter.mp4

上面這兩條命令你可能很難理解福铅,關(guān)于濾鏡环揽,大家先有個(gè)印象秧了,下面文章我們?cè)僮髟敿?xì)介紹衡创。

流的操作我們就介紹到這里,大家在練習(xí)中碰到各種莫名其妙的問(wèn)題晶通,盡管留言璃氢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末一也,一起剝皮案震驚了整個(gè)濱河市树叽,隨后出現(xiàn)的幾起案子赠潦,更是在濱河造成了極大的恐慌,老刑警劉巖方淤,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉赁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讳苦,警方通過(guò)查閱死者的電腦和手機(jī)带膜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸳谜,“玉大人膝藕,你說(shuō)我怎么就攤上這事「琅ぃ” “怎么了芭挽?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝗肪。 經(jīng)常有香客問(wèn)我袜爪,道長(zhǎng),這世上最難降的妖魔是什么薛闪? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任辛馆,我火速辦了婚禮,結(jié)果婚禮上豁延,老公的妹妹穿的比我還像新娘昙篙。我一直安慰自己,他們只是感情好诱咏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布苔可。 她就那樣靜靜地躺著,像睡著了一般胰苏。 火紅的嫁衣襯著肌膚如雪硕蛹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天硕并,我揣著相機(jī)與錄音法焰,去河邊找鬼。 笑死倔毙,一個(gè)胖子當(dāng)著我的面吹牛埃仪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陕赃,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卵蛉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼颁股!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起傻丝,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甘有,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后葡缰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亏掀,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泛释,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滤愕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜校,死狀恐怖间影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茄茁,我是刑警寧澤魂贬,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站胰丁,受9級(jí)特大地震影響随橘,放射性物質(zhì)發(fā)生泄漏喂分。R本人自食惡果不足惜锦庸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒲祈。 院中可真熱鬧甘萧,春花似錦、人聲如沸梆掸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酸钦。三九已至怪得,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卑硫,已是汗流浹背徒恋。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欢伏,地道東北人入挣。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像硝拧,于是被迫代替她去往敵國(guó)和親径筏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葛假,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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