Verwenden Sie den Befehl „find“ für die rekursive Konvertierung mit ffmpeg

Verwenden Sie den Befehl „find“ für die rekursive Konvertierung mit ffmpeg

Wie kann ich das folgende Skript verwenden, umrekursivKonvertieren Sie ein Verzeichnis, das enthält .mp4( .pngnur 1 Frame).

Momentan wird nur das Verzeichnis konvertiert. Es ist nicht rekursiv.

for i in *.mp4
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
done

Antwort1

find . -type f -name '*.mp4' -exec sh -c '
    name="${1%.*}"
    echo "$name"
    ffmpeg -i "$1" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
' find-sh {} \;

Anmerkungen:

  • In Ihrem Originalcode name=`echo "$i" | cut -d'.' -f1`befindet sich ein Fragment von eher geringer Qualität. Es schneidet beim ersten Punkt ab, das scheint falsch zu sein. Es ist nicht das einzige Problem, aber ich werde nicht näher darauf eingehen. Wenn Sie eine Erweiterung entfernen möchten, ist der richtige Weg name="${i%.*}":
  • *.mp4wird zitiert wegenDas.
  • GeistDas.
  • find-shwird erklärtHier.
  • findsteigt in Unterverzeichnisse ab, folgt aber standardmäßig keinen symbolischen Links. Wenn alle „Unterverzeichnisse“ in .der Tat Links zu Verzeichnissen sind, könnten Sie fälschlicherweise annehmen, dass das Tool im Allgemeinen nicht absteigt. Aktivieren Sie man 1 finddie -LOption .

verwandte Informationen