Skip to content

Instantly share code, notes, and snippets.

@yy-tromb
Last active March 10, 2025 15:13
Show Gist options
  • Save yy-tromb/b06dff563a3f5a8a8d775db47ffcc59d to your computer and use it in GitHub Desktop.
Save yy-tromb/b06dff563a3f5a8a8d775db47ffcc59d to your computer and use it in GitHub Desktop.
オレオレyt-dlpバッチ
yt-dlp --extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP "%~1" --embed-metadata --embed-thumbnail --merge-output-format mkv -f bv+251 -o "movie\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s_f%%(format_id)s.mkv" -N 8
yt-dlp --extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP "%~1" --embed-metadata --embed-thumbnail --merge-output-format mkv -f "bv[height = 1080][format_note != Premium]+251" -o "movie\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s_f%%(format_id)s.mkv" -N 8
yt-dlp --extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP "%~1" --embed-metadata -f 251 -o "opus\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s.mka" -N 8
yt-dlp --extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP "%~1" -f 140 -o "aac\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s.m4a" -N 8
yt-dlp --extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP "%~1" --write-thumbnail --skip-download -o "thumb\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s.%%(ext)s"
@yy-tromb
Copy link
Author

使い方

使い方はURLを一つ目の引数として投げるだけ。
movie,opus,aac,thumbフォルダがないとエラーを吐きます

説明

--extractor-args "niconico:lang=ja" --extractor-args "youtube:lang=ja" --add-header Accept-Language:ja-JP

これはタイトルとかを日本語にするためのおまじない。

--embed-metadata, --embed-thumbnail

これはあんまりいろんなファイルにつけすぎてもな...という気分で、メタデータとサムネイルを裁量で付けている。YouTubeのサムネイルはyt-dlpがwebpを埋め込んでしまうので(非標準)、再生しても出てくることはない。早く直して...

-f

フォーマット指定。
一部決め打ちがあるが長い間最高音質はAAC 44.1kHz 128kbpsの140と、Opus 48kHz 128kbpsの251から変わらないので、まあ大丈夫かな?YouTube Music Premiumも契約しないし。

-o "[[各種フォルダ]]\%%(title)s_%%(id)s_%%(release_date,upload_date|Unknown)s_f%%(format_id)s.[[各種ファイル名]]"

出力ファイル名を決めている。
batファイルの影響で%をエスケープするため%は二つありますが目をつぶってもらって。
idはyoutube[.]com/watch?v=%(id)sとかyoutu[.]be/%(id)sとかのやつ。
release_dateとかupload_dateはない場合があるみたい?
format_idyt-dlp "URL" -Fしたときの一番左の列。YouTubeでは399とか251みたいな番号。
ちなみに階層区切りは\にしておくとタイトルによく含まれる/でエラーを吐かない。

-N

これは並列ダウンロードを何スレッドでやるか。パソコンのスレッド数以下にする。私はインターネットが強くないので8ぐらいかな。

動画を二個ダウンロードしている件

HDDには最高品質を、PCには1080pのAV1があればそれで、なければPremium画質じゃないVP9、AVCとフォールバックするためにこうなっている。とはいえ勝手にHDDに移したりはせず、format_idで判断できるようにした。
最高画質は一行目でダウンロードされる。
最高画質がQHD(1440p)以上だった場合、3行目で1080pのAV1かVP9かAVCがダウンロードされる。
最高画質がFHD(1080p)でPremium画質(VP9)が提供されていた場合、3行目では[format_note != Premium]としているのでPremiumのVP9は飛ばされて普通のAV1かVP9かAVCがダウンロードされる。
最高画質がFHD(1080p)でPremiumが提供されていない場合、3行目でも同じものをダウンロードしようとするのでformat_idまで含めたファイル名が同じになり、yt-dlp側の機能でダウンロードしたとみなされて飛ばされる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment