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”)です。定時退社のアイズなど終業時にでもご利用ください。↓
お役に立てると幸いです。
コメント