Ich bin nicht wirklich gut mit der Kommandozeile vertraut, also ist dies hoffentlich keine allzu dumme Frage.
Wenn ich renne:
ffmpeg -i videofile.avi
Ich bekomme eine Ausgabe wie diese:
ffmpeg version git-2013-11-21-6a7980e Copyright (c) 2000-2013 the FFmpeg develop ers
built on Nov 21 2013 12:06:32 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --prefix=/home/user/ffmpeg_build --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --b indir=/home/user/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable -libfdk- aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-l ibx264 --enable- nonfree
libavutil 52. 53.100 / 52. 53.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.100 / 55. 21.100
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, avi, from 'videofile.avi':
Metadata:
encoder : Lavf52.68.0
Duration: 00:23:07.68, start: 0.000000, bitrate: 2390 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 23.98 tbn, 1199 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k b/s
Wenn ich nur an dem Befehl "640x480" interessiert wäre, wie könnte ich das tun?
Ich stelle mir vor, ich muss die Ausgabe an einen regulären Ausdruck weiterleiten und ausführen. Keine Ahnung, wie das geht. Vielen Dank!
0x44...
und die zweite sind die Auflösung).width x height
Pro-Video-Stream in mehreren Zeilen aus. Dies kann auf Wunsch mitffprobe
oder durch Hinzufügenhead -n 1
zum Befehl in der Antwort vermieden werden .Verwenden
ffprobe
aus dem ffmpeg-Paket:Weitere Informationen finden Sie in der ffprobe-Dokumentation und im FFmpeg-Wiki: ffprobe-Tipps .
quelle
mach den Job ohne
grep
sEinzeiler sieht aus wie:
Das gibt den gesuchten WxH-String zurück.
quelle
Ich sehe hier nur Beispiele für die Verwendung
exiftool
und Analyse der Ausgabe, was eine seltsame Wahl zu sein scheint.exiftool
kann direkt verwendet werden, um die Auflösung (und fast alle anderen Metadaten) zu erhalten:exiftool -ImageSize -s3 filename
Werden Ergebnisse in der Ausgabe in einer Form
WIDTHxHEIGHT
(eq:1280×720
)HINWEIS:
-s3
Weist exiftool an, das kürzeste Ausgabeformat zu erstellen (ohne Tag-Namen, Anführungszeichen usw.).quelle
Sie können dies mit regulären Ausdrücken und
ffmpeg
, aber ich würde es vorziehenexiftool
, einen Teil des libimage-exiftool-perl- Pakets verwenden:Warum
exiftool
?ffmpeg
/avprobe
Dienstprogramme drucken Zeilen des Formulars, inStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
denen ein oder mehrere Werte des FormularsAAAxBBB
möglich sind (wie Sie in Ihrem Beispiel sehen können). Es kann schwierig sein, die Auflösung zu bestimmen.exiftool
gibt andererseits Daten des Formulars ausType : Value
. Es ist also einfacher, das genaue Feld zu erhalten, nämlichImage Size
. Außerdem können Sie den Wert aufgrund der Art und Weise, wie die Felder angegeben sind (durch Doppelpunkt und Leerzeichen getrennt), problemlos extrahieren.Der
awk
Befehl bewirkt Folgendes:' *: *'
- einen Doppelpunkt,:
der von einer beliebigen Anzahl von Leerzeichen umgeben ist.$1
) istImage Size
print $2
).Eine alternative Version wäre:
Image
,Size
,:
und1242x480
sind alle verschiedenen Bereichen.^
) mit erhaltenImage Size
wir die richtige Zeile.Image
,Size
und:
sind die ersten drei Felder).quelle
/usr/share/example
). : DEine leicht esoterische Verwendung von
mediainfo
extrahiert leicht Breite und Höhe in dem Format, das Sie nach der Verwendung eines einfachen Einzeilers haben. Beachten Sie das folgende Beispiel auf meinem System:Die verschiedenen weiteren Parameter, die auf diese Weise verwendet werden können, können mit gesehen werden,
mediainfo --Info-Parameters
aber vielleicht reicht diese einfache Verwendung für Sie aus ...quelle
Ich habe eine 1-Liner-
for
Schleife erstellt, um die Auflösung aus dem Dateiverzeichnis zu extrahieren.quelle
ls
wird nicht gut enden ... das Zitieren wird das Chaos nicht beheben