系统找不到ffmpeg指定的文件

问题描述 投票:0回答:7

在使用ffmpeg模块编辑视频文件的过程中我使用了subprocess模块

代码如下:

#trim bit

import subprocess
import os
seconds = "4"
mypath=os.path.abspath('trial.mp4')
subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])

错误信息:

Traceback (most recent call last):
  File "C:\moviepy-master\resizer.py", line 29, in <module>
    subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])
  File "C:\Python27\lib\subprocess.py", line 168, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 390, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 640, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

查找类似问题后,我了解到该模块无法选择视频文件,因为它需要其路径,所以我采用了绝对路径。但尽管如此,错误仍然出现。 保存此代码的模块和视频文件 Trial.mp4 位于同一文件夹中。

python ffmpeg subprocess
7个回答
14
投票

以上答案都不适合我。

我通过打开 Anaconda Navigator > CMD 提示符使其正常工作。

conda install ffmpeg

12
投票

您看到的

WindowsError
不是指视频文件,而是指
ffmpeg
可执行文件本身。对
subprocess.call
的调用并不知道
trimmed.mp4
是您传递的文件名。 Windows 知道第一个参数应该是可执行文件,并向解释器报告它找不到它。

仔细检查

ffmpeg
是否可以在您的解释器运行的环境中执行。您可以将其添加到您的
PATH
或指定
ffmpeg.exe
的完整路径。


9
投票

此答案针对

ffmpeg-python
库的 Windows 用户,因为此问题是同一问题的更严格实例的第一个搜索结果。

添加 user2722968 的答案,因为现有的答案都没有为我解决问题。

截至本文,

ffmpeg-python
使用
subprocess.Popen
来运行
ffmpeg
。根据 this 问题,
subprocess
在解析名称时不会查看
Path
,因此即使安装了 FFmpeg 并且在您的
Path
中,您可以从 CMD/PowerShell 运行它,
ffmpeg-python
可能无法运行可以使用。

我的解决方案是将

ffmpeg.exe
复制到
python.exe
所在的Python环境中。这个解决方法似乎远非理想,但它似乎已经解决了我的问题。


7
投票

大多数答案都不起作用。这是使用 conda env 对我有用的方法:

pip uninstall ffmpeg-python
conda install ffmpeg
pip install ffmpeg-python

只是 conda 安装给出了库未找到错误。也没有尝试卸载 conda 库,但这有效。


3
投票

我也有同样的问题! 我找到了解决方案。

我意识到,查看所有这些答案,我需要安装 ffmpeg。我尝试了“pip install ffmpeg”,但没有成功。有效的方法是将 ffmpeg.exe 文件复制到 python.exe 所在的文件夹中。 这是楼上有人提到的。谢谢你! 要下载 ffmpeg.exe 文件,请从 https://github.com/GyanD/codexffmpeg/releases/tag/2022-06-06-git-73302aa193

下载 zip 文件

1
投票

首先卸载所有pip库

pip uninstall ffmpeg
pip uninstall ffmpeg-python

然后使用conda安装

conda install ffmpeg

0
投票

如果您要使用“ffmpeg.exe”或其Linux二进制文件,您需要这个

conda install ffmpeg

然后您将通过代码中的 subprocess 或 os.system() 调用它。 并确保您将运行不同的线程来运行 ffmpeg 代码,否则主线程中将会出现巨大的瓶颈。

class SaveAll():
    def init(self):
        super(SaveAll, self).__init__()

    def save(self):
        try:
            command = "ffmpeg -i {} -c copy -preset ultrafast {}"format(...)
            os.system(command)
        except ffmpeg.Error as e:
            print (e.stout, file=sys.stderr)
            print (e.stderr, file=sys.stderr)

    def run(self):
        self.thread= threading.Thread(target=self.save)
        self.thread.start()
        self.thread.join(1)

...

saver = SaveAll()
saver.start()
© www.soinside.com 2019 - 2024. All rights reserved.