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


¿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"

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.