こんにちは!サキナオコです^o^
さわやかな季節になりましたね!
ちょっとちょっと、システムが入ったストレージを入れ替えてWindows11入れて、またmp3の結合しようと思ったのですが、ffmpegが入っていないのでまた入れることになり、すっかり忘れていたので、記します。
それと以前書いたmp3の結合法が動作しなくなってました><以下のやり方はffmpegなくても動作するらしいのですが…(ChatGPTによると)この通りにやってみたら、合計時間は合ってましたが、1曲目だけしか入っておらず、ダメダメでした。
なのでまたChatGPTに聞いて動作するようコードを書き換えたものを掲載します。
ffmpegを使うので入れる必要がありますが、そんなに難しいことはありません。
まずはffmpegの入れ方。Windows11 64bit
ffmpegインストール&設定手順
- 公式より https://ffmpeg.org/download.html
左の方にWindowsマークがあるのでその中の
Get packages & executable files—Windows builds by BtbNクリック - githubへ飛ぶ
- win64版「注*ffmpeg-master-latest-win64-gpl-shared.zip」を選択
- ダウンロード、解凍
- できたフォルダの下のフォルダ(binフォルダのすぐ上のフォルダ)の名前をffmpegに変更し、C:(ローカルディスク)下に移動
- パスを通す*binフォルダを右クリック「パスのコピー」選択してコピーする( 私の場合 ”C:\ffmpeg\bin”)
- スタートメニューで「環境変数」と検索 → 「システム環境変数の編集」
- 「環境変数」ボタン → 「Path」を選んで「編集」
- 「新規」 →”C:\ffmpeg\bin” → 「OK」
- 確認 cmdコマンドプロンプトで「ffmpeg -version」*どこで打ってもいいらしい
- ffmpeg versionなんたらかんたらずらずらずら~と出たら成功している
前のコードがなぜダメダメなのか(いやGPTさん、あなたが書いたんですけどね!)、GPTに聞いたらビットレート(例:128kbps, VBR)サンプルレート(例:44.1kHz, 48kHz)チャンネル数(モノラル/ステレオ)がバラバラだと結合できないよ、ってことです。
再エンコード(音は少々劣化するとのことですが私はライブ配信でつなげたいだけなのでいいってことにしました)して安定した結合できるようにコードを書き直してもらいました。
1.merge_mp3_new.pyとしてVSCodeなどにペーストして保存。
import os
import subprocess
from pathlib import Path
def convert_and_merge_mp3(input_folder_path):
input_folder = Path(input_folder_path)
if not input_folder.exists():
print("指定されたフォルダが存在しません。")
return
# 変換後のファイル保存用フォルダ
converted_folder = input_folder / "converted"
converted_folder.mkdir(parents=True, exist_ok=True)
converted_files = []
for i, mp3_file in enumerate(input_folder.glob("*.mp3")):
output_file = converted_folder / f"song{i+1}_fixed.mp3"
cmd = [
"ffmpeg",
"-y",
"-i", str(mp3_file),
"-ar", "44100",
"-ac", "2",
"-ab", "192k",
"-f", "mp3",
str(output_file)
]
subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
converted_files.append(output_file)
# list.txt作成
list_path = converted_folder / "list.txt"
with open(list_path, "w", encoding="utf-8") as f:
for file in converted_files:
f.write(f"file '{file.name}'\n")
# ffmpegで結合
merged_output_path = input_folder / "merged_output.mp3"
concat_cmd = [
"ffmpeg",
"-y",
"-f", "concat",
"-safe", "0",
"-i", str(list_path),
"-ar", "44100",
"-ac", "2",
"-ab", "192k",
str(merged_output_path)
]
subprocess.run(concat_cmd, cwd=str(converted_folder), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(f"結合完了: {merged_output_path}")
if __name__ == "__main__":
folder = input("MP3ファイルが入ったフォルダのパスを入力してください: ")
convert_and_merge_mp3(folder)
2.これで実行して…
そうそう、前回の自分の記事読んで自分でちょっと何言ってるかわからなかったので、読んでくださるみなさまのため、忘れているであろう後の自分のため詳しく書きます。
実行するには2通りで、
A.Windowsのコマンドプロンプト開き、自分のユーザー名のところ(私の場合)でまずpythonと入れて半角スペース入れます。
C:\Users\自分のユーザー名>python
エクスプローラーから
merge_mp3_new.pyファイルをつかんでコマンドプロンプト内にドロップします。
すると自動的にパスが入り、
C:\Users\自分のユーザー名>python C:\Users\自分のユーザー名\Documents\コードフォルダ入れているフォルダ\コードの入ったフォルダ\merge_mp3_new.py
このようになるのでリターンキー押します。すると
MP3ファイルが入ったフォルダのパスを入力してください:
と出るのでさっきと同じくエクスプローラーから結合したい音楽ファイルが入ったフォルダをつかんでコマンドプロンプト内にドロップすると勝手にパスが入ります。
D:\音楽フォルダのある場所\音楽フォルダ
リターンキー押し、一瞬で
結合完了: D:\音楽フォルダのある場所\音楽フォルダ\merged_output.mp3
となってエクスプローラーの音楽フォルダ内見てみると新たにmerged_output.mp3ができています!!
B.もう一つの実行方法*VSCode内でmerge_mp3_new.pyを開いておいて実行ボタン
「MP3ファイルが入ったフォルダのパスを入力してください」と出るので、エクスプローラーからつかんでターミナル内にドロップ、リターンキーおすとできますyo!
スクリプトで結合されるMP3の順番は「ファイル名の辞書順(=アルファベット順・数字順)」です。とのこと。
どっちが早いかなあ?VSCode開いて一回ドラッグドロップするのがいいか、コマンドプロンプト開いてpython 入れてファイルとフォルダいれるのがいいか。
迷っちゃうなあ~
お好きな方で!
今日もありがとう!ChatGPT!!
ではでは!
注*
ffmpeg-master-latest-win64-gpl-shared.zip における gpl とは:
FFmpegが「GPL(GNU General Public License)」でライセンスされるオプション機能を含めてビルドされていますよという意味です。
だそうですね。
lgpl版はゆるいものらしく。
| ビルドタイプ | ライセンス | 主な違い |
|---|---|---|
| gpl | GNU GPL v3 | 特許制限のある高機能コーデック(x264 など)を含められる。商用利用には注意が必要 |
| lgpl | GNU LGPL | より緩いライセンス。リンクは自由。機能制限あり |
| non-free | 独自ライセンス(+GPL) | 特許・非公開ライブラリを含む(例:libfdk-aac)。配布時には制限が多い |
個人利用、ブログ等に掲載する分にはよくて、商用利用の配布等は禁止みたいです。
gplビルドには x264(H.264エンコーダ)や x265(H.265)などの強力なコーデックが含まれている- ただし、それを使ったソフトを再配布するときはGPLを守る必要がある(=ソース公開など)
商用利用の場合はlgplってことですかね。
ということで、gpl版は個人でお楽しみくださいませ。。







コメントを残す