我提前剪辑了几个视频,长度大约为 2 秒。第一个视频是 2 秒。第二个视频是 1.99 秒。因此,假设第二个剪辑将在第二个剪辑后 0.1 秒开始,则总共是 4 秒。
我制作了一个简短的视频来说明我建立的时间线https://cl.ly/b0d91eb087e7。
对于用户来说,我认为这是最直观的。下一个剪辑总是在前一个剪辑之后 0.1 秒开始。
第一个剪辑 2s
ffmpeg
-i "image.png"
-i "video-bg.png"
-f lavfi
-i color=c=#ffffff:s=1080x1080
-filter_complex "
[0:v]scale=922.226355701817:1745.5544426956646[out0],
[1:v]scale=1080:1080[out1],
[2:v][out1]overlay=0:0:enable='between(t,0,2)'[out3],
[out3][out0]overlay=-113.12530740270425:61.811417942481036:enable='between(t,0,2)'[vid]
"
-map "[vid]"
-vcodec libx264
-vb 20M
-crf 17
-preset veryfast
-pix_fmt yuv420p
-t 00:00:02.00
out.mp4
第二个剪辑 1.99 秒
ffmpeg
-i "image2.png"
-i "video-bg.png"
-f lavfi
-i color=c=#ffffff:s=1080x1080
-filter_complex "
[0:v]scale=1270.8427528974103:1142.2750035770496[out0],
[1:v]scale=1080:1080[out1],
[2:v][out1]overlay=0:0:enable='between(t,0,6)'[out3],
[out3][out0]overlay=-87.75274650343397:-24.4787400289741:enable='between(t,0,6)'[vid]
"
-map "[vid]"
-vcodec libx264
-vb 20M
-crf 17
-preset veryfast
-pix_fmt yuv420p
-t 00:00:01.99
out2.mp4
我想将第一个和第二个剪辑连接起来,使其长度为 4 秒。第一个剪辑应在 0 秒到 2 秒之间,第二个剪辑应从 2.1 秒到 4 秒开始。
这是我所得到的,但问题是它从 2 秒而不是 2.1 秒开始第二个剪辑。
ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0][1]concat=n=2:v=1[v]" -map "[v]" final.mp4
谢谢
答案1
ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]scale=1080x1080,trim=start=0:end=2[one];color=black:s=1080x1080:r=24:d=0.1[b0];[1:v]scale=1080x1080,trim=start=0:end=1.9[two];[one][b0][two]concat=n=3:v=1[v]" -map "[v]" final.mp4
刻度(以及中间空白处的 s)确保它们具有相同的刻度,否则过滤器将失败,修剪确保剪辑 1 为 2 秒,剪辑 2 为 1.9 秒(加起来是 4 秒,但如果长度无关紧要,可以删除这些)颜色 = 是间隙的颜色,r = 是间隙的帧速率(注意 - 当它与输入帧速率不匹配时,我遇到了问题),d = 是间隙的持续时间,必须以 0 为准。对于亚秒级持续时间,部分[one][b0][two]
是剪辑的顺序
其中大部分内容改编自此处的答案:https://superuser.com/a/1064592