3

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

为了测试编码失败,我将一个文本文件复制到一个扩展名为 .mov 的文件中,并设置程序尝试对其进行编码。自然,它们都无法对文件进行编码(我不确定在这种情况下“成功”意味着什么......)但是,虽然 ffmpeg 通过将其退出代码设置为 1 来报告此失败,但 HandBrakeCLI 将退出代码设置为 0 ,因为它干净地退出了。这与HandBrakeCLI 文档是一致的, 但它让我想知道如何判断 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
4

2 回答 2

2

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

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

于 2012-04-22T19:00:09.313 回答
1

好消息!看来此功能即将在 HandBrake-CLI 0.10 中实现。正如您在 0.10 里程碑的路线图上看到的:

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

于 2014-09-27T14:37:53.660 回答