FFMPEG 在将许多视频插入另一个视频时减少生成损失

FFMPEG reducing Generation Loss when inserting many videos into another video

我正在尝试将许多 miniclips.mp4 插入到一个 main.mp4 视频中 - 虽然我已经能够 ,但我似乎患有 Generation Loss

我正在使用的命令(在 python 脚本中,在许多不同间隔的循环中)是:

ffmpeg -i main.mp4 -i miniclipX.mp4 -filter_complex "[0:v]drawbox=t=fill:enable='between(t,5,6.4)'[bg];[1:v]setpts=PTS+5/TB[fg];[bg][fg]overlay=x=(W-w)/2:y=(H-h)/2:eof_action=pass;[1:a]adelay=5s:all=1[a1];[0:a][a1]amix" output.mp4

(然后在循环中将 output.mp4 重命名为 main.mp4)

有没有办法:

A) 通过实施某些标志减少发电损失

B) 在单个命令中包含许多不同的输入文件和许多不同的 -filter_complex 来实现我想要的?

因为您没有提供 ffmpeg 日志(因此没有关于您的 ffmpeg 或您的输入的信息),对于这个答案,我假设所有视频的宽度和高度都相同。

在 5 秒时显示 miniclip1.mp4 并在 10 秒时显示 miniclip2.mp4 的示例:

ffmpeg -i main.mp4 -i miniclip1.mp4 -i miniclip2.mp4 -filter_complex 
"[1:v]setpts=PTS+5/TB[offset1];[0:v][offset1]overlay=x=(W-w)/2:y=(H-h)/2:eof_action=pass[bg];
 [2:v]setpts=PTS+10/TB[offset2];[bg][offset2]overlay=x=(W-w)/2:y=(H-h)/2:eof_action=pass;
 [1:a]adelay=5s:all=1[a1];
 [2:a]adelay=10s:all=1[a2];
 [0:a][a1][a2]amix=inputs=3"
output.mp4

命令被分成多行以便于阅读。执行时将其设为一行。