Archiving a YouTube Channel
Archiving a YouTube channel with yt-dlp
07-07-24
Table of Contents
Prerequisites
Install youtube-dl or yt-dlp.
Process
Initial archive
The initial channel archive can be completed with a simple command:
yt-dlp --add-metadata <channel url>
Note that yt-dlp automatically passes the -f bestvideo*+bestaudio/best
flag. Specify your desired format if applicable.
Auto-archive new videos
To continue auto-archiving the channel:
#!/bin/sh
while IFS= read line; do
yt-dlp --add-metadata --dateafter now-1week --break-on-reject --download-archive "</path/to/directory>/<channel list>.txt" -o "</path/to/directory>/%(title)s.%(ext)s" "$line"
done < </path/to/directory>/<channel list>.txt
Where:
- “channel list.txt” contains a list of channel(s) to archive
- “/path/to/directory” matches the desired input and output paths
This will fetch the last week’s worth of content. If content has already been downloaded, it will be skipped without error.
Example below:
while IFS= read line; do
yt-dlp --add-metadata --dateafter now-1week --break-on-reject --download-archive ~/archive.txt -o "~/vault/videos/new/%(title)s.%(ext)s" "$line"
done < ~/channels.txt
To run this automatically, add it to the crontab:
crontab -e
~~~
* */6 * * * ytld-cron.sh
I run mine four times per day.
Include upload date
See example below:
while IFS= read line; do
yt-dlp --add-metadata --dateafter now-1week --break-on-reject --download-archive ~/archive.txt -o "~/vault/videos/new/%(upload_date>%Y-%m-%d)s - %(title)s.%(ext)s" "$line"
done < ~/channels.txt
Troubleshooting
Rate-limiting
Occasionally, YouTube will rate limit downloads. The initial download may progress at normal speed, but subsequent videos will be limited to Kb/s.
One solution is to load any YouTube video while downloading. Leave a long video on loop during the duration of the download.
You may also try lowering --throttled-rate
to the highest Kb/s rate occuring when downloading.
Tagged: Archival