▶️
【yt-dlp】YouTubeの動画ダウンローダー yt-dlpが良い
はじめに
推しの切り抜き動画を作りたい欲が出てきて、ダウンロードソフトを探索したところ、yt-dlpに遭遇して利用してみたら、最高だったので紹介します。
※動画ダウンロードについて
動画のダウンロード行為は法的にグレーです。
動画のダウンロードについては、利用規約では下記のように明記されています。
- 本サービスまたはコンテンツのいずれかの部分に対しても、アクセス、複製、ダウンロード、配信、送信、放送、展示、販売、ライセンス供与、改変、修正、またはその他の方法での使用を行うこと。ただし、(a)本サービスによって明示的に承認されている場合、または(b)YouTube および(適用される場合)各権利所持者が事前に書面で許可している場合を除きます。
利用規約
ダウンロード対象の動画投稿者が定義している規約があれば、そちらを確認してから利用してください。
また、本ツールを利用する場合は自己責任で。
yt-dlpについて
- 切り抜き動画とか作る場合とかに使えるソフト。
- CLIベースのソフト。
- GUI用ソフト、Parabolicというものもある
サポート
- YouTubeのみならず、他サイトも対応している
- ニコニコ, Twitter, Twitchなど
- yt-dlp/supportedsites.md at master · yt-dlp/yt-dlp · GitHub
導入
Windows
-
こちらから
yt-dlp.exeをダウンロード - 好きな箇所に.exeを配置
- コマンドプロンプトで、
yt-dlp --versionで確認
- ffmpegというソフトもインストールする必要がある
winget install --id=Gyan.FFmpeg -e
Linux
- 下記コマンドを実行
# yt-dlp のインストール
wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O ~/.local/bin/yt-dlp
# ファイルのパーミッション変更
chmod a+rx ~/.local/bin/yt-dlp
-
yt-dlp --versionで確認 - ffmpegのインストール
sudo apt install ffmpeg
更新
yt-dlp -U
動画ダウンロード
yt-dlp --recode-video mp4 --download-sections "*1:00:58-1:02:03" https://youtu.be/_txHFIWp3SM
-
--recode-video: ファイル形式の指定 -
--download-sections:時間指定してダウンロード - URLを指定
音声のみダウンロード
yt-dlp -x --audio-format mp3 --download-sections "*1:00:58-1:02:03" https://youtu.be/_txHFIWp3SM
-
-xを付与することで、音声ダウンロード -
--audio-formatでファイル形式を指定
複数セクション指定
- download-sectionsオプションを複数指定
yt-dlp --download-sections "*00:10-00:20" --download-sections "*01:30-01:45" "https://www.youtube.com/watch?v=xxxxxxxxxxx"
複数動画をまとめてダウンロード
- 一つのコマンドでまとめてダウンロードすることはできない
- スクリプトファイルに上記コマンドを複数記述し、実行することで実現可能
yt-dlp --download-sections "00:10-00:20,01:30-01:45" "https://www.youtube.com/watch?v=xxxxxxxxxxx"
yt-dlp --download-sections "00:10-00:20,01:30-01:45" "https://www.youtube.com/watch?v=yyyyyyyyyyy"
yt-dlp --download-sections "00:10-00:20,01:30-01:45" "https://www.youtube.com/watch?v=zzzzzzzzzzz"
ファイル名を指定して出力
yt-dlp \
--download-sections "*0:08:10-0:08:20" \
https://youtu.be/oMCu95t9LCc -o "%(title)s - %(section_start)s-%(section_end)s.%(ext)s"
- -o:ファイル名の指定
- 組み込み変数を利用することで、動的にファイル名を指定することができる
- GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader
再生リストのリストアップ
- 動画のダウンロードだけでなく、再生リストに登録されたデータの取得をすることができます。
- 再生リスト内の限定公開動画のみ列挙するなどの利用が可能
# 特定の再生リストから、限定公開の動画のみを抽出する
yt-dlp --ignore-errors --no-abort-on-error --no-warnings --extractor-args "youtube:lang=ja" --match-filter "availability = 'unlisted'" -O "[Status: %(availability)s] %(title)s - %(webpage_url)s " "https://www.youtube.com/xxxxxxx"
-
URLに再生リスト、チャンネルを指定することが可能
-
--ignore-errors --no-abort-on-error --no-warnings:エラー、警告の非表示 -
--extractor-args "youtube:lang=ja":言語指定。- これがないと、タイトルが英語向けのものになってしまうことがある
-
--match-filter "availability = 'unlisted'":フィルタリング。限定公開のみ対象にする-
--reject-filter "availability = 'premium'"のように、除外することも可能 - GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader
-
動画データ収集
- yt-dlpの動画ダウンロード対象のデータ収集方法もついでにまとめる
- ※yt-dlpの機能ではない
時間取得
- 動画右クリック / 現時点の動画のURLをコピー
DB
-
NotionとかExcelを利用して、時間指定URLを貼り付けるだけで、yt-dlp用のコマンドを出力させると楽
-
時間取得(Notion数式)
lets(
/* Extract the time parameter from the URL */
url, prop("URL"),
timeParam, url.split("t=").last().split("&").first(),
totalSeconds, toNumber(timeParam),
/* Calculate hours, minutes, seconds for start time */
startHours, floor(totalSeconds / 3600),
startMinutes, floor((totalSeconds - startHours * 3600) / 60),
startSeconds, totalSeconds - startHours * 3600 - startMinutes * 60,
/* Calculate end time (add duration seconds or default to 10) */
added_seconds, if(empty(prop("duration")), 10, prop("duration")),
endTotalSeconds, totalSeconds + added_seconds,
endHours, floor(endTotalSeconds / 3600),
endMinutes, floor((endTotalSeconds - endHours * 3600) / 60),
endSeconds, endTotalSeconds - endHours * 3600 - endMinutes * 60,
/* Format the times properly */
startTimeString, format(startHours) + ":" + format(startMinutes).padStart(2, "0") + ":" + format(startSeconds).padStart(2, "0")
,
endTimeString, format(endHours) + ":" + format(endMinutes).padStart(2, "0") + ":" + format(endSeconds).padStart(2, "0"),
/* Combine into final format */
if(empty(url) or not url.contains("t="),
"",
"*" + startTimeString + "-" + endTimeString
)
)
/* サブアイテムの有無を確認 */
if(prop("サブアイテム").length() > 0,
/* サブアイテムが存在する場合、フォーマットを適用して結合 */
prop("サブアイテム")
.map("--download-sections \"" + current.prop("時間") + "\" ")
.filter(not empty(current))
.join(""),
/* サブアイテムがない場合、現在のアイテムの時間を表示(存在する場合) */
"--download-sections \"" + prop("時間")
)
/* Start with the basic command */
"yt-dlp " +
/* Add mp3 format option if mp3 property is not "No" */
if(prop("mp3") != false, "-x --audio-format mp3 ", "") +
/* Add download sections if 時間 (time) property is not empty */
if(not empty(prop("時間2")), "^\n" +prop("時間2") +"^\n", "") +
/* Always add the URL at the end */
prop("URL2")
+ " -o \"%(title)s - %(section_start)s-%(section_end)s.%(ext)s\"\n"
さいごに
pythonなどを利用して使用することも可能だそうです。
GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader
Discussion