2011-09-27 47 views
8

我想要使用ffmpeg將兩個mp4視頻組合成一個mp4視頻。結合ffmpeg的兩個視頻

我試過至今

ffmpeg -i input1.mp4 -i input2.mp4 output.mp4 

但是,每次我與第一個輸入的視頻編解碼器,而不是其他的視頻時間。我怎樣才能把他們合併?任何想法都會受到高度讚賞。

+1

你是什麼意思的「首先輸入視頻編解碼器,而不是其他」?他們是不同的視頻格式?你在輸出中看到兩個視頻的內容嗎? – TheJuice

+0

請提供更多細節。你如何期待將它們結合起來?順序?或者你想在一個文件中有兩個並行的視頻流? MP4只是一個容器。實際的編解碼器是一樣的嗎?爲你的文件提供'ffprobe'的輸出。 – misha

+0

這兩個視頻都是相同的格式,我只得到我得到的ouptput文件中的第一個視頻。 – Astha

回答

5

請閱讀FFmpeg的FAQ有關加入的文件的信息。

不幸的是,由於您使用的是MP4文件,因此MP4格式包含一個「標題」(儘管它不一定必須位於文件的開頭),因此簡單的連接不適用於您。描述幷包含媒體數據的偏移量。您需要將兩個文件轉碼爲可以連接的格式,然後從該格式生成MP4文件(這將生成適當的標題部分)。

5

不能連接.mp4文件,但您可以連接.MPG文件。嘗試先使用ffmpeg將這兩個視頻轉換爲.mpg。然後,在兩個.mpg文件上運行一個簡單的linux cat命令來創建一個組合的.mpg文件。之後,使用ffmpeg將連接的.mpg文件轉換爲.mp4。這是一種迂迴的方式,但它的工作原理。您可以使用「命名管道」來減少命令的數量,但結果是一樣的。

3

您可以使用ffmpeg來做到這一點,但也有一個小工具,叫做MP4BoxGPAC的一部分),它可以連接多個MP4文件。

在你的情況,語法是

MP4Box -cat input1.mp4 -cat input2.mp4 output.mp4 
+2

您可以使用[concat demuxer](https://trac.ffmpeg.org/wiki/Concatenate#demuxer)通過'ffmpeg'完成此操作(如果您的輸入格式相同,並且您希望[流]複製](http://ffmpeg.org/ffmpeg.html#Stream-copy))或[concat過濾器](http://ffmpeg.org/ffmpeg-filters.html#concat)(如果要重新使用,編碼,和/或如果你的輸入不具有相同的格式,時基等)。 – LordNeckbeard

+0

非常感謝你。我剛剛使用mp4box從我的GoPro測試了多個mp4文件。我很驚訝這工作得很好。他們完美地結合在一起。 – daniel

5

由於以前的答案表明,你需要先轉換爲中間格式。如果MP4包含H264碼流,你可以使用:

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts 
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts 
ffmpeg -i "concat:input1.ts|input2.ts" -c copy output.mp4 

更詳細的回答,您可以找到here