Gostaria de envolver o ffmpeg em uma função python para extrair áudio do vídeo. Posso extrair com êxito o áudio de vídeos mp4 na linha de comando.
ffmpeg -i sourcevideo.mp4 -vn -acodec copy audiotrack.m4a
Mas a função abaixo gera um erro estranho e não consigo encontrar uma solução:
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())
Erro:
[NULL @ 0x657480] Requested output format 'm4a' is not a suitable output format
pipe:: Invalid argument
O que estou fazendo de errado?
Responder1
Encontrei a solução. MP4 não pode gravar em um canal e, portanto, não pode transmitir. Para poder transmitir, ele precisa ser capaz de retornar ao início do arquivo para gravar o cabeçalho de saída quando terminar.
Eu encontrei uma solução para corrigir isso. Basta adicionar a opção -movflags frag_keyframe+empty_moov.