2022年03月22日
【yt-dlp】YouTubeの動画を投稿日つきで落とす方法、コマンドの活用
※違法なダウンロード、規約に反するダウンロードを推奨するものではありません。著作権法に反してアップロードされた動画のダウンロードは違法です。絶対に行わないでください。
YouTubeの動画のダウンロードについては、有料のYouTubeプレミアムでオフライン保存機能が提供されています。これは自分の動画以外でも使えます。自由なコピーはできませんが。
簡単な流れ
ソフトをダウンロード→コマンドを打ち込む→保存
①準備
「yt-dlp」をダウンロードします。リンク
ページを降りていって、「INSTALLATION」のところで、Windowsの人は「WINDOWS X64」をクリックしてダウンロード。
解凍して、出てきた「yt-dlp.exe」を適当なフォルダに入れてください。
「FFmpeg」をダウンロードします。リンク
「ffmpeg-master-latest-win64-gpl.zip」をクリックしてダウンロード。
解凍して、「ffmpeg.exe」と「ffprobe.exe」を、「yt-dlp.exe」と同じフォルダに入れる。
※参考サイト:
youtube-dlがダメになったのでyt-dlpに乗り換えることにした - note
YouTubeやニコニコ動画などのムービーを最高画質・高音質でダウンロード可能な「yt-dlp」の使い方まとめ、年齢制限ムービーも一発ダウンロード可能 - Gigazine
②コマンドを用意する
今回のソフトはコマンドで動きます。
ダウンロードする際に打ち込むコマンドを用意します。メモ帳に打って保存したりすれば楽です。一例は下の通り。
./yt-dlp.exe URL -o "C:/xxxx/%(upload_date)s_%(title)s_%(id)s.%(ext)s" -f "bestvideo+bestaudio/best"
コマンドが苦手な人のために、軽く説明します。
「URL」の所に、ダウンロードしたい動画もしくはチャンネルのURLを貼り付けます。
「C:/xxxx/」は、保存したいフォルダを指定します。このコマンドの場合、Cドライブのxxxxというフォルダに保存する事になります。そのフォルダが無い時は自動で作られます。例えば/xxxx/の部分を「/a/aaa/」とすると、Cドライブ直下のaフォルダの中にaaaフォルダが作られ、その中に動画が保存されます。
「%(upload_date)s_%(title)s_%(id)s.%(ext)s」の部分がファイル名です。このコマンドの場合、例えば2022年1月1日に投稿されたAという動画(動画のIDはAAA)をmp4でダウンロードすると「20220101_A_動画ID.mp4」というファイル名になります。もちろん動画タイトルにチャンネル名を入れる事もできます。
※動画のIDが無いと、同じ日に同じタイトルの動画が投稿されている場合、重複でスキップされてしまいます。重複の心配がないなら「%(id)s」の部分は取り除いて大丈夫です。
%()sの中に入れられるテンプレートには、titleやid以外にも様々なものを指定する事が出来ます。それはファイル名のほかにフォルダ名の部分にも使う事が出来ます。
例えば保存日時は「%(epoch>%Y-%m-%d-%H-%M-%S)s」と打つと「2022-01-01-10-03-10」みたいに日時を反映させられます。「%(channel)s」と打つとチャンネル名を反映できます(ただし英語版のチャンネル名が設定されている場合、英語版のチャンネル名になります)。
ファイル名に使えるテンプレート一覧→https://github.com/yt-dlp/yt-dlp#output-template(英語です)
テンプレート(日本語サイト様)→
なお、今回のコマンドでは最高画質でダウンロードする設定になっていますが、多くの場合、VP9(.webm)で保存されるでしょう。
MP4を指定して落としたい時や、1080p以下はmp4にしてそれ以上はvp9で落としたい場合、そしてサムネイルも保存したい場合は、やり方を下の方に書いています。
③ダウンロードする
Windows10の場合の流れです。
エクスプローラーで「yt-dlp.exe」をインストールしたフォルダを開き、エクスプローラーの左上の「ファイル」をクリックし、「Windows PowerShell を開く」をクリック。
すると青いウィンドウが開きます。
そこに、上のコマンドをコピーし、Ctrlキー+VキーでペーストしてEnterキーをクリック。するとダウンロードが始まるのでそのまま放置します。動画1本ずつダウンロードされます。
H.264の最高画質で保存したい場合は下のようになると思います。コマンドの「-f」以下のみ記載します。
-f "bestvideo[vcodec*=avc1]+bestaudio[acodec*=mp4a]"ただし1080pを超えるサイズの動画の場合、1080p超はVP9かAV1で用意されている事が多いです。つまり、今回のように指定すると、1440pや2160p(4K)の映像は保存できず、1080pが最高になってしまいます。
※VP9は基本的に.webm形式で保存されますが、サムネイル付きで落とすと.mkvで保存されます(後述)。
※AV1をダウンロードする場合も.mp4で保存されますが、AV1に対応していない編集ソフトも多いです。
フォーマット指定は「/」を使う事で優先度を変えられます。
そこで、例えば「1080pを超える動画はコーデックに関わらず最大サイズの物を落とし、1080p以下はH264で落とす」というときは、以下のコマンドを考えました。
-f "bestvideo[height>1080]+bestaudio/bestvideo[vcodec*=avc1]+bestaudio[acodec*=mp4a]"
ところで、動画の中にはAV1という最新コーデックのものが用意されている事もあり、こちらの方がVP9よりサイズが小さく画質が良い事もあるので、こっちを優先的に落としたい人もいるかもしれません。しかし上のコマンドではAV1が最優先されるわけではありません。
フォーマット指定は「/」を使う事で優先度を変えられますが、「,」を使うと「両方落とす」という指定ができます。
上のコマンドに加え、「AV1コーデックを優先して落としたい。加えて、念のためAV1以外で最高画質のものも落としておきたい」という場合、以下のコマンドを考えました。
-f "bestvideo[vcodec*=av01]+bestaudio[acodec*=mp4a]/bestvideo[height>1080]+bestaudio/bestvideo[vcodec*=avc1]+bestaudio[acodec*=mp4a],bestvideo[height>1080]+bestaudio/bestvideo[vcodec*=avc1]+bestaudio[acodec*=mp4a]"
※念のためAV1以外を落とす理由は、AV1が用意されていてもそれが必ずしも最高解像度というわけではなく、AV1は2KまでなのにVP9が4Kまで用意されている動画もあるためです。
このコマンドの意味は、
①AV1があるときはAV1を落としつつ、AV1以外で最高画質の動画も落とす。
②AV1が無い時、1080pを超える動画は最高画質の物(VP9を落とす。
③AV1も1080p超の動画も無い時、1080p以下のmp4動画を落とす。
という意味になります。
※ただし、滅多にありませんが、動画にAV1とH.264しか用意されていない場合、ファイル名が重複するので片方しか落とされません。
そこで、例えばファイル名に「%(vcodec)s」を追加すると、コーデックがファイル名に記載されるようになるので、ファイル名が重複しないようになり、両方を落とせます。
ファイル名がゴチャゴチャしてしまうのが嫌な人は、下のようなコマンドを2つ走らせ、av1と、vp9またはh264を別々のフォルダに保存するといいかもしれません。
例:
AV1だけ落とす…-f "bestvideo[vcodec*=av01]+bestaudio[acodec*=mp4a]"
高解像度はVP9で、1080p以下はH264で落とす…-f "bestvideo[vcodec*=vp09][height>1080]+bestaudio[acodec*=opus]/bestvideo[vcodec*=avc1]+bestaudio[acodec*=mp4a]"
※VP9動画はvcodecが「vp9」と「vp09」のものがあります。前はvp9でしたが最近はvp09となっていっているので注意してください。
これらを理解した上で、お好みにアレンジしてください。
使ってるとすぐ理解できると思います。例えば汎用性を考えて「基本的に全てH.264を落とし、1080pを超えるものはVP9やAV1も落とす」という事をやりたい人もいるかもしれませんし、ニーズに合わせて工夫してみてください。
※ところで、縦向き動画は「720p」などもVP9しか用意されていないことがあります。これは、縦向き動画は720×1280というHD解像度であっても、縦のサイズが1080pを超える1280pの扱いとなるためです。
今回紹介したコマンドは、YouTubeと同様に縦のサイズで判定するので、縦向き動画でも横向き動画と同様の振る舞いをしてくれるはずです。
もし上手くいかない場合はコメントで教えてください。
※ところで、「最も大きいファイルサイズ(ビットレート)の動画を落とす」という設定方法を知りたいのですが、分かりません。ご存じの方がおられましたら教えてください。m(_ _)m
※最近、Premium会員用に高ビットレートの動画が用意されています。vp09で、フォーマットIDは恐らく616でしょうか。ダウンロードする場合は、"616+bestaudio" のようにフォーマットIDで指定すると良いと思います。
コマンドの参考サイト様:
https://masayoshi-9a7ee.hatenablog.com/entry/20150905/1441414821
https://r17n.page/2020/11/30/youtube-dl-usage/
https://tech.ckme.co.jp/youtubedl.shtml
https://github.com/yt-dlp/yt-dlp
★サムネイルも保存する方法
yt-dlpを使えばYouTube上のサムネイルを保存できます。
①YouTubeと同じサムネイルを動画に埋め込む方法
コマンドの最後にスペースを空けて「 --embed-thumbnail」と付けてください。ちなみに、なぜか上手く表示できない場合がありました。また、PCに入っているソフトウェア等によっては上手く表示されない場合もあるようです。
サムネイル付きで保存すると、VP9動画は.mkvで保存されます。
②YouTubeのサムネイルを画像ファイルとしてダウンロードする方法
コマンドの最後にスペースを空けて「 --write-thumbnail」と付けてください。
なお、このままだとwebpファイルで保存されて、不便な場合も多いと思うので、PNGに変換して保存したい場合は「 --write-thumbnail --convert-thumbnails png」にします。jpegにする場合はpngをjpgに変えてください。ただしPNGではファイルサイズはかなり大きくなります。
①と②は併用できます。
使用例:
./yt-dlp.exe URL -o "C:/xxxx/%(upload_date)s_%(title)s_%(id)s.%(ext)s" -f "bestvideo+bestaudio" --embed-thumbnail --write-thumbnail --convert-thumbnails png
サムネイル保存の参考サイト様:
ちなみに字幕も保存できるようです。
「--write-sub」で字幕ファイルを保存でき、VVT形式で保存されます。(srtファイルで保存したい場合は「--sub-format srt」とするとSRT形式で保存されるはずなのですが、上手くいきませんでした)
「--embed-subs」で字幕データを動画に含めることができ、MP4動画ならTX3G形式で、MKV動画ならVVT形式で埋め込まれます。保存する言語を指定したい場合、日本語は「--sub-lang ja」、英語は「--sub-lang en」とすると指定出来ます。
動画の概要欄も保存できます。
「--write-description」で動画の概要欄をテキストデータで保存します。保存される場合、descriptionファイルで保存されます。このデータを変換する機能はありません。
なお、動画は不要で、サムネイルなどのみ保存したい場合、「--skip-download」というコマンドを追加すると、動画の保存はスキップされます。
★URLを入力するだけで使えるようにする方法(バッチファイルを作る)
いちいちコマンドをコピペしなくても、batファイルを起動してbatファイルにURLを貼り付けてEnterキーを押すだけでダウンロードできるようにする方法。
メモ帳で下のように打ち込みます。
@echo off
cd /d %~dp0
set OPTIONS=
set /p URL=URL:
yt-dlp.exe %OPTIONS% "%URL%"
「set OPTIONS=」の後に、事前に作ったコマンドを全て貼り付けます。ただし「./yt-dlp.exe」とURLは記載しません。
また、ファイル名に関わる「%」は2個並べてください。そして、ファイル名の中にスペースは含めないようにしてください(うまくいかなくなる)。また、ファイル名の中にIDは含められませんでした(「%%(id)s」というコマンドは使えない)。
例:
@echo off
cd /d %~dp0
set OPTIONS=-o "C:/xxxx/%%(upload_date)s_%%(title)s.%%(ext)s" -f "bestvideo+bestaudio" --embed-thumbnail
set /p URL=URL:
yt-dlp.exe %OPTIONS% "%URL%"
打ち終わったら、保存します。yt-dlp.exeと同じフォルダに保存してください。この時、ファイルを.txtで保存するのではなく、「.bat」で保存します。
(例:list.bat)
なお、Windowsのメモ帳では、保存の際に文字コードを指定できますが、UTF-8ではコマンドの中に日本語が含まれると文字化けを起こすので、ANSIとかで保存してください。
batファイルとして開けるようになれば、それをダブルクリックするとURLを入力するウィンドウが開くようになります。URLをコピペしてEnterキーを押すと動画のダウンロードが始まり、終わればウィンドウが自動で閉じます。
なお、URL1回の入力で複数のコマンドを連続で走らせることもできます。
例えば動画とサムネイルを別のフォルダに保存したい場合、動画用のコマンドに続いて、サムネイルだけのコマンドを走らせることができます。その場合、下のようになります。太字の箇所を追加しています。
例:
@echo off
cd /d %~dp0
set OPTIONS=-o "C:/xxxx/%%(upload_date)s_%%(title)s.%%(ext)s" -f "bestvideo+bestaudio" --embed-thumbnail
set OPTIONS2=-o "C:/xxxx/%%(upload_date)s_%%(title)s.%%(ext)s" --skip-download --write-thumbnail
set /p URL=URL:
yt-dlp.exe %URL% %OPTIONS% & yt-dlp.exe %URL% %OPTIONS2%
★URLリストを作り、そのリストの動画を一括保存する方法。
①メモ帳でURL一覧のリストを作ります。URLひとつごとに改行します。
②通常通り.txtで保存します。ここでは「list.txt」というファイル名で保存したと仮定します。
③コマンドのうち、URLの部分は取り除き、代わりに「-a list.txt」というコマンドを追加します。
例:
./yt-dlp.exe -a list.txt -o "C:/xxxx/%(upload_date)s_%(title)s_%(id)s.%(ext)s" -f "bestvideo+bestaudio"
④このコマンドを使えば、URLのリストの上から順にダウンロードが始まります。複数同時に走らせるのは不安定になるかもしれないので注意してください。
★年齢制限つき動画をダウンロードできない場合
年齢制限のつけられた動画はそのままではダウンロードできないですが、ブラウザのcookie情報を使う事でダウンロードできるようになります。
場合によってはGoogle Chromeと専用の拡張機能が必要になります。YouTubeのアカウントは必須です。
コマンドに「--cookies-from-browser 〇〇」というコマンドを追加するやり方と、ブラウザからcookieを書き出して、「--cookie 〇〇.txt」というコマンドを追加してcookieファイルを指定して読み込ませるやり方があります。
通常は、Google Chromeを使っている人の場合は「--cookies-from-browser chrome」とすると便利かもしれません。
具体的なやり方は下記のブログ様をご覧ください。
https://matoken.org/blog/2022/04/20/youtube-videos-downloaded-with-yt-dlp-in-your-viewing-history-2/