2

私は、ffmpeg を介してビデオのカスタム変換を行う python スクリプトに取り組んでいます。

私の問題は、少しの変換 (通常は 100 MB のうち 3 ~ 4 MB) の後、終了コードなしで ffmpeg の実行が突然停止することです。

pexpectライブラリを使用しています。現在は進捗状況を確認していませんが、近いうちに確認します。これらの質問FFMPEG and Pythons subprocessおよびGetting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout)に関して、私は pexpect を正しく使用しているようです。これは私が実行しているコマンドです(正確にこれであることを確認しました)

nice ffmpeg -i '/full/path' -s 640x360 -strict experimental -vcodec libx264
   -f mp4 -  coder 0 -bf 0 -refs 1 -flags2 -wpred-dct8x8 -level 30 -crf 26
   -bufsize 4000k -maxrate 350k -preset medium -acodec libvo_aacenc
   -ar 48000.0 -ab 128K -threads 2 -y '/full/path/out'

私はナイスを使用していますが、それなしでも試してみましたが、結果は同じになりました。

私はこの方法で pexpect を実行しています:

output, exit = pexpect.run(self.command(), withexitstatus=True,\
                                   logfile=logfile)
print output
print exit

もちろん、コマンドラインで同じコマンドを試してみましたが、うまくいきました。

何が起こっているのか手がかりはありますか?

4

1 に答える 1

0

問題は、タイムアウトに関する pexpect run 関数のバグでした。以前に報告されたバグを発見しました (はい、確認するのを忘れていました ;))

http://sourceforge.net/tracker/?func=detail&aid=3316509&group_id=59762&aid=492077

悲しいことに、バグは本当に古く、小さなバグを解決する方法が説明されています。回避策として、代わりに spawn を使用してコードを書き直すことができます。

まだメンテナンスされていない些細なバグを含むコードを使用するという考えはあまり好きではないので、Albert が提案したように Popen を使用してコードを書きました。

pexpect でチャンスをつかむ選択をするまでしばらく待ちます (コードが信頼できると思われる場合)。

記録のために、ここに私の作業コードがあります:

    output = file(LOG_FILE, 'a')
    args = shlex.split(self.command_video())
    return subprocess.call(args, stdout=output, stderr=output)

助けてくれてありがとう。

于 2012-11-24T18:32:43.420 に答える