ffmpeg无法检测文件,而os可以检测到

2024-09-27 00:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

发行

我尝试在一个子目录中加载图像,文件名为:

  • .\images\image0.png
  • .\images\image1.png
  • .\images\image2.png
  • .\images\image3.png
  • 。。。等。。。在
  • .\images\image8.png
  • .\images\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)

其结果是:

^{pr2}$

我甚至检查过:

 os.getcwd()

是正确的道路。在

有人能解释一下我的问题吗? 我很确定我的ffmpeg命令是正确的(它在过去对我有效)。我想知道是不是有什么原因导致ffmpeg无法识别我当前的工作目录?(不会因此而走上相对的道路吗?)在

谢谢!我们将非常感谢您的建议。在


Tags: 代码图像cmdpngos文件名ffmpegimages
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:43

问题是,您已经设置了系统,以便每个新的cmd.exeshell都立即cd到您的Documents目录,所以ffmpeg正试图在那里运行。在

显而易见的方法是只给出ffmpeg绝对路径,而不是相对路径:

^{1}$

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

^{pr2}$

但是,最好的解决方案是完全停止使用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)

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

相关问题 更多 >

    热门问题