ffmpeg 将图像与第一个图像持续时间合并

ffmpeg merge images with first image duration

我正在尝试使用 ffmpeg 合并 mp4 中的一些图像。 我这样做:

ffmpeg -r 25 -i %06d.jpg -s 480x360 -vcodec libx264 /output.mp4

第一张图片的持续时间必须为 3 秒,其他图片的帧速率必须为 25。

我知道我可以设置图像的持续时间:

-loop 1 -t 3 -i 000000.jpg-s 480x360 -vcodec libx264 output.mp4

但是我怎样才能合并这两个东西呢??第一张图片时长 3 秒,其他图片在一个 mp4 输出中以 25 fps 播放?

谢谢

如果您有三个名为 red.pnggreen.pngblue.png 的文件,您可以像这样使用 ImageMagick:

convert -delay 300 red.png -delay 40 green.png blue.png anim.mp4

我将在下面将其显示为动画 GIF,方法是将 mp4 更改为 gif

参数 -delay 是一个 设置 所以它一直存在直到更改,所以它适用于 green.pngblue.png

您可能会将 green.pngblue.png 更改为 *.jpg

ImageMagick 已预装在大多数 Linux 发行版中,可用于 OSX(最好通过 homebrew)和 Windows。

如果你想使用ffmpeg,我想你有两种可能性

a) 将帧速率指定为 25 fps,但像这样重复第一帧 75 次:

(for i in {1..75}; do printf "file 'red.png'\n"; done; printf "file '%s'\n" *.jpg) > list.txt
ffmpeg -r 25 -f concat -i list.txt -s 480x360 -vcodec libx264  anim.mp4

b) 制作一个 3 秒的 mp4 和另一个 25 fps 的 mp4 并将它们连接起来

我建议您分别创建两个单独的视频文件,然后再加入。您可以尝试 concat 可用的方法 here。以下是使用 filter_complex

的简单 concat
ffmpeg -i input_video1 -i input_video2 -filter_complex "
[0:0][0:1][1:0][1:1]concat=n=2:v=1:a=1[outv][outa]" -map [outv] -map [outa] -c:v libx264 output.mp4

如果图像的尺寸不同,您可能需要 scale them. Two videos may have different sar values and need to adjust them accordingly using setsar. Also feel free to change the video and audio codecs 根据您对输出格式的需要,因为您需要重新编码。

希望对您有所帮助!