Konwersja plików * .avi za pomocą ffmpeg

13

Próbuję przekonwertować 20 plików .avi w partii za pomocą ffmpeg.

Mam następujące

@echo off.

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

w moim pliku .bat, ale nie działa. Jak mogę sprawić, by działało w systemie operacyjnym Windows. Och, i tak, wszystkie pliki są w tym samym folderze.

Otrzymuję komunikat o błędzie:

W tym czasie plik był nieoczekiwany

Darius
źródło
A co właściwie na to nie działa?
slhck
Jeśli możesz wskazać mi, jak uzyskać komunikat o błędzie, ponieważ cmd znika bardzo szybko, będę w stanie powiedzieć ci, z czym mam problem.
Darius
Powinieneś być w stanie otworzyć okno poleceń wcześniej ( Start »Uruchom…» cmd ), a następnie uruchom plik wsadowy, korzystając z pełnej ścieżki. Co właściwie chcesz zrobić z filmami? Jakie są te filmy? Czy wystarczy przenieść je do kontenera MPG? Czy potrzebujesz je zmienić? A może potrzebujesz msmpeg4v2 kodek?
slhck
Pliki są usuwane z rejestratora i mają ponad 1 GB 5 minut klipów. Tak, oprogramowanie DVR jest żałosne przy kompresji. Kodek działa, ponieważ zajmuje pliki 1 GB do około 7 MB plików, które są łatwiejsze do zarządzania. A kiedy próbuję uruchomić tę partię, otrzymuję komunikat „Plik był nieoczekiwany w tym czasie”.
Darius
Widzę. Jeśli nie zależy ci na wynikowym kodeku wideo i kontenerze, sugerowałbym użycie x264 zamiast tego, co spowoduje dużo lepsza jakość niż MPEG-4. Polecenie byłoby czymś w rodzaju ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4 gdzie wartość CRF ustawia jakość (mniej znaczy lepiej, więcej gorzej, wartości sane od 19 do 24). Zobacz też: Konwertuj stare filmy wideo na mniejsze i Jakie parametry powinienem sprawdzić, aby zmniejszyć rozmiar pliku .MOV?
slhck

Odpowiedzi:

23

Twój plik wsadowy nie ma poprawnego formatu dla skryptu bat systemu Windows. Zamiast tego skrypt wygląda tak, jakby był przeznaczony dla Linuksa. Musisz zmienić skrypt, aby użyć dla pętli to jest obsługiwane przez powłokę systemu Windows.

Poniżej znajduje się przykład, jak wykonać to zadanie za pomocą pętli systemu Windows. Po prostu umieść poniższy wiersz w pliku wsadowym i przenieś skrypt do tego samego katalogu, co pliki avi, a następnie uruchom go.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"
Brett
źródło
Z tym otrzymuję [NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Darius
1
Musisz usunąć ten średnik od końca linii
Brett