欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用FFmpeg合并音頻和視頻(多種方式)

 更新時(shí)間:2023年02月20日 11:02:58   作者:音視頻開(kāi)發(fā)老舅  
這篇文章主要介紹了如何利用FFmpeg合并音頻和視頻,詳細(xì)介紹了FFmpeg 多個(gè)音頻合并的2種方法,通過(guò)場(chǎng)景分享介紹了FFmpeg合并視頻文件的4種方法,需要的朋友可以參考下

一、FFmpeg 多個(gè)音頻合并的2種方法

多個(gè)mp3文件合并成一個(gè)mp3文件

一種方法是連接到一起

ffmpeg64.exe -i "concat:123.mp3|124.mp3" -acodec copy output.mp3

解釋?zhuān)?i代表輸入?yún)?shù)

               contact:123.mp3|124.mp3代表著需要連接到一起的音頻文件

                 -acodec copy  output.mp3 重新編碼并復(fù)制到新文件中

另一種方法是混合到一起

ffmpeg64.exe -i 124.mp3 -i 123.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 remix.mp3

解釋?zhuān)?nbsp;-i代表輸入?yún)?shù)

           -filter_complex  

                 amix是混合多個(gè)音頻到單個(gè)音頻輸出

                 inputs=2代表是2個(gè)音頻文件,如果更多則代表對(duì)應(yīng)數(shù)字

                 duration 確定最終輸出文件的長(zhǎng)度

               longest(最長(zhǎng))|shortest(最短)|first(第一個(gè)文件)

                  dropout_transition

The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.

                  -f mp3   輸出文件格式

音頻文件截取指定時(shí)間部分

ffmpeg64.exe -i 124.mp3 -vn -acodec copy -ss 00:00:00 -t 00:01:32 output.mp3

解釋?zhuān)?nbsp;-i代表輸入?yún)?shù)

          -acodec copy output.mp3 重新編碼并復(fù)制到新文件中

           -ss 開(kāi)始截取的時(shí)間點(diǎn)

           -t 截取音頻時(shí)間長(zhǎng)度           

音頻文件格式轉(zhuǎn)換

ffmpeg64.exe -i null.ape -ar 44100 -ac 2 -ab 16k -vol 50 -f mp3 null.mp3

解釋?zhuān)?nbsp;-i代表輸入?yún)?shù)

           -acodec aac(音頻編碼用AAC) 

          -ar 設(shè)置音頻采樣頻率

          -ac  設(shè)置音頻通道數(shù)

          -ab 設(shè)定聲音比特率

                 -vol  <百分比> 設(shè)定音量

二、FFmpeg合并視頻文件的4種方法

1.使用concat協(xié)議進(jìn)行視頻文件的合并

這種方式的適用場(chǎng)景是:視頻容器是MPEG-1, MPEG-2 PS或DV等可以直接進(jìn)行合并的。換句話(huà)說(shuō),其實(shí)可以直接用cat或者copy之類(lèi)的命令來(lái)對(duì)視頻直接進(jìn)行合并。很多文章介紹了這種方法,但適用性卻沒(méi)有提及。這并不是一個(gè)通用的方法。典型的命令示例如下:

使用concat demuxer進(jìn)行視頻文件的合并

這種合并方式的適用場(chǎng)景是:當(dāng)容器格式不支持文件層次的合并,而又不想(不需要)進(jìn)行再編碼的操作的時(shí)候。這種方式對(duì)源視頻同樣有同格式同性質(zhì)的要求。典型的命令示例如下:

其中,Cam01.txt 為包含了輸入文件的描述文件。

2.使用concat濾鏡(filter)進(jìn)行視頻文件的合并:

當(dāng)需要進(jìn)行任意程度的重新編解碼時(shí),官方推薦使用的方法即是用concat濾鏡來(lái)進(jìn)行視頻文件的合并處理。典型命令示例如下:

這段命令目的是將三段雙語(yǔ)格式的視頻合并至最終的一段視頻(output.mkv)。參數(shù)n=3說(shuō)明待合成的視頻有三段,v=1說(shuō)明視頻流為一,a=2說(shuō)明音頻流為二。 -map參數(shù)的詳細(xì)說(shuō)明可以從Filtergraph文檔中找到。

