ffmpeg 图像叠加未按预期时间执行

ffmpeg 图像叠加未按预期时间执行

我的图像叠加层未按预期时间播放。我有一个名为“Lista.txt”的图像列表,其中我为每个图像设置了 15 秒的播放时间:

file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\couve_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\IMG_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\Kitkat_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\paracetamol_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\relogio2_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\relogio3_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\ruffles_.png'
duration 15
file 'C:\Users\ricar\Desktop\Criar Video com Propaganda (ffmpeg)\propaganda\Skittles_.png'
duration 15

接下来我使用此命令将图像连接起来并叠加在视频上,但所有图像持续时间都少于 1 秒(我猜是 1 帧),除了最后一张图像一直显示到视频结束

视频链接

要叠加的图像

ffmpeg -r 23.98 -t 40 -i "input.mp4" -safe 0 -r 23.98 -f concat -i Lista.txt -filter_complex "[1]scale=(iw/4):-1,format=yuva420p[over];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 "output.mp4"

答案1

我们可能会使用fps 过滤器用于Lista.txt输入而不是-r 23.98

ffmpeg -r 23.98 -i "input.mp4" -safe 0 -f concat -i Lista.txt -filter_complex "[1]fps=23.98,scale=(iw/4):-1,format=yuva420p[over];[0:v][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -t 40 "output.mp4"

我测试了上述命令,它似乎按预期工作。

正如您所评论的,它看起来把-r 23.98事情搞乱了(我不明白原因)。


更新:

上述解决方案不适用于最新版本的 FFmpeg。

建议的替代方案-使用两个阶段:

  • 将图像列表编码为 RGBA 像素格式的未压缩的 AVI。
  • 将 AVI 视频叠加在输入视频上。

例子:

ffmpeg -y -f concat -safe 0 -i Lista.txt -vf "scale=(iw/4):-1,setsar=1" -c:v rawvideo -pix_fmt rgba images.avi

ffmpeg -r 23.98 -i input.mp4 -i images.avi -filter_complex "[1:v]fps=23.98[over];[0:v]format=rgba[main];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -crf 17 -t 40 output.mp4


在此处输入图片描述


更新:

我找到了解决方案这里
我们可能会添加-reinit_filter 0参数。
它无法处理您的输入图像(但可以处理我的测试图像)的原因似乎与图像具有不同的参数有关。

以下命令正在运行(在单个阶段):

ffmpeg -r 23.98 -i "input.mp4" -safe 0 -f concat -reinit_filter 0 -i Lista.txt -filter_complex "[1]fps=23.98,scale=(iw/4):-1,format=rgba[over];[0:v]format=rgba[main];[main][over]overlay=x=W-w:y=H-h[Final]" -map [Final] -y -c:v libx264 -t 40 "output.mp4"

相关内容