我的图像叠加层没有在预期的时间播放。我有一个名为“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"
我们可以使用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。
建议的替代方案 - 使用两个阶段:
例子:
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"