質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

746閲覧

Pythonを使ってYouTubeから指定したディレクトリに動画をダウンロードしたい(GUIで)

DjangoUser

総合スコア24

0グッド

0クリップ

投稿2022/09/18 07:51

前提

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

os.path.join(file2.get(), '%(title)s.%(ext)s')を使って解決しました。

投稿2022/09/19 05:23

DjangoUser

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問