youtube-dl utils Tool Raspberry Pi

インターネットで公開している動画の中には公開期限の迫っているものやあとで再度見直してみたいものがあります。youtube-dlは豊富なオプションを備えた強力なダウンロードコマンドラインツールですが慣れないと手軽に使えない場面もあります。

運用方針

youtubeのデフォルトファイル形式はwebmだったりmkvだったりするようです。当サイトではffmpegと親和性が高いと思われるmp4を音声のみの場合はm4aを指定
テレビのない当サイトはPCモニタで閲覧できる必要十分なフォーマットタイプを指定することでファイルサイズを削減

ディレクトリボタンでfiledialog(askdirectory)が開きます。ディレクトリを選択、pythonからchdirして作業ディレクトリになります。
URL欄にブラウザからurlをコピーして貼り付け。URLボタンでタイトルと利用可能なフォーマットタイプを取得

subprocess.run("youtube-dl -e " + "'" + url + "'" + " > /tmp/youtube_F.log", shell=True)
subprocess.run("youtube-dl -F " + "'" + url + "'" + " >> /tmp/youtube_F.log", shell=True)
time.sleep(1)
subprocess.run("xterm -g 135x25 -e less /tmp/youtube_F.log &", shell=True)

上記のurlをターミナルから直接実行、最終的なデフォルトの保存形式はまた別の設定ファイルがあるようです。
$ youtube-dl url     拡張子mkv
$ youtube-dl -f mp4 url  拡張子mp4(best)
Type欄が空白の場合は-f mp4を割り当てています。Type欄に空白または18を入力することで最終行の(best)が適用
保存形式はタイトル+拡張子として作業ディレクトリに保存、タイトルは半角(space)が含まれていることがあるのでアンダースコア(_)に変換(パッケージrenameをインストール)
早い話がURL欄にurlを入力、DLボタン実行することでmp4形式の(best)をダウンロード保存します。

# youtube-dl
def dl_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"
    subprocess.run("xterm -g 100x24 -e youtube-dl -o '%(title)s.%(ext)s' " + "'" + url + "' -f " + t, shell=True)
    # space(_)
    subprocess.run("find -name '* *' | rename 's/ /_/g'", shell=True)
    # reload
    reloadclick()
    return

GYAO

動画によっては高画質で配信されているものがあります。

当サイトの目的はファイルサイズの小さい(少々低画質)ものを揃えることにあります。Typeボタンをクリックすると取得したフォーマットタイプ情報を元にvideo only,audio onlyなどを除いたリストを表示


hls-1785-3 を選択 mp4 854×480
hls-1785-3の値は各話で同じになるとは限りません
1920×1080 約930M
854×480 約300M
同じサイズで再エンコードすることにより更にファイルサイズを1/3程度まで小さくすることも出来ます(時間とマシンパワーが必要)
Type欄への入れ方によって組み合わせはいろいろ可能と思います(試していません)

urlは各話ごととplay list形式のurlがあります。play list形式のurlは(best)でよければ余計なオプションを指定せずターミナルから直接実行することで記載されたファイルを連続してダウンロードが可能になります。

参考 youtube_dl_utils.py