【问题标题】:With CMD wrong output subprocess with ffmpeg/ffprobe使用 ffmpeg/ffprobe 的 CMD 错误输出子进程
【发布时间】:2021-07-15 17:53:12
【问题描述】:

我在 cmd 中运行 ffmpeg 时遇到问题,我有正确的输出 "ffprobe passionfruit.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' 不被识别为内部命令或外部命令、可执行程序或批处理文件。” 我尝试了每个合成器,即使在列表中我仍然有相同的输出

【问题讨论】:

    标签: python audio cmd ffmpeg ffprobe


    【解决方案1】:

    这是因为您的 Windows 终端读取系统的 PATH 或以其他方式定义了 ffprobe 的路径。当您使用shell=True 运行Popen 时,它会通过shell 运行执行,该shell 可能(您的情况)有权访问该PATH。

    可能的解决方案:

    1. 提供ffprobe 的完整路径(最简单):
    command = 'C:\whatever\ffprobe.exe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams'
    
    1. 使用shell=False。可能无法正常工作,具体取决于您的系统。
    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)
    
    1. 通过env 变量添加PATH,并在该路径中添加ffprobe

    如果env不是None,它必须是一个定义新进程的环境变量的映射;这些用于代替继承当前进程环境的默认行为。它直接传递给 Popen。

    查看docs 以获取更多指导。

    【讨论】:

    • @NicolasMaslorz 这是一个非常高质量的答案,对我也有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2022-11-28
    • 2021-09-25
    • 2020-09-03
    • 2023-03-23
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多