Python 使用CMD时,ffmpeg/ffprobe的输出子进程错误

Python 使用CMD时,ffmpeg/ffprobe的输出子进程错误,python,audio,cmd,ffmpeg,ffprobe,Python,Audio,Cmd,Ffmpeg,Ffprobe,当我在cmd中运行ffmpeg时,我遇到了一个问题。我有正确的输出“ffprobe西番莲果.mp4-show_streams” 但当我对子流程使用相同的方法时: command = 'ffprobe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams' p = subprocess.Popen(command, universal_newlines=True, shell=True,stdout=subpr

当我在cmd中运行ffmpeg时,我遇到了一个问题。我有正确的输出
“ffprobe西番莲果.mp4-show_streams”

但当我对子流程使用相同的方法时:

command = 'ffprobe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams'
p = subprocess.Popen(command, universal_newlines=True, shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
text = p.stdout.read()
retcode = p.wait()
print (text)
我有以下输出: “ffprobe”不能识别为内部命令或外部命令、可执行程序或批处理文件
我尝试了每个synthax,即使在列表中,我仍然有相同的输出,这是因为您的Windows终端读取系统的路径或以其他方式定义了ffprobe的路径。当您使用
shell=True运行
Popen
时,它通过shell运行执行,该shell可能有权也可能没有权(您的案例)访问该路径

可能的解决办法:

  • 提供ffprobe的完整路径(最简单):
  • 使用
    shell=False
    。可能不起作用,取决于您的系统
  • 通过
    env
    变量添加
    PATH
    ,并在该路径中添加
    ffprobe
  • 如果env不是None,则它必须是定义新流程的环境变量的映射;它们被用来代替继承当前进程环境的默认行为。它直接传递给波本


    查看以获得进一步的指导。

    第一个答案有效,非常感谢!!!!:)@这是一个非常高质量的回答,也帮助了我。
    command = 'C:\whatever\ffprobe.exe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams'
    
    command = ('ffprobe', 'C:/Users/NMASLORZ/Downloads/passionfruit.mp4', '-show_streams')
    p = subprocess.Popen(command, universal_newlines=True, shell=False,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)