如何让 Python 找到 ffprobe?
How can I get Python to find ffprobe?
我在 mac (macOS Sierra) 上安装了 ffmpeg
和 ffprobe
,并且我已将它们的路径添加到 PATH。我可以从终端 运行 他们。
我正在尝试使用 ffprobe
通过以下代码获取视频文件的宽度和高度:
import subprocess
import shlex
import json
# function to find the resolution of the input video file
def findVideoResolution(pathToInputVideo):
cmd = "ffprobe -v quiet -print_format json -show_streams"
args = shlex.split(cmd)
args.append(pathToInputVideo)
# run the ffprobe process, decode stdout into utf-8 & convert to JSON
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
ffprobeOutput = json.loads(ffprobeOutput)
# find height and width
height = ffprobeOutput['streams'][0]['height']
width = ffprobeOutput['streams'][0]['width']
return height, width
h, w = findVideoResolution("/Users/tomburrows/Documents/qfpics/user1/order1/movie.mov")
print(h, w)
很抱歉我无法提供 MCVE,因为我没有编写这段代码,而且我也不知道它是如何工作的。
它给出了以下错误:
Traceback (most recent call last):
File "/Users/tomburrows/Dropbox/Moviepy Tests/get_dimensions.py", line 21, in <module>
h, w = findVideoResolution("/Users/tomburrows/Documents/qfpics/user1/order1/movie.mov")
File "/Users/tomburrows/Dropbox/Moviepy Tests/get_dimensions.py", line 12, in findVideoResolution
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 693, in run
with Popen(*popenargs, **kwargs) as process:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'ffprobe'
如果 python 没有从 PATH 文件读取,我如何指定 ffprobe
在哪里?
编辑:
python 路径似乎与我的 shell 路径不一致。
在每个程序的开头使用 os.environ["PATH"]+=":/the_path/of/ffprobe/dir"
允许我使用 ffprobe,但为什么我的 python 路径可能与我的 shell 路径不同?
您可以使用
import os
print os.environ['PATH']
到 verify/validate ffprobe 在您的 python 环境中。根据你的错误,应该不是。
我在 mac (macOS Sierra) 上安装了 ffmpeg
和 ffprobe
,并且我已将它们的路径添加到 PATH。我可以从终端 运行 他们。
我正在尝试使用 ffprobe
通过以下代码获取视频文件的宽度和高度:
import subprocess
import shlex
import json
# function to find the resolution of the input video file
def findVideoResolution(pathToInputVideo):
cmd = "ffprobe -v quiet -print_format json -show_streams"
args = shlex.split(cmd)
args.append(pathToInputVideo)
# run the ffprobe process, decode stdout into utf-8 & convert to JSON
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
ffprobeOutput = json.loads(ffprobeOutput)
# find height and width
height = ffprobeOutput['streams'][0]['height']
width = ffprobeOutput['streams'][0]['width']
return height, width
h, w = findVideoResolution("/Users/tomburrows/Documents/qfpics/user1/order1/movie.mov")
print(h, w)
很抱歉我无法提供 MCVE,因为我没有编写这段代码,而且我也不知道它是如何工作的。
它给出了以下错误:
Traceback (most recent call last):
File "/Users/tomburrows/Dropbox/Moviepy Tests/get_dimensions.py", line 21, in <module>
h, w = findVideoResolution("/Users/tomburrows/Documents/qfpics/user1/order1/movie.mov")
File "/Users/tomburrows/Dropbox/Moviepy Tests/get_dimensions.py", line 12, in findVideoResolution
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 693, in run
with Popen(*popenargs, **kwargs) as process:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'ffprobe'
如果 python 没有从 PATH 文件读取,我如何指定 ffprobe
在哪里?
编辑:
python 路径似乎与我的 shell 路径不一致。
在每个程序的开头使用 os.environ["PATH"]+=":/the_path/of/ffprobe/dir"
允许我使用 ffprobe,但为什么我的 python 路径可能与我的 shell 路径不同?
您可以使用
import os
print os.environ['PATH']
到 verify/validate ffprobe 在您的 python 环境中。根据你的错误,应该不是。