2015-05-22 185 views
3

我正在嘗試使用ffmpeg合併幾個視頻,並在兩者之間應用淡入淡出過渡。我通過參考this獲得了視頻交叉淡入淡出效果。同時,我還需要讓音頻對每個視頻的原始音頻應用交叉淡入淡出。我提到幾個地方,但他們導致,FFmpeg音頻交叉淡入淡出

緩衝區隊列溢出,下降。

This,thisthis很少我提到。我得到了解決方案thisthis產生與concat選項的輸出,其中音頻的長度大於視頻。儘管我使用了視頻中使用的精確fade值,但它並不像視頻中那樣工作。 以下是我正在測試的ffmpeg命令。

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -i 5.mp4 -f lavfi -i color=black -filter_complex " 
[0:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=15:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va0]; 
[1:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=30:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va1]; 
[2:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=43:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va2]; 
[3:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=54:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va3]; 
[4:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va4]; 
[5:v]scale=1280x720,trim=duration=69[over0]; 
[0:a]afade=t=out:st=15:d=2,asetpts=PTS-STARTPTS[a0]; 
[1:a]afade=t=in:st=0:d=2,afade=t=out:st=30:d=2,asetpts=PTS-STARTPTS[a1]; 
[2:a]afade=t=in:st=0:d=2,afade=t=out:st=43:d=2,asetpts=PTS-STARTPTS[a2]; 
[3:a]afade=t=in:st=0:d=2,afade=t=out:st=54:d=2,asetpts=PTS-STARTPTS[a3]; 
[4:a]afade=t=in:st=0:d=2,asetpts=PTS-STARTPTS[a4]; 
[a0][a1][a2][a3][a4]concat=n=5:v=0:a=1[outa]; 
[over0][va0]overlay[over1]; 
[over1][va1]overlay[over2]; 
[over2][va2]overlay[over3]; 
[over3][va3]overlay[over4]; 
[over4][va4]overlay=format=yuv420[outv]" 
-vcodec libx264 -preset fast -r 60 -b:v 45000k -aspect 1.78 -map [outv] -map [outa] -c:a libfdk_aac -ac 2 -b:a 128k -shortest test.mp4 

此外,當我用同樣的asetpts視頻就會導致上面提到的同樣的問題。 我在做什麼錯在這裏,是否有任何其他方法,我可以使用視頻和音頻交叉褪色?

回答

0

通過附加沉默的空間,每個音頻之後第一個開始終於解決了問題。這將一個接一個地混合音頻。

[0:a]afade=t=out:st=15:d=2[a0]; 
[1:a]afade=t=in:st=0:d=2[a1]; 
aevalsrc=0:d=15[s1]; 
[s1][a1]concat=n=2:v=0:a=1[ac1]; 
[a0][ac1]amix[a] 
2

我試圖通過減少只有兩個視頻/音頻流,以簡化您使用的是位(爲清楚起見)上面的命令,但我認爲它應該適用於5個視頻以上了。

我不這麼認爲;

緩衝區隊列溢出,滴。

是錯誤的...它警告相關視頻。我也得到這些,但我的輸出似乎很好。也許有更多經驗的人可以在這裏給你更多的信息。

我覺得你有與預期,因爲你正在使用的過濾器concat您的音頻無法正常工作的問題。這將音頻流附加到前一個流的末尾。我認爲你真正想要的是合併/疊加你的音頻流,就像你對視頻流一樣。這可以用amerge濾波器來實現:

ffmpeg -y -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex "\   
[0:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=5:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va0];\ 
[1:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,setpts=expr=PTS-STARTPTS+5/TB[va1];\ 
[2:v]scale=1280x720,trim=duration=10[over0];\         
[0:a]afade=t=out:st=5:d=2,asetpts=PTS-STARTPTS[a0];\        
[1:a]afade=t=in:st=5:d=2,asetpts=PTS-STARTPTS[a1];\        
[a0][a1]amerge[outa];\               
[over0][va0]overlay[over1];\              
[over1][va1]overlay=format=yuv420[outv]" \          
-vcodec libx264 -preset fast -r 60 -b:v 45000k -aspect 1.78 -t 12 -map [outv] -map [outa] -c:a libfdk_aac -ac 2 -b:a 128k -shortest test.mp4 

本例將兩個視頻和音頻和視頻兩者5秒時它們之間變淡。