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