中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么利用FFmpeg合并音頻和視頻

發布時間:2023-02-25 10:14:20 來源:億速云 閱讀:93 作者:iii 欄目:開發技術

這篇文章主要介紹了怎么利用FFmpeg合并音頻和視頻的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么利用FFmpeg合并音頻和視頻文章都會有所收獲,下面我們一起來看看吧。

一、FFmpeg 多個音頻合并的2種方法

多個mp3文件合并成一個mp3文件

一種方法是連接到一起

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

解釋:-i代表輸入參數

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

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

另一種方法是混合到一起

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

解釋: -i代表輸入參數

           -filter_complex  

                 amix是混合多個音頻到單個音頻輸出

                 inputs=2代表是2個音頻文件,如果更多則代表對應數字

                 duration 確定最終輸出文件的長度

               longest(最長)|shortest(最短)|first(第一個文件)

                  dropout_transition

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

                  -f mp3   輸出文件格式

音頻文件截取指定時間部分

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

解釋: -i代表輸入參數

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

           -ss 開始截取的時間點

           -t 截取音頻時間長度           

音頻文件格式轉換

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

解釋: -i代表輸入參數

           -acodec aac(音頻編碼用AAC) 

          -ar 設置音頻采樣頻率

          -ac  設置音頻通道數

          -ab 設定聲音比特率

                 -vol  <百分比> 設定音量

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

1.使用concat協議進行視頻文件的合并

這種方式的適用場景是:視頻容器是MPEG-1, MPEG-2 PS或DV等可以直接進行合并的。換句話說,其實可以直接用cat或者copy之類的命令來對視頻直接進行合并。很多文章介紹了這種方法,但適用性卻沒有提及。這并不是一個通用的方法。典型的命令示例如下:

使用concat demuxer進行視頻文件的合并

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

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

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

當需要進行任意程度的重新編解碼時,官方推薦使用的方法即是用concat濾鏡來進行視頻文件的合并處理。典型命令示例如下:

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

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

現在的任務是將這些視頻片段合并起來,并且盡量無損。

方法一:FFmpeg concat 協議

對于 MPEG 格式的視頻,可以直接連接:

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

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

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

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

ffmpeg -i input3.flv -c copy -bsf:v h364_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 格式容器的時候,建議加上 -movflags +faststart。這樣分享文件給別人的時候可以邊下邊看。

方法二:FFmpeg concat 分離器

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

file 'input1.mkv'

file 'input2.mkv'

file 'input3.mkv'

然后:

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

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

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

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

mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv input1.flv input2.flv input3.flv
方法四:使用 FFmpeg concat 過濾器重新編碼(有損)

語法有點復雜,但是其實不難。這個方法可以合并不同編碼器的視頻片段,也可以作為其他方法失效的后備措施。

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]' <編碼器選項> output.mkv

如你所見,上面的命令合并了三種不同格式的文件,FFmpeg concat 過濾器會重新編碼它們。注意這是有損壓縮。

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

提示

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

規格不同的視頻合并后可能會有無法預測的結果。

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

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

關于“怎么利用FFmpeg合并音頻和視頻”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么利用FFmpeg合并音頻和視頻”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开化县| 溧水县| 盐山县| 中山市| 湘乡市| 井研县| 新沂市| 洛川县| 姚安县| 封丘县| 福贡县| 东乌珠穆沁旗| 堆龙德庆县| 九龙县| 广平县| 得荣县| 乐都县| 高平市| 涟水县| 醴陵市| 丹巴县| 德江县| 文昌市| 扶沟县| 新乡市| 建始县| 鱼台县| 咸阳市| 丹棱县| 新昌县| 汾西县| 新津县| 安福县| 石柱| 监利县| 津南区| 西充县| 沧州市| 金堂县| 高雄市| 荥阳市|