ふと「YouTubeの動画をまとめてダウンロードしたい」と思い立ち、Pythonで一括ダウンロードツールを作りました。GUI付きで操作も簡単、MP3変換にも対応しています。ソースコードをそのまま公開するので、同じものを作りたい方はコピペで使えます。
完成したツールの機能
✅ 複数URLを一括ダウンロード(1行に1URLで貼り付けるだけ)
✅ MP3変換に対応(チェックボックスで切り替え)
✅ 進捗をリアルタイムで表示
✅ GUI付きなのでコマンドライン不要
✅ exe化すればPython環境がなくても動く
必要なもの
1
Python
公式サイトからインストール。バージョンは3.8以上推奨。
公式サイトからインストール。バージョンは3.8以上推奨。
2
yt-dlp
YouTubeダウンロードのライブラリ。
YouTubeダウンロードのライブラリ。
pip install yt-dlp でインストール。
3
ffmpeg(MP3変換に必要)
BtbN/FFmpeg-Builds から
BtbN/FFmpeg-Builds から
ffmpeg-master-latest-win64-gpl-shared.zip をダウンロードして解凍。binフォルダのパスをコード内に指定する。
ソースコード
ffmpeg_location の部分は自分の環境に合わせて変更してください。
import yt_dlp
import os
import tkinter as tk
from tkinter import messagebox, scrolledtext
def download(urls, mode, log_widget):
os.makedirs("downloads", exist_ok=True)
if mode == "mp3":
ydl_opts = {
'outtmpl': 'downloads/%(title)s.%(ext)s',
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'ffmpeg_location': r'C:\path\to\ffmpeg\bin', # ここを変更
}
else:
ydl_opts = {
'outtmpl': 'downloads/%(title)s.%(ext)s',
'format': 'best',
}
for i, url in enumerate(urls, 1):
url = url.strip()
if not url:
continue
log_widget.insert(tk.END, f"[{i}/{len(urls)}] ダウンロード中: {url}\n")
log_widget.see(tk.END)
root.update()
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
log_widget.insert(tk.END, f"✅ 完了\n")
except Exception as e:
log_widget.insert(tk.END, f"❌ エラー: {e}\n")
log_widget.see(tk.END)
root.update()
def on_download():
raw = url_text.get("1.0", tk.END).strip()
urls = [u for u in raw.splitlines() if u.strip()]
if not urls:
messagebox.showwarning("エラー", "URLを入力してください")
return
log_text.delete("1.0", tk.END)
mode = "mp3" if mp3_var.get() else "video"
download(urls, mode, log_text)
log_text.insert(tk.END, "\n🎉 全て完了!downloadsフォルダを確認してください\n")
root = tk.Tk()
root.title("YouTube 一括ダウンロード")
root.geometry("560x480")
tk.Label(root, text="YouTube URL(1行に1つ):").pack(pady=5)
url_text = scrolledtext.ScrolledText(root, width=65, height=8)
url_text.pack(pady=5)
mp3_var = tk.BooleanVar()
tk.Checkbutton(root, text="MP3としてダウンロード", variable=mp3_var).pack(pady=5)
tk.Button(root, text="一括ダウンロード", command=on_download,
bg="green", fg="white", font=("", 12)).pack(pady=10)
tk.Label(root, text="進捗:").pack()
log_text = scrolledtext.ScrolledText(root, width=65, height=8, state="normal")
log_text.pack(pady=5)
root.mainloop()
exe化してPython不要にする
PyInstallerを使えばexeファイルに変換できます。Python環境がない人にも配布できます。
pip install pyinstaller
pyinstaller --onefile --windowed youtube_dl.py
完了すると dist フォルダの中に youtube_dl.exe が生成されます。
詰まったポイント
ffmpegのパスが通らない
wingetでインストールしても認識されないことがありました。BlueStacksのffmpegが先に見つかってしまい、MP3変換に必要なエンコーダーが入っていないバージョンだったのが原因。BtbNのビルドを直接ダウンロードして解決しました。
Unknown encoder ‘libmp3lame’ エラー
BlueStacksに同梱されているffmpegはMP3エンコーダーが含まれていないビルドでした。GPL版のffmpegを使うことで解決しました。
まとめ
yt-dlpとtkinterを使えば、GUI付きのYouTube一括ダウンロードツールを短時間で作れます。ffmpegのパス問題だけ注意すれば、あとはコードをコピペするだけで動きます。PyInstallerでexe化すればPython環境がない環境でも使えるので、自分用ツールとして普段使いできます。
