Batch-Konvertierung von * .avi-Dateien mit ffmpeg

13

Ich versuche, über 20 .avi-Dateien in einem Stapel mit ffmpeg zu konvertieren.

Ich habe folgendes

@echo off.

for file in *.avi
do
   ffmpeg -i "$file" -s 640x480 -vcodec msmpeg4v2 "'basename "$file" .avi'.mpg';
done

in meiner .bat Datei funktioniert es aber nicht. Wie kann ich es unter Windows OS arbeiten lassen. Oh, und ja, alle Dateien befinden sich im selben Ordner.

Die Fehlermeldung, die ich erhalte:

Die Datei war zu diesem Zeitpunkt unerwartet

Darius
quelle
Und was genau geht daran nicht?
Slhck
Wenn Sie mir zeigen können, wie ich die Fehlermeldung erhalte, da die cmd sehr schnell verschwindet, kann ich Ihnen sagen, womit ich Probleme habe.
Darius
Sie sollten nur in der Lage sein, ein Befehlsfenster zu öffnen ( Start »Ausführen…»cmd ) und dann die Batch-Datei unter Verwendung des vollständigen Pfads von dort auszuführen. Was willst du eigentlich mit den Videos machen? Was für Videos sind das? Müssen Sie sie nur in einen MPG-Container verschieben? Oder müssen Sie die Größe ändern? Oder brauchst du speziell den msmpeg4v2Codec Codec im Glossar erklärt?
Slhck
Die Dateien werden von einem DVR genommen und sind über 1 GB 5 Minuten Clips. Ja, die DVR-Software ist bei der Komprimierung erbärmlich. Der Codec funktioniert, da 1 GB Dateien für etwa 7 MB Dateien benötigt werden, die besser verwaltet werden können. Und wenn ich versuche, diesen Stapel auszuführen, erhalte ich die Meldung "Datei war zu diesem Zeitpunkt unerwartet".
Darius
Aha. Wenn Sie sich nicht für den resultierenden Videocodec und -container interessieren, würde ich vorschlagen, stattdessen x264 als Encoder zu verwenden, was zu einer viel besseren Qualität als MPEG-4 führt. Der Befehl würde ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4ungefähr so lauten, dass der CRF-Wert die Qualität festlegt (weniger ist besser, mehr ist schlechter, gesunde Werte von 19 bis 24). Siehe auch: Konvertieren alter Videos in kleinere Größen und Welche Parameter sollte ich beachten, um die Größe einer .MOV-Datei zu reduzieren?
Slhck

Antworten:

26

Ihre Batchdatei hat nicht das richtige Format für ein Windows-Bat-Skript. Stattdessen sieht Ihr Skript so aus, als wäre es für Linux gedacht. Sie müssen das Skript ändern, um eine von der Windows-Shell unterstützte for-Schleife zu verwenden .

Im Folgenden finden Sie ein Beispiel für die Ausführung dieser Aufgabe mithilfe einer Windows for-Schleife. Fügen Sie einfach die folgende Zeile in Ihre Batch-Datei ein und verschieben Sie das Skript in dasselbe Verzeichnis wie die AVI-Dateien. Führen Sie es dann aus.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"
Brett
quelle
Damit bekomme ich[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Darius
1
Muss das Semikolon vom Ende der Zeile entfernen
Brett