2012-11-23 90 views
2

我正在處理一個通過ffmpeg自定義轉換視頻的python腳本。pexpect.run()在結束ffmpeg之前終止,無需完成轉換

我的問題是ffmpeg的執行在一個無退出代碼的位轉換後(通常爲100mb的3-4mb)突然停止。我正在使用pexpect庫。目前我不檢查進度,但我會在不久的將來。對於這些問題FFMPEG and Pythons subprocessGetting 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 

當然我也試過在命令行上相同的命令,它工作正常。

任何線索可能發生什麼?

+1

爲什麼選擇pexpect?如果從子流程使用Popen會怎麼樣? – Albert

+0

@albert我會試試它知道。我不太喜歡這個解決方案,因爲在「下一次迭代」中,我應該使用pexpect來檢查操作的進度。但我會嘗試並在 – Davisein

+0

中發佈結果。我將一直工作到轉換結束,但它似乎正在工作。但我仍然不太喜歡這個解決方案,我可能會在幾周內面臨同樣的問題... – Davisein

回答

0

問題最終成爲關於超時的pexpect運行函數中的一個錯誤。我發現在我之前所報告的bug(是的,我忘了檢查;))

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

可悲的錯誤是真的老了,並解釋瞭如何解決小蟲子。作爲一種解決方法,我可以用spawn重寫我的代碼。

我不太喜歡使用代碼的想法,這些代碼仍然沒有維護,因此我使用Popen編寫了代碼,就像Albert建議的一樣。

我會等待一段時間,以選擇與pexpect(如果代碼似乎可靠)的機會。

爲了記錄在案,這裏是我的工作代碼:

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

感謝您的幫助。

相關問題