Envolva o ffmpeg para extrair o áudio do vídeo em uma função python

0

Eu gostaria de envolver o ffmpeg em uma função python para extrair o áudio do vídeo. Eu posso extrair com sucesso 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?

    
por Jabb 28.01.2016 / 22:59

1 resposta

1

Encontrou a solução. MP4 não pode gravar em um pipe e, portanto, não pode transmitir. Para poder transmitir, ele precisa ser capaz de buscar de volta no 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.

    
por 29.01.2016 / 08:37