.mov ファイルが作成されるときに、大量の .mov ファイルを H.264 (HandBrakeCLI を使用) および webm (ffmpeg を使用) に変換するシステムに取り組んでいます。一般的に、物事は非常にうまくいっています。私はちょっとしたエラー検出に夢中です。エンコーディングの 1 つが失敗したかどうかを知りたいので、調査したり、再試行したりできます。
エンコーディングの失敗をテストするために、テキスト ファイルを拡張子 .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 に設定します。しかし、これはかなり野蛮に思えます。たとえば、"Encode done!" というテキストです。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