使用一组 JPEG 图像创建视频

使用一组 JPEG 图像创建视频

我有一台闭路电视摄像机,当它检测到移动时,它会将 JPEG 图像 (.jpg) 上传到 FTP 服务器。我们似乎获得了不少图像,所以我想将它们制作成视频以方便观看。

我已经在 Google 上搜索了好几次,但都没有找到我想要的结果。我使用的文件夹有超过 2000 张名为 AyyMMddhhmmssff.jpg 的图片。如果我需要重命名,我可以这样做,因为我已经发现我需要重命名才能让 FFMPEG 正常工作。

我希望每秒显示一张图像,或者每秒显示两张图像,这样播放视频时就可以轻松查看图像。是的,我知道这样可以制作出时长超过 20/40 分钟的视频!

我对 Windows、macOS 或 Ubuntu 解决方案很满意!我更喜欢 Windows(因为 FTP 服务器就在那里)。

图像魔术师

convert *.jpg video.mpg

这听起来很棒,简单又好用。但是,我尝试过在我的 Mac(通过 brew 安装)和 Ubuntu 上安装,两者都使相关系统的性能陷入停滞,而且 20 分钟后仍未完成。我不得不重启 Mac,因为我什么也做不了!

FFMPEG

ffmpeg -y -r 6 -f image2 -s 1920x1080 -i <path>\%06d.jpg -vcodec libx264 -pix_fmt yuv420p <path>/video.mp4

在使用 FFMPEG 方面我不是专家,但我曾用它完成过多项任务,发现它是一款非常棒的实用工具。上面的命令确实生成了视频,但图像显示得太快,偏离了视频的重点。我尝试调整值,可以得到更好的效果,但并不是我想要的效果。有一次尝试(如果我没记错的话,设置-r 1)导致整个视频只显示一张图像!很明显,尽管我看过手册,但我不明白 FFMPEG 命令中的各种参数!

答案1

如果将图像重命名为连续编号,则可以使用

ffmpeg -y -framerate 1 -i <path>\%06d.jpg -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

连续编号,如000001.jpg000002.jpg000003.jpg... 注意每个名称恰好有 6 个字符,满足%06d传递给 ffmpeg 的要求。

如果不想重命名,请创建以下格式的文本文件,

file first.jpg
file second.jpg
file third.jpg
...
file last.jpg

进而

ffmpeg -f concat -r 1 -i list.txt -r 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

答案2

不要使用 -r 5,而要将其改为 -framerate 5,这样将生成每秒 5 帧的视频。您可以根据需要调整该数字,1 表示每幅图像显示 1 秒,10 表示循环更快。

ffmpeg -y -framerate 1 -i <path>\%06d.jpg -framerate 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

or

ffmpeg -f concat -r 1 -i list.txt -framerate 5 -c:v libx264 -pix_fmt yuv420p <path>/video.mp4

相关内容