2012-05-31 28 views
6

He creado un pequeño archivo por lotes para ayudar a las personas a convertir videos MP4 a FLV con FFMPEG. Una forma de hacerlo simple para todos los que conozco para usarlo. Estaba pensando que la línea que he puesto era perfecta para cada situación (convertir un archivo MP4 a FLV), pero hace unos días, no funcionaba para un archivo. (muestra de audio a alta para el formato FLV)Crear un archivo por lotes con el comando "IF"

Encontré con la ayuda de otras personas otra línea de código para convertirlo, pero no sé cómo integrarlo correctamente, en mi archivo por lotes.

No es lo que yo uso en este momento:

echo "Introduzca el nombre del archivo, debe de existir la extensión": set /p nombrefichero =

echo "Introduzca el nombre de lo que debe dar al archivo de destino": set/p = destinationfile

ffmpeg -i% nombrefichero% .mp4 -c: v libx264 -crf 19% destinationfile% .flv

Y quiero agregar un "SI". Porque si eso no funciona con esta línea, el uso que uno:

ffmpeg -i% nombrefichero% .mp4 -c: v libx264 -ar 22050 -crf 28% destinationfile% .flv

¿Cómo puedo hacer eso?

Muchas gracias por su ayuda y si no estoy seguro de algo, díganmelo y haré todo lo posible para dejarlo en claro.

Gracias!

+0

¿Puede usted escribe en palabras simples la condición en la que desea probar la declaración 'if'? –

+1

¡Hola y gracias @EitanT por esta rápida respuesta! No estoy totalmente seguro de tu pregunta, así que si me equivoco, ¡cuéntamelo! La condición que estoy buscando es 'Si FFMPEG no puede convertir el video, use esta otra línea de código".' O si hablamos del problema del último video, es más ' Si la muestra de audio no es 11025,22050 o 44100, use esa línea de código' ¡Espero haber respondido correctamente su pregunta! ¡Gracias! –

+0

He publicado una respuesta. Pruébalo ... –

Respuesta

8

no estoy seguro de si FFMPEG devuelve un código de error estándar en caso de fallo, pero si lo hace, puede utilizar el siguiente:

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv 
if not errorlevel 1 goto Done 
ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv 
:Done 

Si este método no funciona, se puede comprobar la existencia del archivo de destino para determinar la acción futura:

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv 
if exist %destinationfile%.flv goto Done 
ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv 
:Done 

Espero que uno de estos trabajos.

+0

Tu lógica de error está invertida en tu primer script. Debería leer 'si no errorlevel 1 goto Done' – dbenham

+0

Gracias. Solucionado eso. –

4

Similar a la primera solución de EitanT, pero sin usar GOTO.

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv 
if errorlevel 1 ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv 

o
Editado - el código había conseguido truncado, todo resuelto ahora

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv||ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv 

similares a segunda solución de EitanT, pero sin utilizar GOTO

ffmpeg -i %namefile%.mp4 -c:v libx264 -crf 19 %destinationfile%.flv 
if not exist %destinationfile%.flv ffmpeg -i %namefile%.mp4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%.flv 
+0

¿Qué pasa con 'goto' en Batch? –

+0

@EitanT - Nada es técnicamente incorrecto con un GOTO. Pero GOTO es lento en lotes, y el código sin GOTO es más simple y más pequeño. La diferencia de velocidad es insignificante en este caso, pero me gusta minimizar la cantidad de código siempre que la lógica permanezca clara. – dbenham

+0

rendimiento no creo que es un problema cuando se trata de lotes ... También, veo 'Goto Done' como un equivalente de' return' en C, por lo que a mí en realidad parece más claro. Pero supongo que es una cuestión de estilo. –

Cuestiones relacionadas