操作系统时ffmpeg无法检测到文件

时间:2013-08-07 21:24:03

标签: python windows file python-2.7 ffmpeg

问题

我正在尝试使用名为:

的文件在子目录中加载图像
  • \图像\ image0.png
  • \图像\ image1.png
  • \图像\ image2.png
  • \图像\ image3.png
  • ......等......
  • \图像\ image8.png
  • \图像\ image9.png

当我运行代码时:

 print os.path.exists('.\\images\\image0.png')
 cmd = "ffmpeg -f image2 -r 20 -i .\\images\\image%01d.png -c:v libx264 -r 20 .\\images\\output.mp4"
 os.system(cmd)

导致:

 True
 //blah blah blah ffmpeg start up stuff blah blah blah 

 [image2 @ 00000000026ceda0] Could find no file with with path '.\images\image%01
 d.png' and index in the range 0-4
 .\images\image%01d.png: No such file or directory

我甚至检查过:

 os.getcwd()

是正确的道路。

有人可以解释我的问题吗? 我很确定我的ffmpeg命令是正确的(它在过去对我有用)。我想知道ffmpeg是否有可能无法识别我当前的工作目录? (并且不会因此而采取相对路径?)

谢谢!建议/建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题是您已经设置了系统,因此每个新的cmd.exe shell都会立即进入您的Documents目录,因此ffmpeg正试图在那里运行。

显而易见的方法是只提供ffmpeg绝对路径而不是相对路径:

images = os.path.abspath('.\\images')
cmd = "ffmpeg -f image2 -r 20 -i {}\\image%01d.png -c:v libx264 -r 20 {}\\output.mp4".format(images, images)

或者,您始终可以将cd命令粘贴到发送到system函数的内容中:

curpath = os.path.abspath(os.getcwd())
cmd = "cd {} && ffmpeg -f image2 -r 20 -i .\\images\\image%01d.png -c:v libx264 -r 20 .\\images\\output.mp4".format(curpath)

然而,最好的解决方案是完全停止使用system,正如system的文档建议的那样,并将shell排除在外:

cmd = "ffmpeg -f image2 -r 20 -i .\\images\\image%01d.png -c:v libx264 -r 20 .\\images\\output.mp4"
subprocess.check_call(cmd)

(有人会在评论中建议您不能使用subprocess的字符串,除非shell=True。这在Unix上是正确的,但在Windows上则不然。实际上,在Windows上,如果您传递参数列表,subprocess只会将它们连接成一个字符串以传递给CreateProcess。如果您不知道如何正确地转义参数对于Windows,列表仍然是一个好主意 - 但如果你有一个非常好的命令行,只需使用它。)