2012-05-31 102 views
6

我創建了一個小批處理文件,用於幫助用戶將MP4視頻轉換爲帶有FFMPEG的FLV。一種讓我知道每個人都可以使用它的簡單方法。我認爲我輸入的這一行非常適合所有情況(將MP4文件轉換爲FLV),但幾天前,它不適用於文件。 (音頻採樣爲高FLV格式)使用「IF」命令創建批處理文件

我發現人的幫助下,其他代碼行將其轉換,但我不知道如何正確地將它集成到我的批處理文件中。

有什麼我現在使用:

回聲「輸入文件名,whitout擴展」:設置 /P namefile =

回聲「輸入名稱你什麼給目標文件」:設置/ p destinationfile =

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

我想添加一個「IF」。因爲如果沒有這一行工作,使用一個:

的ffmpeg -i%namefile%.MP4 -c:v libx264 -ar 22050 -crf 28 %destinationfile%。FLV

我該怎麼做?

非常感謝您的幫助,如果我對某件事不太清楚,請告訴我,我會盡我所能來說清楚。

謝謝!

+0

能你用簡單的語言寫出你想測試的條件'if'語句? –

+1

嗨和感謝@EitanT爲這個快速的答案!我不完全確定你的問題,所以如果我錯了,只是告訴我!我正在尋找的條件是 '如果FFMPEG無法轉換視頻,請使用此其他代碼行「。' 或者,如果我們談論這個問題的最後一個視頻得到的,它更 '如果音頻樣本不是11025,22050或44100,使用該codeline' 我希望我正確地回答你的問題! 謝謝! –

+0

我已經發布了一個答案。試試吧...... –

回答

8

我不知道,如果FFMPEG失敗的情況下返回標準錯誤代碼,但如果這樣做,你可以使用以下命令:

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 

如果這個方法行不通,你可以檢查目標文件的存在以確定進一步的動作:

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 

希望這些作品之一。

+0

你的錯誤邏輯在你的第一個腳本中被反轉。它應該閱讀'如果不是errorlevel 1 goto完成' – dbenham

+0

謝謝。修正了。 –

4

與EitanT的第一種解決方案類似,但未使用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 


編輯 - 代碼已經得到截斷,現在都固定

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

到EitanT的第二個解決方案類似,但不使用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

批次中的goto有什麼問題? –

+0

@EitanT - GOTO在技術上沒有問題。但是GOTO批處理速度很慢,沒有GOTO的代碼更簡單和更小。速度差異在這種情況下是微不足道的,但只要邏輯保持清晰,我就會盡量減少代碼量。 – dbenham

+0

當涉及到批處理時,我不認爲性能是個問題......另外,我在C中看到'goto Done'等價於'return',所以對我來說它實際上看起來更清晰。但我想這是一個問題,如果風格。 –