我正在創建一個系統,用於在創建.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
我使用HandBrakeCLI -Z的iPod -i 」test.avi「 -o」 的測試。 mov「1>/dev/null 2> grep」編碼完成「&& echo」只有發現編碼完成時纔打印「 – 2013-11-21 21:56:41