ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

youtube-dl(yt-dlp)のTipsとファイル名エラーへの対策

(2022-01-14 初稿 - 2023-10-09 追記)

Debianyoutube-dlを便利に使わせてもらっている。ここでは、筆者が使ってみて便利だと思う機能とファイル名エラーへの対策を記述する。

 

(2023-10-09 追記)

youtube-dlでは、動画がダウンロードできなくなってしまったので、Web検索して似たような機能のyt-dlpを見つけた。多謝。m(__)m

インストールは以下のとおり。ただし、Raspberry Piのaptにはなかった。^^;

sudo apt install yt-dlp

yt-dlpyoutube-dlの派生だけに、オプションもほとんど同じで、以下の記述もyoutube-dlをyt-dlpにコマンドを変更するだけで利用できる。

(追記終了)

いきなり音楽ファイルへ

これまで動画をダウンロードして、以下の記述のとおりmp3等の音楽ファイルへと変換していた。

しかし、動画ファイル全体のダウンロードはサイズが大きいばかりか、ときどきエラーが起きる。

youtube-dlには、動画の音楽ファイルを抽出するオプションがあり、このオプションを用いるとダウンロード後、いきなり音楽ファイルを抽出してくれる。 

Post-processing Options:
    -x, --extract-audio                  Convert video files to audio-only files
                                         (requires ffmpeg/avconv and
                                         ffprobe/avprobe)
    --audio-format FORMAT                Specify audio format: "best", "aac",
                                         "flac", "mp3", "m4a", "opus", "vorbis",
                                         or "wav"; "best" by default; No effect
                                         without -x

上記のヘルプメッセージから、筆者はいつも以下のオプションを付けている。

-x --audio-format mp3

実際にオプションを付けると明らかにダウンロードサイズが小さくなり、おまけに抽出までしてくれるので、動画の音楽だけに興味がある方はオプションを付けた方が良いようだ。

複数動画のダウンロード

複数動画をダウンロードするときは、いちいちコマンドラインにURLを書いてyoutue-dlを実行するのが面倒。でも、youtube-dlには以下のオプションがあり、ダウンロードしたいURLを一覧にしたファイルを作っておけば、リスト順にダウンロードしてくれる。

  Filesystem Options:
    -a, --batch-file FILE                File containing URLs to download ('-'
                                         for stdin), one URL per line. Lines
                                         starting with '#', ';' or ']' are
                                         considered as comments and ignored.

ダウンロードしたいURLを記述した以下のようなファイルを作り。

cat Downloads-urls.txt
https://www.youtube.com/watch?v=xxxxxxxxxxx
https://www.youtube.com/watch?v=xxxxxxxxxxx
https://www.youtube.com/watch?v=xxxxxxxxxxx

以下のように実行すると、リスト順にダウンロードしてくれる。

youtube-dl -a Downloads-urls.txt

 

他にも出力するファイル名を制御する等便利すぎて泣きたくなるようなオプションがたくさんあるから、man youtube-dl または youtube-dl --help で確認を。

 

ファイル名エラー対策

実際にYoutubeからダウンロードすると、動画のタイトルがファイル名に使えない文字があったり、タイトルが長すぎて、エラーが起きてしまうときがある。

具体的には、以下の赤字下線のような例。

hoge@fuga:~$ youtube-dl https://www.youtube.com/watch?v=Spicm6nUl88
[youtube] Spicm6nUl88: Downloading webpage
[download] Destination: 【〇〇 】〇〇年人気の洋楽ランキング【最新】〇〇〇〇ファイル名として使えない文字などのメドレー 2021 🇯🇵 バイクで聞くと最高かも 3-xxxxxxxxxxxxxxxxxx.f248.webm
[download] 100.0% of 571.83MiB at 74.70KiB/s ETA 00:00ERROR: unable to rename file: [Errno 2] No such file or directory: 'https://hymd3a.hatenablog.com/entry/2021/06/01/191937【〇〇】〇〇年人気の洋楽ランキング【最新】〇〇〇〇ファイル名として使えない文字などのメドレー 2021 🇯🇵 バイクで聞くと最高かも 3-xxxxxxxxxxxxxxxxxx.f248.webm'
hoge@fuga:~ $ youtube -dl https://www.youtube.com/watch?v=QXwgpoDR-YM
[youtube] QXwgpoDR-YM: Downloading webpage
ERROR: unable to open for writing: [Errno 36] File name too long: 'じゅげむじゅげむごこうの〇〇〇〇〇〇長い長いタイトルだよ 勉強用BGM・作業用・オフィス・店舗用・サロン・商業利用最適 洋楽 2022-xxxxxxxxxxx.webm.part'

こんなときは、きっと対処法があるはずだと、man youtube-dlを調べると…

(前略)
Filesystem Options:
       (中略)
       --id   Use only video ID in file name
(後略)

なるほど、--id オプションで、ファイル名がidになるんだ。

youtube-dl https://www.youtube.com/watch?v=xxxxxxxxxxxxxx --id

ということで、問題解決。

Bashスクリプト

いろいろ便利なオプションがあり、また、エラー対策まで取れそうなyoutube-dlyt-dlpだけど、筆者の頭ではオプションが覚えきれそうにないので、以下のBashスクリプトを作った。

#/bin/bash
# Written by H.Y 2022-01-13
# ver0.02 2022-01-14
# ver0.03 2023-10-09 youtube-dl to yt-dlp # Youtubeファイルをmp3に変換する Usage=" yt2mp3 youtube url  yt2mp3 -a Download-urls.txt" CMD="/usr/bin/yt-dlp" # 2023-10-09 修正 OPTIONS="-x --audio-format mp3" if [ $# -lt 1 ]; then   echo "$Usage"   exit fi # error が起きた場合は --id オプションを付ける $CMD $* $OPTIONS || $CMD $* --id $OPTIONSつ

(2023-10-09追記)

ついでに、上記サイトにmplayerを使って、コマンドラインでいきなり曲を再生する方法の記述があったので、vlcで再生する方法を書いておくね。

yt-dlp ’YoutbueのURL' -x --audio-format mp3 -o - | cvlc - --play-and-exit

cvlcはvlcコマンドライン版。--play-and-exitのオプションを付けないと、曲が終わってもvlcが終了しない。このことは、以下のサイトに教えていただいた。多謝。m(__)m

(追記終了)

皆さんの参考になれば…

関連ページ