使用 Python 函数包装 ffmpeg,从视频中提取音频

使用 Python 函数包装 ffmpeg,从视频中提取音频

我想将 ffmpeg 包装在一个 python 函数中,以便从视频中提取音频。我可以在命令行上成功从 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。

相关内容