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-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を再生しても何ら問題ありません。