Q&A
前提
Pythonを使ってYouTubeから動画をダウンロードするアプリを作成しています。
使っているライブラリはyt_dlpです。
実現したいこと
GUIで指定したディレクトリに動画をダウンロードさせたいです。
発生している問題
'[ファイルパス]%(title)s.%(ext)s'の書式を使い、ファイルパス部分をfile2.get()にしても指定したフォルダにダウンロードできず、ソースコードと同じフォルダに保存されてしまいます。
さらに、ファイルの先頭に[file2.get()]が入ってしまいます。
該当のソースコード
Python
1# インポート 2import sys, os 3from yt_dlp import YoutubeDL 4from tkinter import Tk, StringVar,ttk,filedialog,messagebox,LEFT 5 6# 参照ボタンクリック時 7def ref_clicked(): 8 iDir = os.path.abspath(os.path.dirname(__file__)) 9 save_dir = filedialog.askdirectory(initialdir=iDir) 10 file2.set(save_dir) 11 12# スタートボタンクリック時 13def start_clicked(fp): 14 if fp: 15 ydl_opts = { 16 'outtmpl':'%(title)s.%(ext)s', 17 'format':'best' 18 } 19 with YoutubeDL(ydl_opts) as ydl: 20 ydl.download([file1.get()]) 21 # 完了メッセージを表示 22 messagebox.showinfo("完了", "処理が完了しました。") 23 24### GUI ### 25if __name__ == '__main__': 26 # ウィンドウの設定 27 root = Tk() 28 root.title("YouTubeの動画のURLを入力してください。") 29 root.resizable(False, False) 30 31 # Frame1の作成 32 frame1 = ttk.Frame(root, padding=10) 33 frame1.grid(row=0) 34 35 # ファイルラベルの作成 36 s_file = StringVar() 37 label1 = ttk.Label(frame1, text='URL') 38 label1.grid(row=0, column=0) 39 40 # 参照パスラベルの作成 41 file1 = StringVar() 42 file1_entry = ttk.Entry(frame1, textvariable=file1, width=50) 43 file1_entry.grid(row=0, column=2) 44 45 # frame2の作成 46 frame2 = ttk.Frame(root, padding=(0, 5)) 47 frame2.grid(row=1) 48 49 # ディレクトリ選択スペースの作成 50 s_dir = StringVar() 51 label2 = ttk.Label(frame2, text='保存場所') 52 label2.grid(row=0, column=1) 53 file2 = StringVar() 54 entry2 = ttk.Entry(frame2, textvariable=file2, width=50) 55 entry2.grid(row=0, column=2) 56 57 # 参照ボタンの作成 58 refbutton = ttk.Button(frame2, text='参照', command=lambda: ref_clicked()) 59 refbutton.grid(row=0, column=3) 60 61 #frame3の作成 62 frame3 = ttk.Frame(root, padding=10) 63 frame3.grid(row=2) 64 65 66 # Startボタンの作成 67 stButton = ttk.Button(frame3, text='実行', command=lambda: start_clicked(fp=file1.get())) 68 stButton.pack(side=LEFT) 69 70 # Cancelボタンの作成 71 button3 = ttk.Button(frame3, text='キャンセル', command=lambda: sys.exit()) 72 button3.pack(side=LEFT) 73 74 root.mainloop()
試したこと
上記の通りです。
補足情報(FW/ツールのバージョンなど)
Windows 10 Home 64ビット
Python 3.10.7
yt-dlp 2022.9.1
Visual Studio Code 1.71.2(user setup)
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。