將 ffmpeg 包裝在 python 函數中從視訊中提取音頻

將 ffmpeg 包裝在 python 函數中從視訊中提取音頻

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

相關內容