LoginSignup
0
3

More than 1 year has passed since last update.

ffmpeg-python で一時ファイルを使わずに音声生データを読み込む

Posted at

パソコンでエロいことをする時に欠かせないものといえば

ffmpeg です

最近

こういうシリーズをやっていて、音声の生データを機械学習に食べさせるのに色々めんどくさいことをやっていた

今まではこうやってた

エロ動画 -> wav ファイル -> numpy.ndarray という変換をずっとやってた

# wav ファイルを作る
input_stream = ffmpeg.input('input.mp4', ss=start, t=duration)
output_stream = ffmpeg.output(input_stream.audio, 'tmp.wav', ar=16000, ac=1)
ffmpeg.run(output_stream, overwrite_output=True)

try:
    # int16 の numpy.ndarray で読み込む
    sample_rate, wav_data = scipy.wavfile.read('tmp.wav', 'rb')
    wav_data = wav_data / tf.int16.max # int16 -> float64
finally:
    # 読み込んだら消す
    os.remove('tmp.wav')

こうすると wav ファイルの書き出しがいらない

エロ動画 -> numpy.ndarray という変換になり、中間ファイルがいらない

# stdout に音声の生データを書き出し、それをキャプチャする
input_stream = ffmpeg.input('input.mp4', ss=start, t=duration)
output_stream = ffmpeg.output(input_stream.audio, '-', format='s16le', acodec='pcm_s16le', ar=16000, ac=1)
wav_data, _ = ffmpeg.run(output_stream, overwrite_output=True, capture_stdout=True, capture_stderr=True)

# キャプチャした音声の生データを numpy.ndarray にする
wav_data = np.frombuffer(wav_data, dtype=np.int16)
wav_data = wav_data / tf.int16.max

実行速度も速くなった

ディスクアクセスが減ったからだと思う

まとめ

エロい男は ffmpeg 使いが上手ということですね。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3