2014-10-01 4 views
0

Popen(shlex.split(command)을 사용하여 퀵타임 mov 파일에서 wav 파일을 저장하고 ffmpeg 로그 파일을 저장하는 ffmpeg 명령을 실행합니다. 동시. 나는이를 사용하는 경우 :파이썬 - Popen (shlex.split (command), shell = False) - ffmpeg와 작동하지 않습니다.

command = './ffmpeg/ffmpeg -i /Users/me/Documents/MOVS/source.mov -map 0:1 -acodec pcm_s16le -y /Users/me/Documents/MOVS/source_01.wav' 

p = Popen(shlex.split(command), shell=False) 

그런 다음 명령이 제대로 완료,하지만 난 내가 사용하는, 그래서 만약 더 이상 작동 후 로그 파일을 저장하지 않는 줄을 추가하는 경우 :

다음
command = './ffmpeg/ffmpeg -i /Users/me/Documents/MOVS/source.mov -map 0:1 -acodec pcm_s16le -y /Users/me/Documents/MOVS/source_01.wav 2> /Users/me/Documents/MOVS/lofFile.txt' 

p = Popen(shlex.split(command), shell=False) 

이 없음 더 오래 작동합니다. 파이썬없이 명령 행에서 명령을 사용하면 정상적으로 작동합니다. 난 그냥 사용하는 경우 :

p = Popen(command, shell=True) 

을 모든 잘 작동하지만 다른 이유로 shell=False를 사용해야합니다.

그것의 '올바른'최종 줄을 추가하여 나누기 왜 그냥 이해할 수 없다 2> /Users/me/Documents/MOVS/lofFile.txt

+0

내가 틀렸다고 정정하되 올바른 구문 '2>'이 아니겠습니까? ('> 2'보다는) –

+0

귀하의 권리, 미안, 그냥 잘못 입력. 질문이 업데이트되었습니다. – speedyrazor

답변

3

IO 리디렉션 당신이 shell=False를 설정하면 명령이 실행되지 않습니다 따라서, 쉘에 의해 제공됩니다 쉘을 사용하고 >2 ....이 명령의 일부를 구성합니다.

아마도 해결 방법으로 ffmpeg-report 옵션을 사용해 볼 수 있습니다. 그러면 ffmpeg-YYYYMMDD-HHMMSS.log 규칙에 따라 명명 된 파일로 로깅을 보냅니다.

+0

완벽한 답변 감사합니다. – speedyrazor

관련 문제