我想将 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。