ffmpeg-pythonによりWAVをMP3に変換する【Python】

ffmpeg-pythonによりWAVをMP3に変換する【Python】 プログラミング

Pythonを使って、WAVをMP3に変換する必要が出てきたとします。
この場合、あなたならどうしますか?

残念ながら、Python単独では無理です。
そのため、FFmpegの力を借りることになります。

つまり、PythonからFFmpegを利用するということです。
そして、そのための手段がPythonでは何個か用意されています。

今回は、その手段の一つであるffmpeg-pythonを利用します。
ffmpeg-pythonによって、WAVをMP3に変換することをゴールとしましょう。

本記事の内容

  • ffmpeg-pythonとは?
  • ffmpeg-pythonのシステム要件
  • ffmpeg-pythonのインストール
  • ffmpeg-pythonでWAVをMP3に変換する

それでは、上記に沿って解説していきます。

ffmpeg-pythonとは?

ffmpeg-pythonとは、Python製のFFmpegラッパーです。
ffmpeg-pythonは、FFmpegを操作するための便利ライブラリとも言えます。

したがって、FFmpegでできることはほとんど可能でしょう。
その機能の一部が、以下となります。

  • 動画を音声に変換する(音声抽出)
  • 動画を画像に変換する
  • 音声を動画に変換する
  • 動画フォーマットを変換する
  • 音声フォーマットを変換する

上記は、ffmpeg-pythonでも対応しています。

プログラムとFFmpegを連携させるなら、ffmpeg-pythonが役に立つでしょう。
エラー処理は、コマンドだけで実行する場合より容易にできそうです。

以上、ffmpeg-pythonについての説明でした。
次は、ffmpeg-pythonのシステム要件を確認します。

ffmpeg-pythonのシステム要件

現時点(2021年4月)でのffmpeg-pythonの最新バージョンは、0.2.0となります。
この最新バージョンは、2019年7月6日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

そして、サポート対象となるPythonのバージョンは以下。

  • Python 2.7
  • Python 3.3
  • Python 3.4
  • Python 3.5
  • Python 3.6

Python 3.7以降は、単純にテストしていないだけでしょう。
そもそも、ffmpeg-python自体が長らく更新されていません。

でも、Python 3.6以降は問題なく動くはずです。
実際、私は以下のバージョンで検証しています。

>python -V
Python 3.9.4

普通の環境であれば、特に問題ないでしょう。
重要になるのは、FFmpegです。

FFmpegがインストールされていることが、今回は必須の条件となります。
ライブラリの名前に「ffmpeg」と入っているぐらいです。

簡単に言うと、以下のコマンドが動けばOK。

ffmpeg -version

macOS・LinuxへのFFmpegのインストールは、次の記事で解説しています。

WindowsへのFFmpegのインストールは、次の記事で解説しています。

「FFmpegのダウンロード・インストール」で詳細を説明しています。

以上、ffmpeg-pythonのシステム要件についての説明でした。
次は、ffmpeg-pythonをインストールしていきましょう。

ffmpeg-pythonのインストール

最初に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
pip        21.0.1
setuptools 56.0.0

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、ffmpeg-pythonのインストールです。
ffmpeg-pythonのインストールは、以下のコマンドとなります。

pip install ffmpeg-python

インストールには、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package       Version
------------- -------
ffmpeg-python 0.2.0
future        0.18.2
pip           21.0.1
setuptools    56.0.0

依存しているのは、futureパッケージだけです。
futureは、Python 2とPython 3の互換性を持たせるためのモノになります。

そのため、多くのライブラリが依存しています。
常連パッケージと言えます。

以上、ffmpeg-pythonのインストールが完了しました。
では、実際にffmpeg-pythonを使ってWAVをMP3に変換してみましょう。

ffmpeg-pythonでWAVをMP3に変換する

最初に、WAVファイルを用意します。
test.wavとします。

このtest.wavをMP3に変換するコードは、以下。

import ffmpeg

# 入力
stream = ffmpeg.input("test.wav")

# 出力
stream = ffmpeg.output(stream, "test.mp3")

# 実行
ffmpeg.run(stream)

変換(出力)の関数に違和感を感じます。
普通なら、「f=”mp3″」や「format=”mp3″」というオプション付きで変換します。
公式マニュアルを探しても、そのようなオプション指定はありません。

どうやら、ffmpeg-pythonではファイル名の拡張子「.mp3」で判断しているようです。
実際に、それで上手くWAVからMP3に変換できています。

上記コードを実行すると、コンソールに以下が表示されます。

Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'test.wav':
  Duration: 00:01:01.13, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'test.mp3':
  Metadata:
    TSSE            : Lavf58.45.100
    Stream #0:0: Audio: mp3 (libmp3lame), 16000 Hz, mono, s16p
    Metadata:
      encoder         : Lavc58.91.100 libmp3lame
[libmp3lame @ 000002b1af464880] Trying to remove 576 samples, but the queue is empty
size=     180kB time=00:01:01.16 bitrate=  24.1kbits/s speed= 391x    
video:0kB audio:179kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.122477%

上記表示を見る限り、適切にMP3に変換されていることがわかります。
もちろん、サイズ容量も削減できています。

test.mp3を再生しても何ら問題ありません。

タイトルとURLをコピーしました