眾所周知,從某些視頻網(wǎng)站下載的視頻是分段的。比如新浪視頻每隔6分鐘分段,俗稱(chēng)“6分鐘詛咒”。

現(xiàn)在的任務(wù)是將這些視頻片段合并起來(lái),并且盡量無(wú)損。

方法一:FFmpeg concat 協(xié)議

對(duì)于 MPEG 格式的視頻,可以直接連接:

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

對(duì)于非 MPEG 格式容器,但是是 MPEG 編碼器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包裝進(jìn) TS 格式的容器再合并。在新浪視頻,有很多視頻使用 H.264 編碼器,可以采用這個(gè)方法

ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts

ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts

ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts

ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

保存 QuickTime/MP4 格式容器的時(shí)候,建議加上 -movflags +faststart。這樣分享文件給別人的時(shí)候可以邊下邊看。

方法二:FFmpeg concat 分離器

這種方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先創(chuàng)建一個(gè)文本文件filelist.txt:

file 'input1.mkv'

file 'input2.mkv'

file 'input3.mkv'

然后:

ffmpeg -f concat -i filelist.txt -c copy output.mkv

注意:使用 FFmpeg concat 分離器時(shí),如果文件名有奇怪的字符,要在 filelist.txt 中轉(zhuǎn)義。

方法三:Mencoder 連接文件并重建索引

這種方法只對(duì)很少的視頻格式生效。幸運(yùn)的是,新浪視頻使用的 FLV 格式是可以這樣連接的。對(duì)于沒(méi)有使用 MPEG 編碼器的視頻(如 FLV1 編碼器),可以嘗試這種方法,或許能夠成功。

mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv input1.flv input2.flv input3.flv

方法四:使用 FFmpeg concat 過(guò)濾器重新編碼(有損)

語(yǔ)法有點(diǎn)復(fù)雜,但是其實(shí)不難。這個(gè)方法可以合并不同編碼器的視頻片段,也可以作為其他方法失效的后備措施。

ffmpeg -i input1.mp4 -i input2.webm -i input3.avi -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' <編碼器選項(xiàng)> output.mkv

如你所見(jiàn),上面的命令合并了三種不同格式的文件,F(xiàn)Fmpeg concat 過(guò)濾器會(huì)重新編碼它們。注意這是有損壓縮。

[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] 分別表示第一個(gè)輸入文件的視頻、音頻、第二個(gè)輸入文件的視頻、音頻、第三個(gè)輸入文件的視頻、音頻。concat=n=3:v=1:a=1 表示有三個(gè)輸入文件,輸出一條視頻流和一條音頻流。[v] [a] 就是得到的視頻流和音頻流的名字,注意在 bash 等 shell 中需要用引號(hào),防止通配符擴(kuò)展。

提示

以上三種方法,在可能的情況下,最好使用第二種。第一種次之,第三種更次。第四種是后備方案,盡量避免。

規(guī)格不同的視頻合并后可能會(huì)有無(wú)法預(yù)測(cè)的結(jié)果。

有些媒體需要先分離視頻和音頻,合并完成后再封裝回去。

對(duì)于 Packed B-Frames 的視頻,如果封裝成 MKV 格式的時(shí)候提示 Can't write packet with unknown timestamp,嘗試在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts

