2016-12-22 4 views
1

Ich habe ffmpeg und ffprobe auf meinem Mac (macOS Sierra) installiert, und ich habe ihren Pfad zu PATH hinzugefügt. Ich kann sie vom Terminal laufen lassen.Wie kann ich Python finden, um ffprobe zu finden?

Ich versuche ffprobe zu verwenden, um die Breite und Höhe einer Videodatei mit dem folgenden Code zu erhalten:

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) 

Es tut mir leid ich kann keine MCVE liefern, wie ich diesen Code nicht schreiben, und ich weiß nicht wirklich wie es funktioniert.

Es gibt die folgenden Fehler:

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' 

Wenn Python nicht aus der PATH-Datei liest, wie kann ich angeben, wo ffprobe ist?

EDIT: Es scheint, dass der Python-Pfad nicht mit meinem Shell-Pfad ausgerichtet ist. Die Verwendung von os.environ["PATH"]+=":/the_path/of/ffprobe/dir" am Anfang jedes Programms ermöglicht es mir, ffprobe zu verwenden, aber warum ist mein Python-Pfad möglicherweise nicht mit meinem Shell-Pfad identisch?

+0

Um zu verifizieren, dass es sich tatsächlich um ein '$ PATH'-bezogenes Problem handelt, geben Sie den vollständigen Pfad an, anstatt sich auf die Shell-Umgebung zu verlassen, um das für Sie zu tun. Z.B. benutze 'cmd =" ​​/ full/pfad/zu/ffprobe -v ruhig -print_format json -show_streams "' – boardrider

Antwort

1

können Sie

verwenden
import os 
print os.environ['PATH'] 

zu verifizieren/validieren, dass ffprobe in Ihrer Python-Umgebung ist. Nach dem Fehler, den Sie haben, ist es wahrscheinlich nicht.

+0

Ja, die Ausgabe deines Codes hat nicht den Pfad zu ffmpeg, der erscheint, wenn ich 'echo $ PATH' von der Terminal. Wie aktualisiere ich dann den Python-Pfad? – tburrows13

+0

Um das Problem vorübergehend zu lösen, fügen Sie den fpfprobe-Pfad zur Python-Umgebung hinzu, dh fügen Sie * os.environ ["PATH"] + = ":/the_path/of/ffprobe/dir" * hinzu. Sie sollten jedoch berücksichtigen, warum der Python-Pfad nicht auf Ihren Shell-Pfad ausgerichtet ist. – Burns

Verwandte Themen