YouTube-DL Wrapper Shell Script
# ALL # SINGLE youtube-dl -no-playlist --verbose -f bestvideo \ --write-thumbnail --write-description --write-info-json --no-overwrites --restrict-filenames \ --output '/home/uc/Videos/ytu/%(uploader)s/%(title)s.%(ext)s' \ https://www.youtube.com/watch?v=jfM6cOtqBHE
# Playlist
youtube-dl --yes-playlist --verbose -f bestvideo \
--write-thumbnail --write-description --write-info-json --no-overwrites --restrict-filenames \
--output '/home/uc/Videos/ytu/%(uploader)s/%(playlist)s/%(playlist_index)s-%(title)s.%(ext)s' \
https://www.youtube.com/watch?v=jfM6cOtqBHE
# SINGLE
youtube-dl --no-playlist --verbose -f bestvideo \
--write-thumbnail --write-description --write-info-json --no-overwrites --restrict-filenames \
--output '/home/uc/Videos/ytu/%(uploader)s/%(title)s.%(ext)s' \
https://www.youtube.com/watch?v=jfM6cOtqBHE
# After --dateafter now-6months # Download only the videos uploaded in the 200x decade youtube-dl --dateafter 20000101 --datebefore 20091231
youtube-dl --verbose -f bestvideo --dump-json --write-thumbnail --write-description --write-info-json --no-overwrites --restrict-filenames --output '/home/uc/Videos/ytu/%(uploader)s/%(title)s.%(ext)s' https://www.youtube.com/watch?v=jfM6cOtqBHE
Videos can be filtered by their upload date using the options --date, --datebefore or --dateafter. They accept dates in two formats:
- Absolute dates: Dates in the format
YYYYMMDD. - Relative dates: Dates in the format
(now|today)[+-][0-9](day|week|month|year)(s)?
--dateafter now-6months $ # Download only the videos uploaded in the 200x decade $ youtube-dl --dateafter 20000101 --datebefore 20091231
Full Script
#!/bin/bash
#requires .env: YTU_DEST
# YTU_DEST=~/Videos or similar
# YTU_DEST=/home/uc/Videos/ytuW
# YTU_LOG=ytu.log
# YTU_LIST=ytulist.txt
# ie:
# YTU_DEST=/home/uc/Downloads/ytu
#
# https://askubuntu.com/questions/438376/how-to-download-all-videos-on-a-youtube-channel
# https://github.com/ytdl-org/youtube-dl/blob/master/README.md#options
ytuExecute() {
echo "URL is : $1";
echo "DATEBEFORE is: $2";
opts_all="--console-title --verbose -f bestvideo --write-thumbnail --write-description --write-info-json --ignore-errors --no-overwrites --restrict-filenames $OPTS_DATEAFTER";
job_singleplaylist_no="--no-playlist --output $YTU_DEST/%(uploader)s/%(title)s.%(ext)s";
job_singleplaylist_yes="--yes-playlist --output $YTU_DEST/%(uploader)s/%(playlist)s/%(playlist_index)s-%(title)s.%(ext)s";
job_playlistall="--yes-playlist --output $YTU_DEST/%(uploader)s/%(playlist)s/%(playlist_index)s-%(title)s.%(ext)s";
job_videosall="--no-playlist --output $YTU_DEST/%(uploader)s/%(title)s.%(ext)s";
job_channel_all="--no-playlist --output $YTU_DEST/%(uploader)s/%(title)s.%(ext)s";
# SPARE OPTIONS
# --config-location PATH
# --playlist-reverse
# --download-archive FILE
# --batch-file FILE
# --console-title
echo "Testing destination dir -" $YTU_DEST
cd $YTU_DEST
echo "1 - Geting single URL ( don't get entire playlist )"; # https://www.youtube.com/watch?v=hECs8372M8A
echo "2 - Geting single URL ( get entire playlist )";
echo "----------------------------------------------------";
echo "3 - Geting playlist by URL";
echo "4 - Geting all videos by URL";
echo "5 - Geting all channel by URL";
echo "6 - Geting single urls from list $YTU_LIST";
echo "7 - View Log: $YTU_LOG";
echo "----------------------------------------------------";
echo " 0 - EXIT";
read -p "Select option and press ENTER or CTRL-C to ABORT: " OPTS
echo "----------------------------------------------------"
echo "----------------------------------------------------"
echo " ENTERED: $OPTS";
echo " TARGET URL: $URL";
echo "----------------------------------------------------";
read -p "Ready? Press ENTER or CTRL-C to ABORT" pausing
opts_job=""; # init
case "$OPTS" in
"1") echo "Geting single URL ( dont get entire playlist )"; # https://www.youtube.com/watch?v=hECs8372M8A
opts_job="$job_singleplaylist_no";
;;
"2") echo "Geting single URL ( get entire playlist )"; # https://www.youtube.com/watch?v=QYrjvLFT_B4&list=PLUjQ3tZwzZPG3tA6BjnjhAJVnZ8n4smUQ&index=4
opts_job="$job_singleplaylist_yes";
;;
"3") echo "Geting playlist by URL"; # https://www.youtube.com/playlist?list=PLUjQ3tZwzZPG3tA6BjnjhAJVnZ8n4smUQ
opts_job="$job_playlistall";
;;
"4") echo "Geting all videos by URL"; # https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ/videos
opts_job="$job_videosall";
;;
"5") echo "Geting entire channel by URL"; # https://www.youtube.com/channel/UCIJGI_3XgnfUaSNQD8D2IMQ
opts_job="$job_channel_all";
;;
"6") opts_job="$job_singleplaylist_no --batch-file ${YTU_LIST}";
;;
"7")
echo "-------------------------------------------------"
echo "REVIEW LOGFILE: ${YTU_LOG}"
echo "Press ENTER or CTRL-C to ABORT"
echo "-------------------------------------------------"
read -p ">" pausing
viewlog
;;
"0")
;;
esac;
echo "RUNNING: youtube-dl $opts_all $opts_job $URL";
cmd="youtube-dl $opts_all $opts_job --dateafter 20150824 $1"
$cmd
echo "DONE, EXITING NOW.....";
exiting
}
exiting () {
echo "EXITING.....";
exit 0;
}
viewlog () {
less ${YTU_LOG}
echo "EXITING.....";
}
echo "######################### INIT #####################################################";
# export .env vars & clear screen
export $(grep -v '^#' /home/uc/s/.env | xargs)
clear
echo "PASSED PARAMS: "
echo "1-URL : "${1}
echo "2-OPTS_DATEAFTER: "${2}
URL="$1";
if [ "$2" != "" ]; then
OPTS_DATEAFTER="--datebefore $2";
else
OPTS_DATEAFTER="";
fi
# init YTU_DEST, YTU_LOG, YTU_LIST
if [ "$YTU_DEST" == "" ] ; then
YTU_DEST="~/Videos"
fi
if [ "$YTU_LOG" == "" ] ; then
YTU_LOG="$YTU_DEST/ytu.log"
fi
if [ "$YTU_LIST" == "" ] ; then
YTU_LIST="$YTU_LIST/ytulist.txt"
fi
# for cd to script dir for access to php classes
echo "DEST: $YTU_DEST"
SCRIPT_DIR=~/s/ytu
cd "$SCRIPT_DIR"
echo "######################### CALL #####################################################";
#menu "$1" # OLD LOGIC
# 1ST PARAM = URL
# 2ND PARAM = DATEAFTER ( 20191231 )
ytuExecute $1 $2
echo "######################### END #####################################################";
exit 0;
- Log in to post comments
Tags
