PR

Pythonでmp3ファイルをフェーズイン・フェーズアウトしたファイルの作成【windows10】

スポンサーリンク
この記事は約9分で読めます。
環境:
windows10 64bit home 1909
anoconda3
Python3.7

Pythonのコードでフェーズイン・フェーズアウト

 

長い音声ファイルを徐々にフェーズアウトできるようにしてみたく、作成しました。

調べてみると、Python3.7 で作成できるようでしたので、pydubで作成してみることに・・

でも、pydubだけではエラーが出力されました、備忘録として残します。

前提条件として以下が必要です。

・pydubインストール

・ffmpegのダウンロード
・ffmpeg展開
・ffmpegパス設定
・ffmpegインストール

pydubをインストール

pip install pydub

正常にインストールされれば、以下のように「Successfully」と表示されます。

(base) C:\Users\ユーザー名\PycharmProjects\bell>pip install pydub
Collecting pydub
  Downloading https://files.pythonhosted.org/packages/79/db/eaf620b73a1eec3c8c6f8f5b0b236a50f9da88ad57802154b7ba7664d0b8/pydub-0.23.1-py2.py3-none-any.whl
Installing collected packages: pydub
Successfully installed pydub-0.23.1

 

音声ファイルの読み込み

mp3_sound = AudioSegment.from_mp3("hotaru.mp3")

するとどうやら、ffmpegとffprobe必要らしいエラーが出ました。


RuntimeWarning:ffmpegまたはavconvが見つかりませんでした-デフォルトはffmpegですが、動作しない可能性があります。

C:\Users\ユーザー名\Anaconda3\python.exe C:/Users/ユーザー名/PycharmProjects/bell/test.py
C:\Users\ユーザー名\Anaconda3\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:\Users\ユーザー名\Anaconda3\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 "C:/Users/ユーザー名/PycharmProjects/bell/test.py", line 10, in 
    mp3_sound = AudioSegment.from_mp3("hotaru.mp3")
  File "C:\Users\ユーザー名\Anaconda3\lib\site-packages\pydub\audio_segment.py", line 716, in from_mp3
    return cls.from_file(file, 'mp3', parameters=parameters)
  File "C:\Users\ユーザー名\Anaconda3\lib\site-packages\pydub\audio_segment.py", line 665, in from_file
    info = mediainfo_json(orig_file)
  File "C:\Users\ユーザー名\Anaconda3\lib\site-packages\pydub\utils.py", line 263, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "C:\Users\ユーザー名\Anaconda3\lib\subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "C:\Users\ユーザー名\Anaconda3\lib\subprocess.py", line 1178, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

Process finished with exit code 1

参考サイト:https://qiita.com/satoshi2nd/items/4f6814b795a772af4af0
https://ffmpeg.zeranoe.com/builds/

ffmpegのダウンロードとパス設定

FFmpeg Buildsをダウンロード

https://ffmpeg.zeranoe.com/builds/からDownload BuildsをクックしてZipファイルをダウンロードします。

Zipファイルの展開

ダウンロードしたZipファイルを好きな場所に置いて展開します。

私は、Dドライブ置いて展開しました。↓

 

展開されたファイル「ffmpeg-20200227-9b22254-win64-static」が表示されるのでその中の「bin」ファイルを開くと「見つからない!」とエラーが出力された「ffmpeq」と「ffprobe」がありましたので、「bin」を読み込めるようにパスの設定をします。

 

 

パスの設定

binファルダを環境変数に設定します。

今回は、Dフォルダに展開したので、環境変数のpathに以下を追加しました。

D:\ffmpeg-20200227-9b22254-win64-static\ffmpeg-20200227-9b22254-win64-static\bin

 

環境変数の設定方法は以前ご紹介しましたので設定方法が解らない場合は環境変数の設定方法を参考にしpathを追加をしてください。

 

次にPycharmを再起動して Python本体に「ffmpeg」をインストールします。

Pythonにffmpegをインストール

pip install ffmpeg-python

0.2.0がインストールされました。

(base) C:\Users\ユーザー名\PycharmProjects\bell>pip install ffmpeg-python
Collecting ffmpeg-python
  Downloading https://files.pythonhosted.org/packages/d7/0c/56be52741f75bad4dc6555991fabd2e07b432d333da82c11ad701123888a/ffmpeg_python-0.2.0-py3-none-any.whl
Requirement already satisfied: future in c:\users\chiraura\anaconda3\lib\site-packages (from ffmpeg-python) (0.17.1)
Installing collected packages: ffmpeg-python
Successfully installed ffmpeg-python-0.2.0

pydubでフェーズイン・フェーズアウト・ファイル分割

フェーズイン・フェーズアウト

・音声ファイルの読み出し

・フェーズイン3秒に指定、フェーズアウト90秒に指定

・作成したファイルの書き出し

from pydub import AudioSegment

sound = AudioSegment.from_file("hotaru.mp3", "mp3")
sound1 = sound.fade_in(3000).fade_out(90000)
sound1.export("hotaru_f.mp3", format="mp3")

終わりの90秒でフェードアウトしても再生時間が長かったので、再生時間を調べてみました。

再生時間の調べ方

・ファイル読み込み

・再生時間取得

・取得したファイル時間を表示

# mp3 ファイル読み込み
sound = AudioSegment.from_file("hotaru1.mp3", "mp3")
#再生時間取得
time = sound.duration_seconds
print('ファイルの再生時間', time)

結果↓

ファイルの再生時間 156.0148752834467

これでは全体のファイルが長すぎたので、ファイルを分割して、一旦書き込んでみました。

ファイル分割

・mp3のファイル読み込み

・ファイル分割

・抽出したファイルの再生時間の取得

・再生時間の表示

# mp3 ファイル読み込み
sound = AudioSegment.from_file("hotaru1.mp3", "mp3")
# 始めから90秒まで抽出
sound1 = sound[0:90000]
# 再生時間の取得
time = sound1.duration_seconds
print('抽出したファイルの再生時間', time)

結果↓は、90秒になっていました。

抽出したファイルの再生時間 90.0

 

完成した全てのコード

分割したファイルをフェードイン・フェードアウトした全体のコードは以下の通りです。

・音声ファイルの読み込み

・ファイルを分割してデータ抽出

・フェーズイン・フェーズアウトの設定

・作成したファイルの書き出し

from pydub import AudioSegment

# mp3 ファイル読み込み
sound = AudioSegment.from_file("hotaru1.mp3", "mp3")
# 始めから90秒まで抽出
sound1 = sound[0:90000]
# 最初の3秒でフェードイン・80秒後からフェードアウト
sound2 = sound1.fade_in(3000).fade_out(80000)
# ファイルの書き込み
sound2.export("hotaru_f.mp3", format="mp3")

 

分割する前のファイル(蛍の光)の 再生時間は、(2’36”)です。↓

分割後フェーズイン・フェーズアウトしたファイル

再生時間は、(1’30”)です。定時退社のアイズなど終業時にでもご利用ください。↓

お役に立てると幸いです。

コメント

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