Distinction2000のmp3ファイルを結合
Distinction2000でダウンロードしてきた単語が単語,例文ごとに細かく分けられていたので,結合してみた.ffmpegが使える環境が必要.以下は,ubuntu22.04で実行.
プログラムの中身
- 最初の4桁の数字が同じファイルを1つにまとめる.4桁の数字の次の数字の順にならべる.
- ファイル名は4桁の数字_単語名.mp3
- TAG付けは,曲名=ファイル名,アーティスト=atsu,アルバム=Distinction2000
- 出力先はoutputと言う名のディレクトリ
ChatGPTにお願いして作成したpythonコード
import os import re import subprocess import eyed3 def embed_tags(file_path, title, artist="atsu", album="Distinction2000"): audiofile = eyed3.load(file_path) if not audiofile.tag: audiofile.initTag() audiofile.tag.title = title audiofile.tag.artist = artist audiofile.tag.album = album audiofile.tag.save() def merge_and_tag(prefix): # カレントディレクトリ内の該当するMP3ファイルを取得 mp3_files = [f for f in os.listdir() if f.endswith('.mp3') and f.startswith(f'{prefix}.')] # prefix の後に続く英単語を抽出 word_match = next((re.search(f'{prefix}\.0 (\w+)', f) for f in mp3_files if f.startswith(f'{prefix}.0 ')), None) if not word_match: print(f"No matching file found for prefix {prefix}!") return word = word_match.group(1) # prefix の後に続く数字でソートするための関数 def sorting_key(filename): match = re.search(f'{prefix}\.(\d+)', filename) if match: return int(match.group(1)) return float('inf') # 数字がない場合、最後になるようにする # ソート files_to_merge = sorted(mp3_files, key=sorting_key) # 出力ディレクトリとファイル名 output_dir = "output" output_file = os.path.join(output_dir, f"{prefix}_{word}.mp3") # 出力ディレクトリが存在しない場合、作成 if not os.path.exists(output_dir): os.makedirs(output_dir) # ffmpeg コマンドを構築 input_files_str = " ".join([f"-i \"{f}\"" for f in files_to_merge]) cmd = f"ffmpeg {input_files_str} -filter_complex concat=n={len(files_to_merge)}:v=0:a=1 -acodec libmp3lame {output_file}" # コマンドの実行 subprocess.call(cmd, shell=True) # タグ埋め込み embed_tags(output_file, f"{prefix}_{word}") # 0004 から 0007 までの処理 for i in range(1, 2001): merge_and_tag(str(i).zfill(4))