如何使用ffmpeg将1,000,000个gif转换为视频文件

4
我有一个文件夹里有100万个gif图像,我希望使用ffmpeg将它们转换为每秒60帧的视频文件。以下是我的代码:
ffmpeg -r 60 -pattern_type glob -i *.gif -c:v libx264 out.mp4

我的gif图像不遵循%07d.gif这样的格式,例如0000001.gif、0000002.gif,但它们确实是按顺序排列的。例如:img1.gif、img2.gif ... img10.gif ... img10000.gif ... img1000000.gif。

当我尝试执行我的代码时,会得到以下错误:

-bash: /usr/local/bin/ffmpeg: Argument list too long

please help. thank you.

2个回答

3
你需要避免命令行解释器扩展模式,而是将其原样传递给程序。这可以通过引号实现。
手册中有以下示例:
 ffmpeg -r 10 -f image2 -i 'img-%03d.jpeg' out.avi

如果你的情况相似,你可以尝试以下方法:

 ffmpeg -r 60 -i '%07d.gif' -c:v libx264 out.mp4

那就试试 img%d.gif - Thilo
仍然不喜欢它 - img%d.gif:没有这样的文件或目录。 - Ridalgo

0

Shell正在对给定的命令行执行文件名扩展,即*.gif。请在这里查看如何使用引号来防止它。

此外,在您的情况下,序列模式类型似乎更有用。像以下这样的东西应该可以工作:

ffmpeg -r 60 -pattern_type sequence -i "img%d.gif" -c:v libx264 out.mp4

如果我理解正确,globbing 的问题在于它会按字母顺序对文件进行排序,例如 img-1.gif、img10.gif、...、img2.gif、img20.gif 等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接