我正在开发一个系统,在创建.mov文件时,将大量的.mov文件转换为H.264 (使用HandBrakeCLI)和webm (使用ffmpeg)。总的来说,事情进展得很好。我被错误检测挂断了。我想知道是否其中一个编码失败了,以便我们可以调查,再试,等等。
为了测试编码失败,我将一个文本文件复制到一个带有.mov扩展的文件中,并设置有关尝试对其进行编码的程序。当然,它们都不能对文件进行编码(我不确定在这种情况下“成功”意味着什么.)然而,虽然ffmpeg通过将其退出代码设置为1来报告此故障,但HandBrakeCLI将退出代码设置为0,因为它完全退出。这与HandBrakeCLI文档是一致的,但它让我想知道如何判断HandBrakeCLI是否知道它是否没有编码。同样的文档页建议“如果您想监视手闸的过程,您应该监视标准管道”,所以我现在通过这样的操作获得了我想要的效果:
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发布于 2012-04-22 19:00:09
简短的回答是否定的,你可以在HandBrake论坛https://forum.handbrake.fr/viewtopic.php?f=12&t=18559&p=85529&hilit=return+code#p85529上找到详细的解释。
加载项:--我认为有一个来自用户fonkprop的补丁被开发人员拒绝了,如果你真的需要的话,可以联系那个家伙。
发布于 2014-09-27 14:37:53
好消息!这一特性似乎即将在手制动器-CLI 0.10中实现。您可以在路线图上阅读0.10里程碑的内容:
对CLI返回代码的基本支持。(0 =无错误,1=取消,2=无效输入,3=初始化错误,4=未知错误“)
https://stackoverflow.com/questions/10092609
复制相似问题