2017-03-04 116 views
0

allign所以,我有2個視頻,我想並排放置一邊。我想按照我認識的每個視頻的幀編號來對齊它們,假設兩個視頻具有相同的FPS。幀號是使用以下命令找到的。將FFMPEG視頻並排,通過幀數

ffmpeg -i "input.mp4" "output/%08d.jpg" 

所以,讓我們說,我知道幀數我要對齊視頻A是126,而對於視頻B中的幀數是179.我想這兩個幀排隊對齊並排視頻側使得所得到的視頻將與視頻B幀179同時顯示視頻A幀126.所得視頻也不應該從任一視頻中移除任何片段,因此如果其中一個視頻尚未開始或沒有完成,所得到的視頻繼續播放活動視頻,而不是隻有兩個視頻都應該播放的時間。我也想同時對齊兩個音軌。

對於這個問題,我希望能有一個單指令解決方案,我只需要輸入我要對齊,而不是手工完成幾個步驟的視頻,幀數。

+0

兩個視頻都是恆定幀率嗎? – Mulvya

+0

@Mulvya是的,他們都有相同的幀率。 –

回答

1

使用

ffmpeg -i a.mp4 -i b.mp4 
-filter_complex 
    "[1]setpts=PTS-STARTPTS+d/FRAME_RATE/TB[b]; 
    [0][b]hstack[v]; 
    [1]adelay=dt|dt[ba]; 
    [0][ba]amix[a]" 
-map "[v]" -map "[a]" out.mp4 

d必須通過在幀對齊的差來替換,並且被施加到後面將開始播放視頻。在你的Q中,A的#126將與B的#179對齊,所以A被延遲53幀,所以d=53。我的命令將視頻和音頻延遲應用於第二個輸入,因此要麼按照該順序饋送它們,要麼將[1][0]setptsadelay[0]中以[1]切換爲hstack和amix。

由於音頻幀速率是不同的,你將不得不在提供毫秒的時間值dt。對於25fps的視頻,53幀視頻延遲對應於53/25 = 2.12 (s) = 2120 (ms)的音頻延遲

由於hstack的工作原理。延遲視頻的第一幀將顯示爲凍結狀態,直到它開始播放爲止。首先完成的視頻的最後一幀也一樣。 hstack過濾器還要求兩個視頻的高度尺寸相同。

+0

好的,如果視頻A首先啓動,我會怎麼做,所以幀的差異是負面的? –

+0

我在第一段說明了這一點。 – Mulvya

+0

好的,我得到這個錯誤: [Parsed_adelay_2 @ 0x77b8c0]的至少一個延遲>必須指定0。 [Parsed_adelay_2 @ 0x77b8c0]無法配置於Parsed_adelay_2 錯誤配置複雜的濾波器輸入墊。 無效參數 此外,是否有應該是在命令中的反斜線?我在Bash上運行它。 –