到此這篇關(guān)于如何利用FFmpeg合并音頻和視頻的文章就介紹到這了,更多相關(guān)FFmpeg合并音頻和視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

    基于Token的身份驗(yàn)證之JWT基礎(chǔ)教程

    JWT(json web token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)。下面這篇文章主要給大家介紹了關(guān)于基于Token的身份驗(yàn)證之JWT的基礎(chǔ)相關(guān)資料,文中通過(guò)示例代碼的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • 關(guān)注程序員健康:程序最需要注意的幾件事

    關(guān)注程序員健康:程序最需要注意的幾件事

    這篇文章主要介紹了關(guān)注程序員健康:程序最需要注意的幾件事,本文列舉了熬夜、久坐、外賣(mài)和泡面、缺乏鍛煉、用眼過(guò)度等5個(gè)方面,需要的朋友可以參考下
    2014-09-09
  • ROS??TF坐標(biāo)變換基本概念及使用案例

    ROS??TF坐標(biāo)變換基本概念及使用案例

    本文介紹了TF坐標(biāo)變換的基本概念以及TF在ROS中的表示形式,通過(guò)古月居的烏龜跟隨的例子,分析了TF樹(shù)的廣播器和監(jiān)聽(tīng)器最基本的書(shū)寫(xiě)形式,從中展示了如何提取和應(yīng)用TF變換的信息,并介紹了5種最常用的TF樹(shù)及TF信息的提取工具,感興趣的朋友一起學(xué)習(xí)下吧
    2023-01-01
  • matlab讀取串口數(shù)據(jù)并顯示曲線(xiàn)的實(shí)現(xiàn)示例

    matlab讀取串口數(shù)據(jù)并顯示曲線(xiàn)的實(shí)現(xiàn)示例

    這篇文章主要介紹了matlab讀取串口數(shù)據(jù)并顯示曲線(xiàn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 在Visual Studio Code環(huán)境中使用SVN的方案

    在Visual Studio Code環(huán)境中使用SVN的方案

    這篇文章主要介紹了在Visual Studio Code環(huán)境中使用SVN的方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • OAuth 2.0授權(quán)協(xié)議詳解

    OAuth 2.0授權(quán)協(xié)議詳解

    這篇文章主要介紹了OAuth 2.0授權(quán)協(xié)議詳解,本文對(duì)OAuth協(xié)議做了詳解講解,對(duì)OAuth協(xié)議的各個(gè)方面做了分解,讀完本文你就會(huì)知道到底啥是OAuth了,需要的朋友可以參考下
    2014-09-09
  • 初探 SOA(補(bǔ)充)

    初探 SOA(補(bǔ)充)

    SOA是一種應(yīng)用框架,它著眼于日常的業(yè)務(wù)應(yīng)用,并將它們劃分為單獨(dú)的業(yè)務(wù)功能和流程,即所謂的服務(wù)。它使用戶(hù)可以構(gòu)建、部署和整合這些服務(wù),且無(wú)需依賴(lài)應(yīng)用程序及其運(yùn)行計(jì)算平臺(tái),從而提高業(yè)務(wù)流程的靈活性。
    2009-01-01
  • nGrinder性能工具源碼安裝部署過(guò)程

    nGrinder性能工具源碼安裝部署過(guò)程

    nGrinder是NHN公司用Java語(yǔ)言開(kāi)發(fā)的一款的基于Grinder開(kāi)發(fā)的開(kāi)源B/S Web性能測(cè)試平臺(tái),具有友好簡(jiǎn)潔的用戶(hù)界面和分布式測(cè)試功能,本文給大家分享nGrinder性能工具源碼安裝部署過(guò)程,一起看看吧
    2021-05-05
  • 高性能高可用高并發(fā)架構(gòu)和系統(tǒng)設(shè)計(jì)思路大綱

    高性能高可用高并發(fā)架構(gòu)和系統(tǒng)設(shè)計(jì)思路大綱

    高性能架構(gòu)和系統(tǒng)設(shè)計(jì)要求高并發(fā)高性能,高性能更多的是先從編碼角度、架構(gòu)使用角度去讓我們的單機(jī)(單實(shí)例)有更好的性能,然后再?gòu)恼麄€(gè)系統(tǒng)層面來(lái)?yè)碛懈玫男阅?;高并發(fā)則直接是全局角度來(lái)讓我們的系統(tǒng)在全鏈路下都能夠抗住更多的并發(fā)請(qǐng)求
    2023-08-08
  • 如何集成Elasticsearch到django restful

    如何集成Elasticsearch到django restful

    在Django項(xiàng)目中集成Elasticsearch可通過(guò)Haystack實(shí)現(xiàn),Haystack作為Django插件提供搜索接口,Elasticsearch作為后端搜索引擎存儲(chǔ)檢索數(shù)據(jù),Haystack支持多種搜索引擎,易于切換且不需改動(dòng)代碼,本文給大家介紹如何集成Elasticsearch到django restful,感興趣的朋友一起看看吧
    2024-09-09

最新評(píng)論