비디오에서 오디오를 추출하기 위해 Python 함수에 ffmpeg를 래핑하고 싶습니다. 명령줄을 통해 mp4 비디오에서 오디오를 성공적으로 추출할 수 있습니다.
ffmpeg -i sourcevideo.mp4 -vn -acodec copy audiotrack.m4a
하지만 아래 함수에서 이상한 오류가 발생하여 해결책을 찾을 수 없습니다.
def extractAudioTrack(self,inputFilename):
print "extract audio from of: " + inputFilename
command = [ FFMPEG_BIN,
'-i', inputFilename,
'-vn',
'-acodec', 'copy',
'-f', 'm4a',
'-'
]
pipe = sp.Popen(command, stdout = sp.PIPE)
return StringIO(pipe.proc.stdout.read())
오류:
[NULL @ 0x657480] Requested output format 'm4a' is not a suitable output format
pipe:: Invalid argument
내가 도대체 뭘 잘못하고있는 겁니까?
답변1
해결책을 찾았습니다. MP4는 파이프에 쓸 수 없으므로 스트리밍할 수 없습니다. 스트리밍하려면 파일 시작 부분을 다시 검색하여 파일이 완료되었을 때 출력 헤더를 쓸 수 있어야 합니다.
이 문제를 해결할 해결책을 찾았습니다. -movflags frag_keyframe+empty_moov 옵션을 추가하기만 하면 됩니다.