我有大约 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
文件?
反正我不想按y
10k次,所以我备份了我的图片并修改了命令:
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,程序在该帧上崩溃。
ffmpeg 要求每个输入文件都有自己的
-i
参数,因此当您运行时-i img/*
,您的 shell 会将通配符扩展为一系列图像,而 ffmpeg 将依次读取为只有一个输入图像,但 10k(减去一个)输出图像。换句话说,ffmpeg 将看到:这是告诉它
00000.png
用作输入和00001.png
输出。事实上,您将 用00001.png
. 所以我希望你有这些的备份。00254.png
00000.png
恢复原始输入文件后,请再次检查您的命令。您没有使用
%d
通配符来指定图像编号(已显示在链接的答案中)。所以,使用:有关详细信息,请查看幻灯片指南。在那里您还会找到用于指定输入文件列表的不同选项(例如,通过 glob 模式,类似于您尝试执行的操作)。
如果愿意,您也可以使用星号通配符,但文件列表需要在字符串引号中以防止根据@slhck的回答进行扩展,并且您需要一个额外的选项
pattern_type
来告诉它使用通配符。我认为这应该也能奏效。