ビデオからオーディオを抽出するために、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 を追加するだけです。