Envuelva ffmpeg para extraer audio de video en una función de Python

Envuelva ffmpeg para extraer audio de video en una función de Python

Me gustaría incluir ffmpeg en una función de Python para extraer audio de un video. Puedo extraer con éxito audio de videos mp4 en la línea de comando.

ffmpeg -i sourcevideo.mp4 -vn -acodec copy audiotrack.m4a

Pero la siguiente función arroja un error extraño y no puedo encontrar una solución:

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())

Error:

[NULL @ 0x657480] Requested output format 'm4a' is not a suitable output format
pipe:: Invalid argument

¿Qué estoy haciendo mal?

Respuesta1

Encontré la solución. MP4 no puede escribir en una tubería y, por lo tanto, no puede transmitir. Para poder transmitir, debe poder buscar el principio del archivo para escribir el encabezado de salida cuando finalice.

Encontré una solución para solucionar este problema. Simplemente agregue la opción -movflags frag_keyframe+empty_moov.

información relacionada