2012-11-23 2 views
2

저는 ffmpeg를 통해 비디오를 사용자 정의 변환하는 python 스크립트에서 작업하고 있습니다.변환을 끝내지 않고 ffmpeg를 끝내기 전에 pexpect.run()이 종료됩니다.

내 문제는 ffmpeg의 실행이 None 종료 코드로 약간의 변환 (일반적으로 100MB에서 3-4MB) 후에 갑자기 멈추는 것입니다.

나는 pexpect 라이브러리를 사용하고 있습니다. 현재 진행 상황을 확인하지는 않지만 가까운 장래에 진행할 것입니다. 나는이 질문들에 대해 pexpect를 사용하는 것이 맞을 것 같다. FFMPEG and Pythons subprocessGetting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout). 이것은 내가 좋은를 사용하고 (내가이 하나가 정확히 것을 확인했다)

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 실행 시간 초과에 관한 버그로 끝났습니다.

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

는 슬프게도 버그가 정말 오래된)과는 약간의 버그를 해결하는 방법에 대해 설명합니다 (예, 확인하는 것을 잊지) 나는 내가 이전에보고 된 버그를 발견했다. 해결 방법으로 대신 코드를 사용하여 코드를 다시 작성할 수 있습니다.

Albert가 제안한 Popen을 사용하여 코드를 작성 했으므로 여전히 사소한 버그가있는 코드를 사용하는 아이디어가 마음에 들지 않습니다.

pexpect (코드가 안정적으로 보일 경우)로 기회를 잡으러 잠시 기다려 보겠습니다. 도움을

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

감사 : 공식적으로

, 여기 내 작업 코드입니다.