youtube-dl utils Tool (Audio Only, Script) Raspberry Pi
前回の作成からいろいろ使ってみました。気になるところを修正、追加しています。
video only + audio only
URL欄は以下の形式が利用できます。(YouTube)
https://www.youtube.com/watch?v=xxxxyyyyzzz https://youtu.be/xxxxyyyyzzz xxxxyyyyzzz
下記例の(best)は640×360 360pですがvideo only + audio onlyで必要なサイズ品質を指定できます。
135+140 854×480 480p (mp4)
244+251 854×480 480p (webm)
audio only
-f m4a ではmp4コンテナのm4a(mp4a AAC LC)音声のみがダウンロードできます。-f 251 は音声のみのwebm(opus)ですが拡張子は動画と同じwebmとなり区別がつきません。
youtube-dlオプション -x –audio-formatから各形式を指定出来ます。簡単に済ますためType欄の-f に続く形でインサートしています。そのためType欄へは140 or 251を入力後各ボタンのaudio-formatが入力可能になります。
flacはインストールが必要と思います。(# apt install flac)
# audio only def aac_click(): global ft; ft = "aac"; insert() def flac_click(): global ft; ft = "flac"; insert() def mp3_click(): global ft; ft = "mp3"; insert() def opus_click(): global ft; ft = "opus"; insert() def vorbis_click(): global ft; ft = "vorbis"; insert() def wav_click(): global ft; ft = "wav"; insert() # audio Entory insert def insert(): t = t_entry.get() if not t: messagebox.showinfo('youtube-dl', 'Select a Format Type !') return # entry insert t_entry.insert(END," -x --audio-format " + ft) t = t_entry.get() proc = messagebox.askyesno('youtube-dl', "-f " + t + "\n\nYes/No ? (no clear) ") if proc == False: t_entry.delete("0","end") return
YouTubeがサポートしている形式m4a(aac),webm(opus)以外は再変換するものと思います。wav,flacについてはその形式で配布(サポート)しているサイトで本来の意味があるものと思われます。(mp4,webmは動画)
但し残念ながら当サイト環境のopus形式のファイルは大半が僅かにクリップ気味となってしまいます。特に音楽ファイルは動画に比べて出力レベルが高めとなっているためI2Sデバイスへの入力オーバーが原因と思われます。
Script file
ダウンロードはURLとTypeを入力してDLボタンで実行するだけですが少し大きめのファイルは数分かかります。纏めて実行できるようスクリプトファイルに書き出して実行します。
デフォルトディレクトリはmultimedia関連のディレクトリとしてListboxは隠しファイル(ピリオド)を表示することにします。(“ls -FA”)
# Listbox 1 (multimedia) def media_list(): global multimedia_dir, multimedia_list multimedia_list = "ls -FA" multimedia_list = (subprocess.Popen(multimedia_list, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
赤scriptボタン(add)
# script click def script_click(): url = url_entry.get(); url = url.strip() t = t_entry.get(); t = t.strip() if not url: messagebox.showinfo('youtube-dl', 'No URL !') return if not t: t = "mp4" cmd = ("'" + url + "' -f " + t) with open('.youtube_dl_download.sh', 'a') as f: f.write("youtube-dl -o " + "'%(title)s.%(ext)s' " + cmd + "\n") messagebox.showinfo('youtube-dl', 'Add URL !') # reload reload_click() return
緑scriptボタン(edit)
# script edit def script_edit(): y = os.path.isfile('.youtube_dl_download.sh') if y == False: messagebox.showinfo('youtube-dl', 'No file .youtube_dl_download.sh ! ') return subprocess.run("xterm -g 130x24 -e vi .youtube_dl_download.sh &", shell=True) return
URL Typeを入力、赤scriptボタンクリック(OK)でListBoxの先頭に’.youtube_dl_download.sh’が生えてきます。
緑scriptボタンは更に編集が可能、特殊なオプションが必要な場合は末尾または適当な位置に追記します。
実行はListBoxから選択、YouTube_DLボタンで開始(終了したらスクリプトファイル削除)
YouTubeサイトは5本目位から急にダウンロード速度が低下するようです。(できるだけマメに結果的に早い)
space & bracket (_)
ダウンロードしたファイルは半角(space)があるとListBoxが乱れます。また特殊記号があるとsubprocessはplayerにうまく渡せません。気がついた記号”&()”をアンダースコアに置き換えます。クォーテーションマーク(‘”)はうまく処理出来なかったので必要であれば手作業で修正(ファイルマネージャーやプレーヤーソフトからは問題ないと思います)
(# apt install rename)
# space & bracket (_) def space_click(): subprocess.run("find . -name '* *' | rename 's/ /_/g'", shell=True) subprocess.run("find . -name '*&*' | rename 's/&/_/g'", shell=True) subprocess.run("find . -name '*(*)*' | rename 's/[ ()]/_/g'", shell=True) # reload reload_click() return
youtube-dl
debian系からmpvをインストールすると依存でyoutube-dlもインストールされると思います。パッケージのyoutube-dlはバージョンが古いので最新のyoutube-dlをインストールします。
http://ytdl-org.github.io/youtube-dl/download.html
上記サイトのyoutube-dlは/usr/local/bin/以下にインストールされます。
$ which youtube-dl /usr/local/bin/youtube-dl
パッケージからインストールしたyoutube-dlがある場合は優先するので削除
$ sudo apt remove youtube-dl
updateボタンクリック 更新があればup-to-dateは最新の日付になります
その他
Homeボタン デフォルトディレクトリに移動
URL欄が空欄の場合は最後に取得したフォーマット情報(/tmp/youtube_F.log)を表示(OS再起動で削除)
# url def url_click(): url = url_entry.get() url = url.strip() if not url: ls = os.path.isfile("/tmp/youtube_F.log") if ls == True: subprocess.run("xterm -g 135x25 -e lv /tmp/youtube_F.log &", shell=True) else: messagebox.showinfo('youtube-dl', 'No URL !') return
基本はこのボタンで間に合うと思います。当サイトはdevilspie2で起動サイズを指定、必要があれば引き伸ばします(好みで)
参考 youtube_dl_utils.py.20210903