Erste video-dimension von ffmpeg -i
Wie kann ich die Höhe und Breite eines Videos aus ffmpeg
's information die Ausgabe. Zum Beispiel mit der folgenden Ausgabe --
$ ffmpeg -i 1video.mp4
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/david/Desktop/1video.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2010-01-24 00:55:16
Duration: 00:00:35.08, start: 0.000000, bitrate: 354 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 597 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc
Metadata:
creation_time : 2010-01-24 00:55:16
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 109 kb/s
Metadata:
creation_time : 2010-01-24 00:55:17
At least one output file must be specified
Wie kann ich height = 640, width= 360
? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf mediainfo Behandelt die meisten der Formate, die es gibt.
Wenn Sie auf der Suche nach einem Weg, analysieren die Ausgabe von ffmpeg, benutzen Sie die regexp -
\d+x\d+
Beispiel mit perl:
Beispiel mit python (nicht perfekt):
[][][][][][][][][][][][][][][][][][][]['176x120'][][][]
Python-Einzeiler sind nicht so eingängig wie perl lieben 🙂
Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj420p(pc, bt470bg/unknown/unknown), 733x446 [SAR 1:1 DAR 733:446], 7516 kb/s, 60 fps, 60 tbr, 60 tbn, 60 tbc
, damit das Ergebnis[][][][][][][][][][][][][]['0x47504', '733x446'][]
Verwenden
ffprobe
Beispiel 1: Mit Tasten /Variablen-Namen
Beispiel 2: Nur Breite x Höhe
Beispiel 3: JSON
Was die Optionen tun:
-v error
Eine ruhige Ausgabe, jedoch können Fehler angezeigt werden. Ausgenommen sind die üblichen generischen FFmpeg Ausgabe info einschließlich der version, config und input-details.-show_entries stream=width,height
Zeigen nur diewidth
undheight
- stream-Informationen.-of
option wählt das Ausgabe-format (Standard -, kompakt -, csv -, flach -, ini, json, xml). Sehen FFprobe-Dokumentation: Schriftsteller für eine Beschreibung der einzelnen Formate-und um weitere Formatierungsoptionen.-select_streams v:0
Diese können Hinzugefügt werden, falls Ihre Eingabe enthält mehrere video-streams.v:0
wählen, wird nur die erste video-stream. Sonst hat man so vielewidth
undheight
Ausgänge, es gibt video-streams.Sehen die FFprobe-Dokumentation und FFmpeg-Wiki: FFprobe Tipps für mehr info.
re.search
mit dersubprocess
Paket erfassen Sie die Ausgabe. Sorry für klingende negativ.-of json
liefert die Daten im JSON-format, die leichter zugänglich sind in Python (ohne regex).Von Fredrik Tipp oben, hier ist, wie ich es gemacht habe mit MediaInfo ( http://mediainfo.sourceforge.net/en ):
In in diesem blog-post theres eine grobe Lösung in python:
Dies setzt jedoch Voraus, dass es 3-stellig mal 3-stellig (d.h. 854x480), müssen Sie eine Schleife durch die mögliche dimension Längen, wie (1280 x 720):
überprüfen ob Sie übereinstimmen, gibt Keiner auf jedem Schritt:
Könnte schöner, aber funktioniert.
Wie hier erwähnt,
ffprobe
bietet eine Möglichkeit zum abrufen von Daten zu einem video-Datei. Ich fand den folgenden Befehl nützlichffprobe -v quiet -print_format json -show_streams input-video.xxx
zu sehen, welche Art von Daten Sie können Kasse.Ich schrieb dann eine Funktion, die ausgeführt wird mit dem obigen Befehl und gibt die Höhe und Breite des video-Datei:
height = ffprobeOutput['streams'][1]['height']
undwidth = ffprobeOutput['streams'][0]['width']
SCHLECHT (\d+x\d+)
GUT ([0-9]{2,}x[0-9]+)
Der beste Weg, diese Frage zu beantworten wäre für ein ffmpeg-Entwickler, genau zu erklären, was das format der ffmpeg-output erwartet wird und ob wir konsequent davon ausgehen, das die Größe um sich in einem festgelegten Rahmen, innerhalb es. Bis dahin können wir nur vermuten, aus dem Beispiel, was das format in der Regel ist.
Hier ist mein Versuch. Es ist ausführlich im Vergleich zu diesen "Einzeiler", aber das ist, weil ich würde gerne wissen, warum es schlägt fehl, wenn es schließlich tut.
ohne re-Modul
Edit: keine gute Antwort, weil nicht alle videos haben, die "PAR" Informationen 🙁