Conversión por lotes de archivos * .avi usando ffmpeg

13

Estoy tratando de convertir más de 20 archivos .avi en un lote usando ffmpeg.

Tengo lo siguiente

@echo off.

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

en mi archivo .bat pero no funciona. ¿Cómo puedo hacer que funcione bajo el sistema operativo Windows? Ah, y sí, todos los archivos están en la misma carpeta.

El mensaje de error que recibo:

El archivo fue inesperado en este momento

Darius
fuente
¿Y qué no funciona exactamente al respecto?
slhck
Si puede indicarme cómo obtener el mensaje de error, ya que el cmd desaparece muy rápido, podré decirle con qué estoy teniendo problemas.
Darius
Debería poder abrir una ventana de comandos antes ( Inicio »Ejecutar ...»cmd ) y luego ejecutar el archivo por lotes utilizando su ruta completa desde allí. ¿Qué es lo que realmente quieres hacer con los videos? ¿Qué tipo de videos son estos? ¿Solo necesita moverlos a un contenedor MPG? ¿O necesita cambiar su tamaño? ¿O necesitas específicamente el msmpeg4v2códec?
slhck
Los archivos se extraen de un DVR y tienen más de 1 GB de clips de 5 minutos. Sí, el software DVR es patético en la compresión. El códec funciona ya que toma archivos de 1GB a aproximadamente 7MB, que son más manejables. Y cuando intento ejecutar ese lote recibo el mensaje "El archivo era inesperado en este momento".
Darius el
Veo. Si no le importa el códec y el contenedor de video resultante, le sugiero que use x264 como codificador, lo que resulta en una calidad mucho mejor que MPEG-4. El comando sería algo así como ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4donde el valor CRF establece la calidad (menos es mejor, más es peor, valores correctos de 19 a 24). Consulte también: Convierta videos antiguos para que tengan tamaños más pequeños y ¿Qué parámetros debo tener en cuenta para reducir el tamaño de un archivo .MOV?
slhck

Respuestas:

26

Su archivo por lotes no tiene el formato correcto para un script de Windows bat. En cambio, su script parece que estaba destinado a Linux. Deberá cambiar la secuencia de comandos para usar un bucle for que sea compatible con Windows Shell.

A continuación se muestra un ejemplo de cómo realizar esta tarea utilizando un bucle de Windows for. Simplemente coloque la línea a continuación en su archivo por lotes y mueva el script al mismo directorio que los archivos avi, luego ejecútelo.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"
Brett
fuente
Con esto llego[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Darius
1
Necesito eliminar ese punto y coma del final de la línea
Brett