PythonでMP3ファイルを連結するプログラム

Pythonのロゴ

Pythonを使って2つのMP3ファイルを1つに連結するプログラムを紹介します。

このプログラムを作った経緯
MP3レコーダーで録音した音が電池がなくなって途中で切れてしまい、また途中から録音したので音源ファイルが2つに分かれてしまった。なんとかプログラミングで2つのMP3ファイルを1つにできないかと考えてPythonに行きついた。

事前準備

pydubライブラリのインストール

まず、pydubというライブラリをインストールします。

pip3 install pydub

または

pip install pydub

ちなみにわたしはこの準備だけでは動きませんでした。

ffmpeg.exeffprobe.exeという2つの実行ファイルが必要でした。(Windows10環境の場合)
もし、pydubライブラリ使用時に実行エラーが出る場合は、以下の方法を試して下さい。

実行エラーが出る場合の対処

わたしは以下の実行エラーが出ました。

C:\Python37\lib\site-packages\pydub\utils.py:165: RuntimeWarning: Couldn’t find ffmpeg or avconv – defaulting to ffmpeg, but may not work
warn(“Couldn’t find ffmpeg or avconv – defaulting to ffmpeg, but may not work”, RuntimeWarning)
C:\Python37\lib\site-packages\pydub\utils.py:193: RuntimeWarning: Couldn’t find ffprobe or avprobe – defaulting to ffprobe, but may not work
warn(“Couldn’t find ffprobe or avprobe – defaulting to ffprobe, but may not work”, RuntimeWarning)
Traceback (most recent call last):
File “pydub_mp3plus.py”, line 5, in
sound1 = AudioSegment.from_file(“file1.MP3”, “mp3”)
File “C:\Python37\lib\site-packages\pydub\audio_segment.py”, line 665, in from_file
info = mediainfo_json(orig_file)
File “C:\Python37\lib\site-packages\pydub\utils.py”, line 263, in mediainfo_json
res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
File “C:\Python37\lib\subprocess.py”, line 769, in __init__
restore_signals, start_new_session)
File “C:\Python37\lib\subprocess.py”, line 1172, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

ffmpegとffprobeの2つの実行ファイルが見つからないよという意味だと思います。

以下からダウンロードします。

参考 FFmpeg BuildsBuilds - Zeranoe FFmpeg

上記サイトにアクセス後、Download Buildボタンをクリックします。
PythonでMP3ファイルを連結するプログラム

実行ファイルがzip形式でダウンロードされるので必ずウイルスチェックしてください。

解凍後にbinフォルダの中身を開きます。
PythonでMP3ファイルを連結するプログラム

必要なファイルは、ffmpeg.exeffprobe.exeの2つです。
PythonでMP3ファイルを連結するプログラム
以下で紹介するPythonプログラムと同じフォルダにこの2つのファイルをコピーしてください。

2つのMP3ファイルを連結するPythonコード

例として、audio1.mp3audio2.mp3の2つのファイルを連結してaudio.mp3を出力する場合です。

# -*- coding: utf-8 -*-
from pydub import AudioSegment

# MP3ファイルを読み込む
audio1 = AudioSegment.from_file("audio1.mp3", "mp3")
audio2 = AudioSegment.from_file("audio2.mp3", "mp3")

# MP3ファイルを連結する
audio = audio1 + audio2

# 1つのMP3ファイルにして保存
audio.export("audio.mp3", format="mp3")

わたしが試したのは、2つで7分ほどのMP3ファイルでしたが、15秒ほどで連結できました。

ちなみに連結したいファイルが2つである必要はなく、例えば3つならプログラムを次のように変更すればOKです。

# -*- coding: utf-8 -*-
from pydub import AudioSegment

# MP3ファイルを読み込む
audio1 = AudioSegment.from_file("audio1.mp3", "mp3")
audio2 = AudioSegment.from_file("audio2.mp3", "mp3")
audio3 = AudioSegment.from_file("audio3.mp3", "mp3")

# MP3ファイルを連結する
audio = audio1 + audio2 + audio3

# 1つのMP3ファイルにして保存
audio.export("audio.mp3", format="mp3")

読まなくてもいいあとがき

わたしの持っているオリンパスのMP3レコーダーはかなり古いが使い勝手が良いのでいまだに使っている。
USBメモリとしても使えるし、単純に連番でMP3ファイルとして保存される。最近の製品のように余計な機能が付いていないのが良い。

ただ、単4乾電池式で電池の残量表示が今一つはっきりしないのが難点だ。
先日も録音途中で切れてしまった。でも電池が切れる寸前までは残っているので、続きを録音した。
音源ファイルは当然2つに分かれてしまっている。なんとかできないかと考えてネット検索していたのだが、Flashを使っているサイトや変な日本語のサイトが多く、出来るなら使いたくない。
こうしたサイトはウイルス感染の危険が多いためだ。(広告も多いし間違って変なダウンロードボタンをクリックしてしまう危険性があるし

どうせならプログラムで解決できるのではと考えて調べていたら、このPythonライブラリに行きついた。
Pythonって本当にいいですね!(淀川長治風に)

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA