Pythonで音声を結合する
この記事は 福島高専 Advent Calendar 2022 23日目の記事です。
1. はじめに
こんにちは、高専5年のAkkunlabです。主にプログラミングや電子工作などをしています。
去年のAdvent Calendarでは「【Socket.IO】PC50台を無線でつなげてアートを作ってみた」というタイトルで、50台のPCを使用したデジタルアートについて記事を書きました。
今回は、動画・音声をPythonで扱う際にとても便利なものがあったので、記事にしていきたいと思います。
読みにくいところがあるかもしれませんが、最後まで読んでいただけたら幸いです。
2. ffmpeg-pythonとは
ffmpeg-pythonとはFFmpegをPythonから使えるようにするためのものです。
FFmpeg (エフエフエムペグ) は動画や音声を変換・記録するためのフリーソフトウェアでCUIで操作できます。さらに、「Windows」、「MacOS」、「Linux」など様々なOSにも対応しています。
3. インストール
ffmpeg-pythonを使うには、まずFFmpegをインストールする必要があります。
3.1 FFmpegのインストール
FFmpeg公式ダウンロードページ
Windowsの場合
- Windowsマークをクリックし、「Windows builds by BtbN」をクリック。
- GitHubのreleasesにある「ffmpeg-master-latest-win64-gpl-shared.zip」をクリックしてダウンロード。
- ダウンロードした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やさらに詳しく知りたい方は以下のページが参考になります。
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
import ffmpeg
(
ffmpeg
.concat(
ffmpeg.input('input1.mp3'),
ffmpeg.input('input2.mp3'),
v=0,
a=1
)
.output('output.mp3')
.run()
)
はじめに、import ffmpeg
でffmpeg-pythonをインポートします。
丸括弧内にffmpeg
と書き始め、.
でつなげて書くことができます。
ファイル入力はffmpeg.input('input.mp3')
で行えます。
ファイル出力は.output('output.mp3')
で行えます。
最後に.run()
を加えることで完成です。
このプログラムを実行するとoutput.mp3
ファイルが出力されます。
6. おわりに
今回は、動画や音声をPythonで扱う際にとても便利なffmpeg-pythonについて紹介しました。
この記事では、ほんの一部の機能しか紹介していませんが、他にもたくさん機能があるので興味のある方はぜひ調べてみてください!
最後まで読んでいただき、ありがとうございました!
Discussion