Youtube to wav
2024年12月20日
開発理由
趣味で録音をしているのだが、ときどき公式音源が必要になる場面がある。
そんなときは、だいたいネット上の “youtube to wav” サイトを使っていた。
中でも長く使っていたサイトが最近になって急に動かなくなり、
他のサイトはというと、フィッシングまがいだったり、音源ファイルの最後に不要な無音が追加されていたり、
あるいは「◯曲まで」と制限されていて、寄付しないとダウンロードできない曲数に上限がついていたりと、地味にストレスだった。
イラつくなら、お前がやれよ
というある人の言葉を思い出し、俺が自分で作ることにした。
開発過程
Pythonには「こんなライブラリもあるのかよ…」と感心するくらい色んなライブラリが揃っている。
今回使用したのはpydubとyt-dlp。
最初は pytubeとmoviepyを使ってみたけど、
pytubeは最近アップデートが遅れてるのか、
エラー発生: HTTP Error 403: Forbidden
を連発してきたし、moviepyに至っては理由は分からんが、poetryの仮想環境下でimportが通らないという謎のバグに遭遇した。
Traceback (most recent call last):
File "/Users/-/Desktop/Youtube-to-wav/app/main.py", line 2, in <module>
from moviepy.editor import AudioFileClip
ModuleNotFoundError: No module named 'moviepy.editor'
poetry showで確認してpoetry removeして再インストールしてもmodule not found errorが直らず、
結局pydubとyt-dlpに乗り換えることにした。
最終的に完成したコード
import os
from pydub import AudioSegment
from yt_dlp import YoutubeDL
def download_youtube_audio(url, output_path="downloads"):
try:
if not os.path.exists(output_path):
os.makedirs(output_path)
ydl_opts = {
"format": "bestaudio/best",
"outtmpl": os.path.join(output_path, "%(title)s.%(ext)s"),
"postprocessors": [
{
"key": "FFmpegExtractAudio",
"preferredcodec": "wav",
}
],
}
with YoutubeDL(ydl_opts) as ydl:
print("ダウンロード開始...")
info = ydl.extract_info(url, download=True)
print(f"ダウンロード完了: {info['title']}")
wav_path = os.path.join(output_path, f"{info['title']}.wav")
print(f"変換完了: {wav_path}")
return wav_path
except Exception as e:
print(f"エラー発生: {str(e)}")
return None
if __name__ == "__main__":
url = input("YouTubeのURLを入力してください: ")
download_youtube_audio(url)
録音作業は基本的にWindowsでやる派なので、Windows上でクローンしてffmpegをインストールしたあと、テストをしてみたら、しっかり動いてくれた。

ただし、mac環境だとhomebrewで
brew install ffmpeg
とワンクリックで終わるところが、
Windowsでは ffmpeg の公式サイトにアクセスしてダウンロード → フォルダ名を変更 → Cドライブに移動 → 環境変数の設定、とめちゃくちゃ手間がかかる。ここがちょっとだけ面倒だった。
でも、これでもう広告も無音も寄付の催促もなく、俺が欲しいときに、YouTubeの音源をWAVで手に入れられるようになった。
カカオ
グーグル
ネイバー