2012-04-10 96 views
3

我正在創建一個系統,用於在創建.mov文件時將一堆.mov文件轉換爲H.264(使用HandBrakeCLI)和webm(使用ffmpeg)。總的來說,事情進展得很順利。我掛了一些錯誤檢測。我想知道其中一種編碼是否失敗,以便我們可以進行調查,再試一次等​​。有沒有一種很好的方式來判斷HandBrakeCLI是否實際編碼了任何東西?

要測試編碼失敗,我將文本文件複製到.mov擴展名的文件中,並設置關於嘗試的程序對其進行編碼。當然,它們都無法對文件進行編碼(我不確定在這種情況下「成功」意味着什麼......)但是,雖然ffmpeg通過將其退出代碼設置爲1來報告此故障,但HandBrakeCLI會將退出代碼設置爲0 ,因爲它乾淨地退出了。這與HandBrakeCLI documentation一致,但它讓我想知道如何知道HandBrakeCLI是否無法編碼任何東西。這同一個文件頁面提示:「如果你想監控手剎的過程中,應監視的標準管道」,所以現在我得到我想要做這樣的效果:

HandBrakeCLI --preset 'Normal' --input bad.mov --output out.mv4 2>&1 | grep 'Encode done' 

的grep然後將其如果發現匹配則退出代碼爲0,如果不匹配則退出1。但是,這看起來相當野蠻:例如,文本「編碼完成!」可能會在未來版本的HandBrake中發生變化。

那麼,任何人都有更好的方法來判斷HandBrake是否編碼了某些東西?

低於參考一些編輯的外殼輸出包括...

$ ffmpeg -i 'develqueuedir/B_BH_120409.mov' 'develqueuedir/B_BH_120409.webm' 
FFmpeg version 0.6.4-4:0.6.4-0ubuntu0.11.04.1, Copyright (c) 2000-2010 the Libav Developers 
[snip] 
develqueuedir/B_BH_120409.mov: Invalid data found when processing input 

$ echo $? 
1 

$ HandBrakeCLI --preset 'Normal' --maxWidth 720 --optimize --input 'develqueuedir/B_BH_120409.mov' --output 'develqueuedir/B_BH_120409.mv4' 

Output format couldn't be guessed from file name, using default. 
[11:45:45] hb_init: starting libhb thread 
HandBrake 0.9.6 (2012022900) - Linux x86_64 - http://handbrake.fr 
Opening develqueuedir/B_BH_120409.mov... 
[snip] 
[11:45:45] libhb: scan thread found 0 valid title(s) 
No title found. 

HandBrake has exited. 

$ echo $? 
0 
+0

我使用HandBrakeCLI -Z的iPod -i 」test.avi「 -o」 的測試。 mov「1>/dev/null 2> grep」編碼完成「&& echo」只有發現編碼完成時纔打印「 – 2013-11-21 21:56:41

回答

1

好消息!看來這個特性即將在HandBrake-CLI 0.10中實現。正如你可以在roadmap上看到的0.10里程碑:

對CLI返回代碼的基本支持。 (0 =沒有錯誤,1 =已取消,2 =無效的輸入,3 =初始化錯誤,4 =未知錯誤 「)

相關問題