我正在开发一个系统,在创建 .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