Converti in batch i file * .avi usando ffmpeg


13

Sto cercando di convertire oltre 20 file .avi in ​​un batch usando ffmpeg.

Ho il seguente

@echo off.

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

nel mio file .bat ma non funziona. Come posso farlo funzionare con il sistema operativo Windows. Oh, e sì, tutti i file si trovano nella stessa cartella.

Il messaggio di errore che visualizzo:

Il file era imprevisto in questo momento


E cosa non funziona esattamente?
— slhck,

Se puoi indicarmi come ottenere il messaggio di errore poiché il cmd scompare molto velocemente, sarò in grado di dirti con cosa sto avendo problemi.
— Dario il

Dovresti essere in grado di aprire una finestra di comando prima ( Start »Esegui ...»cmd ) e quindi eseguire il file batch utilizzando il suo percorso completo da lì. Cosa vuoi veramente fare con i video? Che tipo di video sono questi? Hai solo bisogno di spostarli in un contenitore MPG? O devi ridimensionarli? O hai bisogno specificamente del msmpeg4v2codec?
— slhck,

I file sono tolti da un DVR e sono clip da oltre 1 GB e 5 minuti. Sì, il software DVR è patetico alla compressione. Il codec funziona poiché richiede file da 1 GB a file di circa 7 MB che sono più gestibili. E quando provo ad eseguire quel batch ricevo il messaggio "Il file era inaspettato in questo momento".
— Dario,

Vedo. Se non ti interessa il codec e il contenitore video risultanti, suggerirei di utilizzare x264 come codificatore, il che si traduce in una qualità molto migliore rispetto a MPEG-4. Il comando sarebbe qualcosa di simile al punto in ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4cui il valore CRF imposta la qualità (meno è meglio, più è peggio, valori sani da 19 a 24). Vedi anche: Converti vecchi video per avere dimensioni più piccole e quali parametri dovrei guardare per ridurre le dimensioni di un file .MOV?
— slhck,

Risposte:


26

Il file batch non è nel formato corretto per uno script bat Windows. Invece il tuo script sembra destinato a Linux. Sarà necessario modificare lo script per utilizzare un ciclo for supportato dalla shell di Windows.

Di seguito è riportato un esempio di come eseguire questa attività utilizzando un ciclo windows per. Basta inserire la riga seguente nel file batch e spostare lo script nella stessa directory dei file avi, quindi eseguirlo.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"

Con questo ottengo[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
— Dario il

1
È necessario rimuovere quel punto e virgola dalla fine della linea
— Brett
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.