Wie verwende ich den aktuellen Dateinamen mehrmals in einem Pipe-Befehl?

0

Ich versuche, einen Stapel von .mov-Dateien in mp4 umzuwandeln. Wie kann ich den Dateinamen von der Pipe abrufen, um den Befehl ffmpeg zu generieren? Wie verwende ich ein Pipe-Argument mehrmals in einem Kettenglied? Ich versuche so etwas zu haben:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"
Alexey Ryazhskikh
quelle

Antworten:

2

Pipes sind nützlich, wenn Sie die Standardausgabe eines Befehls als Standardeingabe eines anderen Befehls verwenden möchten . Sie müssen jedoch eine Datei als Eingabe übergeben ffmpeg, nicht Dateinamen in der Standardeingabe. Und Sie müssen ffmpegmehrere Male ausgeführt werden, einmal für jede Eingabedatei, um eine Ausgabedatei zu erhalten.

Lange Rede kurzer Sinn, Pipes sind dafür nicht sinnvoll, Sie brauchen eine Schleife, wie die andere Antwort vorschlägt. Sollte aber die Dateinamenparameter in Anführungszeichen setzen:

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 einfacher, perfekt geeigneter Ansatz. Beachten Sie, dass Sie das obige Skript in eine einzelne Zeile schreiben und direkt in der Befehlszeile ausführen können.

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done
janos
quelle
0

Sie können dies mit einer einfachen forSchleife tun

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done
Matt Clark
quelle
Ich kann es perl-Skript schreiben, aber ich was Pipes dafür verwenden, Pipes-Konzept zu verstehen.
Alexey Ryazhskikh