FFMPEG——将 png 转换为视频文件

FFMPEG——将 png 转换为视频文件

我有大约 10k 个 PNG 文件,想要将其转换为视频。

环顾互联网我遇到了 ffmpeg 并选择运行以下命令:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4

首先,运行此命令会产生提示File 'img/00001.png' already exists. Overwrite ? [y/N],这对我来说似乎有点奇怪,因为据我所知,该命令不应该修改图像本身,而只是创建一个新video.mp4文件?

无论如何,我不想按y10k 次,所以我备份了我的图像并修改了命令:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4

现在,程序似乎可以很好地处理 254 张图像,但随后会抛出错误:

[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

如果它有用,我添加了完整日志文件在这里.另外,以下是图片中的一个例子我想皈依。另外,这是臭名昭著的 255 帧,导致程序崩溃。

答案1

ffmpeg 要求每个输入文件都有自己的-i参数,因此当你运行 时-i img/*,你的 shell 会将通配符扩展为一系列图像,而 ffmpeg 则会将其读取为输入图像,但输出图像为 10k(减一)。换句话说,ffmpeg 将看到:

ffmpeg … -i img/00000.png img/00001.png …

告诉它将其用作00000.png输入和00001.png输出。事实上,您将 用 的内容00001.png覆盖所有文件。所以我希望您备份了这些文件。00254.png00000.png

恢复原始输入文件后,请再次检查命令。您没有使用通配符%d来指定图像编号(链接的答案中显示了这一点)。因此,请使用:

ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4

欲了解更多信息,请查看幻灯片放映指南。您还可以在此处找到用于指定输入文件列表的不同选项(例如通过 glob 模式,类似于您尝试执行的操作)。

答案2

也可以使用星号通配符,但文件列表需要用引号引起来,以防止根据答案进行扩展@slhck,并且您需要一个额外的选项pattern_type来告诉它使用通配符。

ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4

相关内容