FFmpeg音频交叉衰减



我试图使用ffmpeg合并几个视频,并在两者之间应用交叉渐变过渡。通过参考这个,我得到了视频交叉淡出工作。同时,我需要有音频也有交叉淡出应用于与每个视频相关的原始音频。我参考了几个地方,但结果都是,

Buffer queue overflow, drop .

This, This和This是很少被提及的。我得到了这个的解,这个产生了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作为视频时,它会导致上面提到的相同问题。我在这里做错了什么,还有其他的方法,我可以使用视频和音频交叉褪色?

我试图通过减少到只有两个视频/音频流来简化你上面使用的命令(为了清晰),但我认为它应该适用于5个视频或更多。

我不认为;

Buffer queue overflow, drop .

是一个错误…这是与你的视频有关的警告。我也得到这些,但我的输出似乎很好。也许更有经验的人可以在这里给你提供更多的信息。

我认为你有一个问题,你的音频不像预期的那样工作,因为你使用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秒。

最后通过在每个音频的开头附加无声空间来解决这个问题。这将一个接一个地混合音频。

[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]

相关内容

  • 没有找到相关文章

最新更新