我设法使用overlay命令逐个叠加两个视频,并使用nullsrc命令播放两个视频,直到两个视频都以下面的命令结束:
./ffmpeg -i first.MOV -i second.MOV -filter_complex "nullsrc=size=1280x400:duration=30[bg];[0]scale=640:-1,pad=1280:400[first];[bg][first]overlay=0:0[base];[1]scale=640:-1[second];[base][second]overlay=640:0" output.mp4
现在我想做的是延迟其中一个叠加,直到另一个完成。据我所知,这个命令是它的偏移,所以我修改为使用它:
./ffmpeg -i first.MOV -itsoffset 5 -i second.MOV -filter_complex "nullsrc=size=1280x400:duration=30[bg];[0]scale=640:-1,pad=1280:400[first];[bg][first]overlay=0:0[base];[1]scale=640:-1[second];[base][second]overlay=640:0" output.mp4
现在我唯一的问题是我想要显示延迟视频的第一帧直到它开始......即使在某处我读到这应该这样做,但它不会。它会留空,直到输入开始。
任何想法如何添加第二个视频的第一帧直到其偏移开始播放视频?
Update1:我可能会发现它周围有一个骗子,但问题是它在第一秒左右真的很慢。
./ffmpeg -i first.MOV -i second.MOV -itsoffset 5 -i second.MOV -filter_complex "color=size=1280x400:duration=30[bg];[1]select=eq(n\,0),scale=640:-1[fg];[bg][fg]overlay=640:0[bgc];[0]scale=640:-1[first];[bgc][first]overlay=0:0[firstb];[2]scale=640:-1[second];[firstb][second]overlay=640:0" output.mp4
稍后我不需要动态创建命令行字符串,这将非常痛苦。
答案 0 :(得分:0)
对于解决方案,我最终得到了这样的结论:
./ffmpeg -i first.MOV -i second.MOV -itsoffset 5 -i second.MOV -filter_complex "color=size=1280x400:duration=30[bg];[1]select=eq(n\,0),scale=640:-1[fg];[bg][fg]overlay=640:0[bgc];[0]scale=640:-1[first];[bgc][first]overlay=0:0[firstb];[2]scale=640:-1[second];[firstb][second]overlay=640:0" output.mp4
我得到的唯一问题是,由于某种原因,音频没有延迟,覆盖的图像滞后,时间步骤有点混乱。最后我发现我需要使用-async 1并且它开始像魔术一样工作。第一帧出现在开头,音频延迟了视频等。
所以最终命令应如下所示:
./ffmpeg -i first.MOV -i second.MOV -itsoffset 5 -i second.MOV -filter_complex "color=size=1280x400:duration=30[bg];[1]select=eq(n\,0),scale=640:-1[fg];[bg][fg]overlay=640:0[bgc];[0]scale=640:-1[first];[bgc][first]overlay=0:0[firstb];[2]scale=640:-1[second];[firstb][second]overlay=640:0" -async 1 output.mp4
答案 1 :(得分:0)
您的命令在视频的情况下可以正常工作,但第二个输入的音频无法播放。