2012-05-31 1 views
6

Ich habe eine kleine Batch-Datei erstellt, um Leuten zu helfen, MP4-Video mit FFMPEG zu FLV zu konvertieren. Eine Möglichkeit, es jedem einfach zu machen. Ich dachte, die Zeile, die ich eingefügt habe, war perfekt für jede Situation (Konvertierung einer MP4-Datei in FLV), aber vor ein paar Tagen funktionierte es nicht für eine Datei. (Audio-Probe zu hoch für FLV-Format)Erstellen einer Batch-Datei mit dem "IF" -Befehl

Ich fand mit Hilfe von Menschen eine andere Codezeile, um es zu konvertieren, aber ich weiß nicht, wie ich es richtig in meiner Batch-Datei integrieren.

Es ist das, was ich gerade jetzt:

echo "den Namen der Datei ein, whitout der Erweiterung": set /p Namedatei =

echo „Geben Sie den Namen, was zu geben in die Zieldatei“: set/p = Destination

ffmpeg -i% Namedatei% Mp4 -c: v libx264 -crf 19% Destination% .Flv

Und ich möchte ein "IF" hinzufügen. Denn wenn das mit dieser Linie nicht funktioniert, verwenden, dass man:

ffmpeg -i% Namedatei% .mp4 -c: v libx264 -ar 22050 -crf 28 % Destination% .flv

Wie kann ich das tun?

Vielen Dank für Ihre Hilfe und wenn ich in etwas unklar bin, sagen Sie es mir einfach und ich werde mein Bestes tun, um es klar zu machen.

Danke!

+0

Kann Sie schreiben in einfachen Worten die Bedingung, in der Sie testen möchten die 'if' Aussage? –

+1

Hallo und danke @EitanT für diese schnelle Antwort! Ich bin mir deiner Frage nicht ganz sicher, also wenn ich falsch liege, sag es mir einfach! Die Bedingung, die ich suche, ist 'Wenn FFMPEG das Video nicht konvertieren kann, verwenden Sie diese andere Codeline".' Oder wenn wir über das Problem sprechen das letzte Video, es ist mehr ' Wenn das Audio-Beispiel nicht 11025,22050 oder 44100 ist, verwenden Sie diese Codezeile Ich hoffe, ich beantworte Ihre Frage richtig! Danke !! –

+0

Ich habe eine Antwort geschrieben. Versuchen Sie es ... –

Antwort

8

Ich bin mir nicht sicher, ob FFMPEG ein Standardfehlercode im Fehlerfall zurückgibt, aber wenn es der Fall ist, können Sie die folgende verwenden:

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 

Wenn dieser Ansatz nicht funktioniert, können Sie überprüfen, das Vorhandensein der Zieldatei zur Ermittlung weiterer Aktionen:

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 

Hoffe einer dieser funktioniert.

+0

Ihre Fehlerlogik ist in Ihrem ersten Skript invertiert. Es sollte 'wenn nicht errorlevel 1 gehen, getan ' – dbenham

+0

Thanks lesen. Das wurde behoben. –

4

Ähnlich wie EitanT erste Lösung, aber ohne 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 

oder
Herausgegeben-der Code abgeschnitten bekommen hatte, alle jetzt behoben

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

Ähnlich EitanT zweite Lösung, aber ohne GOTO mit

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

Was ist los mit 'goto' in Batch? –

+0

@EitanT - Nichts ist technisch falsch mit einem GOTO. Aber GOTO ist langsam im Batch und der Code ohne GOTO ist einfacher und kleiner. Die Geschwindigkeitsdifferenz ist in diesem Fall unbedeutend, aber ich mag es, die Menge an Code zu minimieren, solange die Logik klar bleibt. – dbenham

+0

Ich glaube nicht, dass die Leistung ein Problem ist, wenn der Batch involviert ist ... Außerdem sehe ich 'goto Done' als Äquivalent von' return' in C, also scheint mir das tatsächlich klarer zu sein. Aber ich denke, es ist eine Frage, ob es Stil ist. –