Es mag überraschen, -execkann aber als Test beim findAufruf verwendet werden:
find -type f -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
Der obige Befehl wird in Unterverzeichnisse absteigen. Um nur im aktuellen Verzeichnis zu suchen -maxdepth 1, verwenden Sie:
find -maxdepth 1 -type f -exec …
Beachten Sie, dass ffprobealle Dateien getestet werden. Bei Nicht-Mediendateien schlägt dies offensichtlich fehl, aber .jpgin der endgültigen Ausgabe werden möglicherweise Nicht-Videomedien (wie ) angezeigt . Um dies zu vermeiden, findsollten vorher einige zusätzliche Tests durchgeführt werden -exec, zB:
find -maxdepth 1 -type f \( -iname "*.avi" -o -iname "*.mp4" -o -iname "*.mkv" \) -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
Oder besser, Sie können MIME-Typ testen mit file:
find -maxdepth 1 -exec sh -c 'file --mime-type "$1" | grep -q "video/"' sh {} \; -exec sh -c 'ffprobe -show_streams 2>/dev/null "$1" | grep -q coded_height=720' sh {} \; -print
Lesen Sie man find, um mehr zu erfahren.
BEARBEITEN:
Dieser Befehl (falsch) verwendet avconv, wie Sie angefordert haben:
find -exec sh -c 'file --mime-type "$1" | grep -q "video/"' sh {} \; -exec sh -c 'avconv 2>&1 -i "$1" | grep -q "Stream.*x720"' sh {} \; -print
Das Problem ist, dass jeder Aufruf avconveinen 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 Sie avconvsich so verhalten wie ich. Möglicherweise müssen Sie sie durch Stream.*x720einen anderen regulären Ausdruck ersetzen .
Was ist falsch an meiner kombinierten Befehlsfolge?
find -execerfordert das Schließen mit \;oder +,
gibt es $(ohne) nachdem du die ""frage bearbeitet hast sind verschachtelt (nicht verschachtelt) mit $(),
*720*kann Shell Globbing auslösen, sollte "*720*"(ich spreche sh, nicht die äußere Schale),
- Die Ausgabe, die
avconvSie versuchen zu analysieren, geht an stderr. Ich denke, Sie müssen sie umleiten, bevor Sie sie analysieren können.
- und vielleicht noch etwas anderes.
ffprobe video.mp4. Dabei wird kein Fehleravconvausgegeben.