🎵

Pythonで音声を結合する

2022/12/23に公開

この記事は 福島高専 Advent Calendar 2022 23日目の記事です。

1. はじめに

こんにちは、高専5年のAkkunlabです。主にプログラミングや電子工作などをしています。

去年のAdvent Calendarでは「【Socket.IO】PC50台を無線でつなげてアートを作ってみた」というタイトルで、50台のPCを使用したデジタルアートについて記事を書きました。

今回は、動画・音声をPythonで扱う際にとても便利なものがあったので、記事にしていきたいと思います。

読みにくいところがあるかもしれませんが、最後まで読んでいただけたら幸いです。

2. ffmpeg-pythonとは

ffmpeg-pythonとはFFmpegをPythonから使えるようにするためのものです。

https://github.com/kkroening/ffmpeg-python


FFmpeg (エフエフエムペグ) は動画や音声を変換・記録するためのフリーソフトウェアでCUIで操作できます。さらに、「Windows」、「MacOS」、「Linux」など様々なOSにも対応しています。

3. インストール

ffmpeg-pythonを使うには、まずFFmpegをインストールする必要があります。

3.1 FFmpegのインストール

FFmpeg公式ダウンロードページ
https://ffmpeg.org/download.html

Windowsの場合

  1. Windowsマークをクリックし、「Windows builds by BtbN」をクリック。
  2. GitHubのreleasesにある「ffmpeg-master-latest-win64-gpl-shared.zip」をクリックしてダウンロード。
  3. ダウンロードしたzipファイルを解凍し、「bin」にパスを通す。

パスを通すと以下のようにコマンドプロンプトで実行できます。

> ffmpeg -version
ffmpeg version N-109444-geef763c705-20221222 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12.2.0 (crosstool-NG 1.25.0.90_cf9beb1)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --disable-libmfx --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20221222
libavutil      57. 43.100 / 57. 43.100
libavcodec     59. 55.103 / 59. 55.103
libavformat    59. 34.102 / 59. 34.102
libavdevice    59.  8.101 / 59.  8.101
libavfilter     8. 53.100 /  8. 53.100
libswscale      6.  8.112 /  6.  8.112
libswresample   4.  9.100 /  4.  9.100
libpostproc    56.  7.100 / 56.  7.100



他のOSやさらに詳しく知りたい方は以下のページが参考になります。
https://jp.videoproc.com/edit-convert/how-to-download-and-install-ffmpeg.htm#FFmpegのダウンロードとインストール手順

3.2 ffmpeg-pythonのインストール

ffmpeg-pythonをインストールするにはpipを使用します。

pip install ffmpeg-python

4. FFmpegのみで音声結合

  • 1つ目の入力ファイル: input1.mp3
  • 2つ目の入力ファイル: input2.mp3
  • 出力ファイル: output.mp3
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex "concat=n=2:v=0:a=1" output.mp3

-i input.mp3と書くことでファイルを読み込むことができます。

-filter_complexは複合フィルタで、様々なフィルタをかけることできます。
今回は連結するフィルタであるconcatを使用します。

ここでの英字・記号は以下のような意味になります。

英字・記号 意味
n 連結するファイルの組み合わせの数
v 出力する映像の数
a 出力する音声の数
: 区切り

最後にoutput.mp3と出力ファイルを書くことで出力することができます。

5. ffmpeg-pythonで音声結合

  • 1つ目の入力ファイル: input1.mp3
  • 2つ目の入力ファイル: input2.mp3
  • 出力ファイル: output.mp3
audio.py
import ffmpeg
(
    ffmpeg
    .concat(
        ffmpeg.input('input1.mp3'),
	ffmpeg.input('input2.mp3'),
	v=0,
	a=1
    )
    .output('output.mp3')
    .run()
)

はじめに、import ffmpegffmpeg-pythonをインポートします。
丸括弧内にffmpegと書き始め、.でつなげて書くことができます。

ファイル入力はffmpeg.input('input.mp3')で行えます。
ファイル出力は.output('output.mp3')で行えます。

最後に.run()を加えることで完成です。

このプログラムを実行するとoutput.mp3ファイルが出力されます。

6. おわりに

今回は、動画や音声をPythonで扱う際にとても便利なffmpeg-pythonについて紹介しました。

この記事では、ほんの一部の機能しか紹介していませんが、他にもたくさん機能があるので興味のある方はぜひ調べてみてください!

最後まで読んでいただき、ありがとうございました!

7. 参考

Discussion