我ffmpeg和ffprobe安装在我的MAC(MacOS的塞拉利昂),我也加入他们的PATH路径。我可以从终端运行它们。
我正在尝试使用ffprobe以下代码来获取视频文件的宽度和高度:
importsubprocessimportshleximportjson# function to find the resolution of the input video filedeffindVideoResolution(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 JSONffprobeOutput=subprocess.check_output(args).decode('utf-8')ffprobeOutput=json.loads(ffprobeOutput)# find height and widthheight=ffprobeOutput['streams'][0]['height']width=ffprobeOutput['streams'][0]['width']returnheight,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
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路径可能不同?
解决方案
您可以使用
importosprintos.environ['PATH']
验证/验证ffprobe在您的python环境中。根据您的错误,可能没有。