我的图像叠加层未按预期时间播放。我有一个名为“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"