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

関連情報