Ich versuche, mehrere MOV-Dateien in MP4 zu konvertieren. Wie kann ich den Dateinamen aus der Pipe abrufen, um den FFMPEG-Befehl zu generieren? Wie kann ich das Pipe-Argument mehrfach in der Kettenverbindung verwenden? Ich versuche, so etwas zu haben:
ls *.MOV | ffmpeg -y -i $file "$file.mp4"
Antwort1
Pipes sind nützlich, wenn Sie dieStandardausgabeeines Befehls alsStandardeingabeeines anderen Befehls. Sie müssen jedoch eine Datei als Eingabe übergeben ffmpeg
, nicht Dateinamen auf der Standardeingabe. Und Sie müssen es ffmpeg
mehrere Male ausführen, einmal für jede Eingabedatei, um eine Ausgabedatei zu erhalten.
Kurz gesagt, Pipes sind hierfür nicht nützlich, Sie benötigen eine Schleife, wie in der anderen Antwort vorgeschlagen. Die Dateinamenparameter sollten jedoch in doppelte Anführungszeichen gesetzt werden:
for file in *.MOV; do
ffmpeg -y -i "$file" "$file.mp4"
done
Sie haben in einem Kommentar erwähnt, dass Sie ein Perl-Skript schreiben könnten. Das wäre wirklich übertrieben. Bash ist ein einfacherer, perfekt geeigneter Ansatz. Beachten Sie, dass Sie das obige Skript in einer einzigen Zeile schreiben und direkt auf der Befehlszeile ausführen könnten.
for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done
Antwort2
Sie können dies mit einer einfachen for
Schleife tun
#!/bin/bash
for file in /path/to/*.MOV
do
echo "Converting $file"
done