有没有一个很好的方法来判断HandBrakeCLI是否实际编码了什么?

时间:2012-04-10 16:24:32

标签: video-encoding

我正在开发一个系统,可以在创建.mov文件时将一堆.mov文件转换为H.264(使用HandBrakeCLI)和webm(使用ffmpeg)。总的来说,情况进展顺利。我挂了一点错误检测。我想知道其中一个编码是否失败,以便我们可以调查,再试一次等​​等。

为了测试编码失败,我将文本文件复制到一个扩展名为.mov的文件中,并设置有关尝试编码的程序。当然,它们都无法对文件进行编码(我不确定在此上下文中“成功”意味着什么...)但是,当ffmpeg通过将其退出代码设置为1来报告此失败时,HandBrakeCLI将退出代码设置为0 ,因为它干净利落地退出。这与HandBrakeCLI documentation一致,但它让我想知道如何判断HandBrakeCLI是否无法编码任何东西。同样的文档页面建议“如果你想监控HandBrake的过程,你应该监控标准管道”,所以我现在通过做这样的事情来获得我想要的效果:

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

grep然后将退出代码设置为0(如果找到匹配),如果不匹配则设置为1。但是,这似乎相当野蛮:例如,文字“编码完成!”可能会在未来的HandBrake版本中发生变化。

那么,任何人都有更好的方法来判断HandBrake是否编码了某些东西?

下面包含一些已编辑的shell输出以供参考...

$ 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

2 个答案:

答案 0 :(得分:2)

简短回答是否定的,你可以在HandBrake论坛https://forum.handbrake.fr/viewtopic.php?f=12&t=18559&p=85529&hilit=return+code#p85529

找到详细的解释

<强> adddition: 我认为有一个来自用户fonkprop的补丁被开发人员拒绝,如果你真的需要它联系那个人

答案 1 :(得分:1)

好消息!看来这个功能即将在HandBrake-CLI 0.10中实现。您可以在roadmap上阅读0.10里程碑:

  

CLI对返回码的基本支持。 (0 =无错误,1 =已取消,2 =无效输入,3 =初始化错误,4 =未知错误“)