2012-05-31 23 views
6

Ho creato un piccolo file batch per aiutare le persone a convertire i video MP4 in FLV con FFMPEG. Un modo per renderlo semplice a tutti quelli che conosco per usarlo. Stavo pensando che la linea che ho inserito fosse perfetta per ogni situazione (convertendo un file MP4 in FLV), ma pochi giorni fa, non funzionava per un file. (campione audio in alto per il formato FLV)Creazione di un file batch con il comando "IF"

Ho trovato con l'aiuto di altre persone una codeline per convertirlo, ma non so come integrarlo correttamente, nel mio file batch.

C'è quello che io uso in questo momento:

echo "Inserire il nome del file, whitout l'estensione": impostare /p nomefile =

echo "Inserire il nome che cosa dare al file di destinazione": set/p = destinationfile

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

E voglio aggiungere un "SE". Perché se questo non funziona con questa linea, l'uso che uno:

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

Come posso farlo?

La ringrazio molto per il vostro aiuto e se sono poco chiare su qualcosa, basta dire a me e farò del mio meglio per mettere in chiaro.

Grazie!

+0

Can scrivi in ​​parole semplici la condizione in cui vuoi testare la dichiarazione 'if'? –

+1

Ciao e grazie a @EitanT per questa risposta rapida! Non sono completamente sicuro della tua domanda, quindi se sbaglio, dillo a me! La condizione che sto cercando è 'Se FFMPEG non può convertire il video, usa questa altra codeline".' O se parliamo del problema l'ultimo video ottiene, è più ' Se il campione audio non è 11025,22050 o 44100, l'uso che codeline' Spero di rispondere correttamente alla tua domanda! Grazie !! –

+0

Ho pubblicato una risposta. Provalo ... –

risposta

8

io non sono sicuro se FFMPEG restituisce un codice di errore standard in caso di guasto, ma se lo fa, è possibile utilizzare il seguente:

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 

Se questo approccio non funziona, è possibile controllare l'esistenza del file di destinazione per determinare ulteriori azioni:

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 

Spero che uno di questi lavori.

+0

La tua logica di errore è invertita nel tuo primo script. Dovrebbe leggere "if not errorlevel 1 goto Done' – dbenham

+0

Grazie. Risolto il problema. –

4

Simile alla prima soluzione di EitanT, ma senza utilizzare 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
Edited-il codice aveva ottenuto troncato, tutti i fissi ora

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

Simile alla seconda soluzione di EitanT, ma senza usare 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

Cosa c'è di sbagliato in 'goto' in Batch? –

+0

@EitanT - Niente è tecnicamente sbagliato con un GOTO. Ma GOTO è lento in batch e il codice senza GOTO è più semplice e più piccolo. In questo caso la differenza di velocità è insignificante, ma mi piace ridurre al minimo la quantità di codice finché la logica rimane chiara. – dbenham

+0

Non penso che le prestazioni siano un problema quando è coinvolto il batch ... Inoltre, vedo 'goto Done' come un equivalente di' return' in C, quindi per me sembra effettivamente più chiaro. Ma immagino che sia una questione se lo stile. –

Problemi correlati