2012-05-31 17 views
6

Stworzyłem mały plik wsadowy, który pomaga ludziom konwertować wideo MP4 na FLV za pomocą FFMPEG. Sposób na uproszczenie dla wszystkich, którzy go znają. Myślałem, że linia, którą umieściłem, była idealna dla każdej sytuacji (konwertowanie pliku MP4 na FLV), ale kilka dni temu nie działała dla pliku. (próbka dźwięku do wysokiej dla formatu FLV)Tworzenie pliku wsadowego za pomocą komendy "IF"

Znalazłem przy pomocy ludzi inny kodek do konwertowania, ale nie wiem jak poprawnie go zintegrować, w moim pliku wsadowym.

Jest co używam teraz:

echo "Podaj nazwę pliku, whitout rozszerzeniem": set /p namefile =

echo „Podaj nazwę, co do dać do pliku docelowego”: set/p destinationfile =

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

I chcę dodać "JEŻELI". Bo jeśli to nie zadziała z tej linii, należy użyć że jeden:

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

Jak mogę to zrobić?

Bardzo dziękuję za pomoc, a jeśli coś jest niejasne, po prostu mi to powiedz i zrobię co w mojej mocy, aby to wyjaśnić.

Dzięki!

+0

Can piszesz prostymi słowami warunek, który chcesz przetestować instrukcja "jeśli"? –

+1

Witam i dziękuję @EitanT za szybką odpowiedź! Nie jestem całkowicie pewien twojego pytania, więc jeśli się mylę, po prostu mi to powiedz! Warunek, którego szukam, to 'Jeśli FFMPEG nie może konwertować wideo, użyj tego innego kodu PIN".' Albo jeśli mówimy o problemie ostatni wideo dostać, to bardziej ' Jeśli próbka audio nie jest 11025,22050 lub 44100, użycie że codeline' Mam nadzieję, że poprawnie odpowiedzieć na pytanie! Dzięki! –

+0

Wysłałem odpowiedź. Wypróbuj ... –

Odpowiedz

8

Nie jestem pewien, czy FFMPEG zwraca standardowy kod błędu w przypadku niepowodzenia, ale jeśli tak, to można użyć następujących:

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 

Jeśli ta metoda nie działa, można sprawdzić istnienie pliku docelowego w celu określenia dalszych działań:

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 

Mam nadzieję, że jedno z tych prac.

+0

Twoja logika błędu jest odwrócona w pierwszym skrypcie. Powinien przeczytać "if not errorlevel 1 goto Done" – dbenham

+0

Dzięki. Naprawiono to. –

4

Podobny do pierwszego rozwiązania EitanT, ale bez użycia 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 

lub
Zmieniano - kod dostał obcięty, wszystko naprawione

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

podobne do drugiego rozwiązania EitanT, ale bez używania 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

Co jest nie tak z 'goto' w Batch? –

+0

@EitanT - Nic nie jest technicznie złe z GOTO. Ale GOTO działa wolno, a kod bez GOTO jest prostszy i mniejszy. Różnica prędkości jest w tym przypadku niewielka, ale lubię minimalizować ilość kodu, o ile logika pozostaje jasna. – dbenham

+0

Nie sądzę, wydajność jest problem, gdy partia jest zaangażowany ... Również widzę 'goto Zrobić' jako odpowiednik' return' w C, więc dla mnie rzeczywiście wydaje się jaśniejsze. Ale myślę, że to kwestia stylu. –

Powiązane problemy