Ich habe mehrere Videodateien mit unterschiedlichen Auflösungen. Jetzt möchte ich nur die Videodateinamen mit zB 720p Auflösung auflisten. Ich bevorzuge ein Liner in der Bash-Befehlszeile und kann hilfreiche Videoinformationen einschließlich der Auflösung erhalten, wenn ich Folgendes ausführe:
avconv -i video.mp4
aber diese Kombination:
find -exec sh -c 'if [[ "$(avconv -i {}") == *720* ]] ; then echo 720 found; fi;'
erzeugt den Fehler: exec - fehlendes Argument.
Ich bin ehrlich, ich habe kaum Streit mit Bash-Kommandostrukturen, insbesondere mit kombinierten Kommandos. Was ist also falsch an meiner kombinierten Befehlszeichenfolge?
Danke.
linux
command-line
video
resolution
find
Linuxwhisperer
quelle
quelle
ffprobe video.mp4
. Dabei wird kein Fehleravconv
ausgegeben.Antworten:
Vielleicht erfüllt dieser Befehl das, wonach Sie suchen:
quelle
done
. Habe es gerade bearbeitet.echo $i
anstelle von tunecho 720 found
.man avconv
oderapropos avconv
um Hilfe zu diesem Programm.Im Moment habe ich eine brauchbare Lösung gefunden:
Hier kann ich alle m ?? Video-Dateien und drucken Sie den Namen einschließlich "720" Zustand. Ohne den if Teil könnte ich mir alle Videos und deren Auflösungen anzeigen lassen.
Ich habe dies mit Hilfe anderer Antworten hier herausgearbeitet.
Wenn ich versuche, find und exec mit dem do-Teil der obigen Lösung zu kombinieren, erhalte ich nur die Meldung "E: Fehler beim Lesen der Datei" als Ergebnis von mediainfo für jeden Betreff:
Wie gesagt, die "Wenn" -Konstruktion funktioniert (für das aktuelle Verzeichnis), aber ich werde versuchen, sie auch mit find zum Laufen zu bringen.
quelle
Es mag überraschen,
-exec
kann aber als Test beimfind
Aufruf verwendet werden:Der obige Befehl wird in Unterverzeichnisse absteigen. Um nur im aktuellen Verzeichnis zu suchen
-maxdepth 1
, verwenden Sie:Beachten Sie, dass
ffprobe
alle Dateien getestet werden. Bei Nicht-Mediendateien schlägt dies offensichtlich fehl, aber.jpg
in der endgültigen Ausgabe werden möglicherweise Nicht-Videomedien (wie ) angezeigt . Um dies zu vermeiden,find
sollten vorher einige zusätzliche Tests durchgeführt werden-exec
, zB:Oder besser, Sie können MIME-Typ testen mit
file
:Lesen Sie
man find
, um mehr zu erfahren.BEARBEITEN:
Dieser Befehl (falsch) verwendet
avconv
, wie Sie angefordert haben:Das Problem ist, dass jeder Aufruf
avconv
einen Fehler auslöst. Wir ignorieren es einfach und extrahieren die benötigten Informationen. Das ist eine etwas hässliche Lösung. Ich bin mir nicht ganz sicher, ob Sieavconv
sich so verhalten wie ich. Möglicherweise müssen Sie sie durchStream.*x720
einen anderen regulären Ausdruck ersetzen .find -exec
erfordert das Schließen mit\;
oder+
,gibt esnachdem du die$(
ohne)
""
frage bearbeitet hast sind verschachtelt (nicht verschachtelt) mit$()
,*720*
kann Shell Globbing auslösen, sollte"*720*"
(ich sprechesh
, nicht die äußere Schale),avconv
Sie versuchen zu analysieren, geht anstderr
. Ich denke, Sie müssen sie umleiten, bevor Sie sie analysieren können.quelle
ffprobe
istffmpeg
in meinem Kubuntu. Ein ähnliches Werkzeug sollte funktionieren (Sie sollten esgrep
natürlich an das Werkzeug anpassen ). Der Punkt ist, dass Sie dies nicht verwenden sollten,avconv
da es die Ausgabedatei erfordert, die einen Fehler auslöst - zumindest in (K) Ubuntu.