在 Windows 10 上从 python 运行时 ffmpeg.probe 不起作用

Posted

技术标签:

【中文标题】在 Windows 10 上从 python 运行时 ffmpeg.probe 不起作用【英文标题】:ffmpeg.probe not working when run from python on windows 10 【发布时间】:2022-01-15 10:31:30 【问题描述】:

我对 python 比较陌生,我正在从视频中提取一些元数据,我正在尝试使用 ffmpeg.probe(或 ffprobe),因为它提供了我需要的所有数据。

在很多错误之后,我去了基础并尝试了:

import ffmpeg
import json

movie_path="E:\Archive\Peliculas\Clasicos\Casablanca.avi"
probe = ffmpeg.probe(movie_path)

我得到的错误是:

Traceback (most recent call last):
  File "C:\Users\xxx\Desktop\test.py", line 5, in <module>
    probe = ffmpeg.probe(movie_path)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\ffmpeg\_probe.py", line 20, in probe
    p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1435, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified

我一直在四处寻找并尝试安装和卸载ffmpeg,ffmpeg-python,直接在Windows上安装(将文件添加到路径,以便我可以在控制台中运行它)。然后尝试使用 _probe.py 作为示例自己完成:

p = subprocess.Popen(['ffprobe', '-show_format', '-show_streams', '-of', 'json', 'E:\Archive\Peliculas\Clasicos\Casablanca.avi'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) #shell=True is not present in _probe.py  but it wont run otherwise
out, err = p.communicate()

返回的错误是:b'"ffprobe" is not recognized as an internal or external command, \r\n program, or executable batch file.\r\n' 但运行,不是“FileNotFoundError”

当我在 cmd 中运行它时没有问题,ffprobe -show_format -show_streams -of json E:\Archive\Peliculas\Clasicos\Casablanca.avi 提供信息(有几行在 JSON 之前,但可以工作)。

我不知道这是不是 Windows 的问题(我已经尝试了 \ 和 \\ 没有明显的区别)或者我做错了。

【问题讨论】:

【参考方案1】:

尝试使用 r 标记,如下所示:

movie_path=r"E:\Archive\Peliculas\Clasicos\Casablanca.avi"

这个标记是一个“原始字符串文字”,它正是在开头引号之前用“r”标记的字符串文字,并使用\ 反斜杠解决了这个问题。

【讨论】:

r 被称为“字符串前缀”——参见documention。 感谢您的提示,我试过了,它有效,我会注意 r 是否存在字符串问题。但是我只是出于好奇而再次尝试不使用 r 并且它起作用了。可能是ffmpeg的安装只是错过了mi PC的重启。感谢您的支持!【参考方案2】:

事实证明,当我第二天进来时,它工作得很好。我想我只是在安装 ffmpeg 后错过了重新启动(之前用 pip 安装的任何其他软件包都没有发生这种情况)。

【讨论】:

以上是关于在 Windows 10 上从 python 运行时 ffmpeg.probe 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上从 pygraphviz 运行neato

无法在 Windows 上从 Python 连接到 MSSQL Server

Cassandra安装失败64位检查。重新运行以在Windows 10上从32位获取版本

在 Windows 7 上从 emacs 运行 nmake

在 Windows 上从 Apache CGI 运行 gswin64c

windows上从python连接odbc的常用方法? [关闭]