„Keine solche Datei oder kein solches Verzeichnis“ beim Konvertieren von Videos in eine neue Ordnerstruktur

„Keine solche Datei oder kein solches Verzeichnis“ beim Konvertieren von Videos in eine neue Ordnerstruktur

Ich versuche, ein großes Archiv mit Videos (in Unterordnern) in eine parallele Ordnerstruktur zu kopieren und dabei die Videos von MOV in MP4 zu konvertieren (plus einige andere Optimierungen). Dies ist der Befehl:

for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done

Für die Ausgabedatei erhalte ich jedoch die Meldung „keine solche Datei oder kein solches Verzeichnis“. Ich weiß, dass es auf dieser Site viele ähnliche Fragen gibt, aber keine davon war für mein Szenario hilfreich.
Ich habe auch versucht, vorher eine leere Ordnerstruktur zu erstellen, sodass nur die MP4-Datei erstellt werden muss, aber ich erhalte trotzdem denselben Fehler.

Es funktioniert, wenn die (leere) Ordnerstruktur bereits vorher erstellt wurde. Sobald jedoch ein Ordner fehlt, erhalte ich die Meldung „Keine solche Datei oder kein solches Verzeichnis“.

Gibt es eine Möglichkeit, ihm mitzuteilen, dass bei Bedarf übergeordnete Ordner erstellt werden sollen, um dort Dateien ablegen zu können?

Antwort1

Gibt es eine Möglichkeit, ihm mitzuteilen, dass bei Bedarf übergeordnete Ordner erstellt werden sollen, um dort Dateien ablegen zu können?

ffmpeg? Nein. Es erstellt nicht von selbst Ordner. Tatsächlich machen das nur sehr wenige Programme.

Einige Vorschläge:

  • Den Ordner sollten Sie vorher anlegen.
  • Sie müssen den Basisnamen der Datei verwenden, da dieser $fbereits den vollständigen Dateipfad enthält.
  • Sie sollten für Ihr Videoarchiv rekursives Globbing verwenden ( **/*), um alle Verzeichnisse zu durchlaufen.

Zusammengefasst:

# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
    # get the file's basename
    fname="$(basename "$f")"
    # run the command, replacing the file extension
    ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done

verwandte Informationen