FFMPEG - 将 png 转换为视频文件

Raf*_*ger 8 video ffmpeg command-line

我有大约 10k 个 PNG 文件,我想将它们转换成视频。

通过浏览互联网,我发现了 ffmpeg 并选择运行以下命令:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
Run Code Online (Sandbox Code Playgroud)

首先,运行此命令会产生提示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
Run Code Online (Sandbox Code Playgroud)

现在,程序对于 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!
Run Code Online (Sandbox Code Playgroud)

如果它有用,我在此处添加了完整的日志文件。而且,为了更好地衡量,这里是我想要转换的图像的示例。另外,这里是臭名昭著的帧 255,程序在该帧崩溃。

slh*_*hck 9

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

\n\n
ffmpeg \xe2\x80\xa6 -i img/00000.png img/00001.png \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

恢复原始输入文件后,请再次检查您的命令。您尚未使用%d通配符来指定图像编号(在链接的答案中显示)。所以,使用:

\n\n
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关更多信息,请查看幻灯片指南。在那里您还将找到用于指定输入文件列表的不同选项(例如通过 glob 模式,类似于您尝试执行的操作)。

\n