Jun 272012
 

Several people have asked me if I could create a playlist downloader similar to my single downloader.  I set out to do just that.

Here is the code


20120628 – added a check to validate if file already exists

#!/bin/bash
 
# set -x
 
# By Ed Wiget
# This script automates downloading youtube video plylists and converting to mp3 file
 
# 20120625 - initial script based off of http://www.edwiget.name/2011/08/ge%E2%80%A0-%C2%A5d-%C2%A7hd%C2%A2k-dn/
# 20120628 - add a check to see if the name already exists and if so skips it
 
# you should do this sudo command and the svn rtmpdump commands below before running this script
# sudo apt-get install youtube-dl lame faad ffmpeg ffprobe
 
# for rtmp and librtmp do this:
# svn co svn://svn.mplayerhq.hu/rtmpdump rtmpdump
# cd rtmpdump/trunk
# make
# sudo make install
 
# set this variable to the location of your scripts:
BASE_DIR=~/scripts
 
# this sets the location of the python youtube-dl script, relative to above
YOUTUBE_DL=${BASE_DIR}/youtube-dl/youtube-dl
 
# this sets the path of the downloaded files and temp directory
DL_FILES=~/test-yt
 
# this sets the path to were the final mp3 is stored
MP3_LOCATION=~/Music
 
# this sets the location of the video file downloaded
VID_LOCATION=~/Videos
 
# this checks for the youtube-dl script and if it doesn't exist, it gets it
# if it does exist, it checks to make sure its the latest version
if [ ! -d ${BASE_DIR}/youtube-dl ]; then
	echo "grabbing the youtube-dl script"
	cd ${BASE_DIR}
	git clone git://github.com/rg3/youtube-dl.git youtube-dl
	chmod 700 ${BASE_DIR}/youtube-dl/youtube-dl
else
	echo -e "youtube-dl already exists\n\nMaking sure we have the latest version"
	${YOUTUBE_DL} -U
	chmod 700 ${BASE_DIR}/youtube-dl/youtube-dl
fi
 
# this checks to make sure we have ffmpeg and lame installed, and if not, grabs them
FFMPEG1=`which ffmpeg | wc -l`
LAME1=`which lame | wc -l`
 
if [ ${FFMPEG1} = 1 ]; then
	echo "ffmpeg already exists"
else
	echo "grabbing ffmpeg"
	# for ubuntu based distros, use this line
	sudo apt-get install ffmpeg
	# for redhat based distros, use this line
	#sudo yum install ffmpeg
fi
 
if [ ${LAME1} = 1 ]; then
	echo "lame already exists"
else
	echo "grabbing lame"
	# for ubuntu use this line
	sudo apt-get install lame
	# for redhat use this line
	# sudo yum install lame
fi
 
# next we ask the user for the video file, it should be in format like:
# http://www.youtube.com/playlist?list=PL4E71AC1BFE99D171
echo -e "What is the video playlist to download, ie. http://www.youtube.com/playlist?list=PL4E71AC1BFE99D171"
read VIDEO_URL
 
echo "You entered ${VIDEO_URL} is this correct? ( y / n )"
read ANS
	if [ ${ANS} = "y" ]; then
		wget -O /tmp/playlist.output ${VIDEO_URL} 
 
			for i in `cat /tmp/playlist.output | grep --color=auto -E 'watch\?v=' | cut -d '=' -f3 | sed 's/&list//g' | grep -iv "hid"`; do
				URL="http://www.youtube.com/watch?v=$i"
				cd ${DL_FILES}
				# grab the song title
				SONG_TITLE=`${YOUTUBE_DL} --get-title ${URL}`
				echo -e "the song title is ${SONG_TITLE}"
                                # here we check if the song already exists, if so it skips it....
                                SONGCHK=`ls ${MP3_LOCATION}/"${SONG_TITLE}"* | wc -l`
                                if [ "${SONGCHK}" -ge "1" ]; then
                                        echo "song already exists....."
                                else
				# downloading video
				echo "downloading video....please wait"
				${YOUTUBE_DL} ${URL}
				# we need to convert the dl url to a filename for later processing
				# the url is like:  http://www.youtube.com/watch?v=6E2hYDIFDIU 
				# the downloaded file will be 6E2hYDIFDIU.mp4
				MP4_FILE=`echo ${URL} | awk -F/ '{print$4}' | awk -F= '{print$2}'`
				# get the downloaded file extension
				FILE_EXT=`ls ${DL_FILES}/${MP4_FILE}* | awk -F. '{print$2}'`
				echo "your video is located in ${DL_FILES}/${MP4_FILE}.${FILE_EXT}"
				echo ""
				echo "converting ${DL_FILES}/${MP4_FILE}.${FILE_EXT} to wav.....please wait"
				# ffmpeg -i 6E2hYDIFDIU.flv 6E2hYDIFDIU.wav
				ffmpeg -i ${DL_FILES}/${MP4_FILE}.${FILE_EXT} ${DL_FILES}/"${SONG_TITLE}".wav
				echo "video converted to wav file....converting wav to mp3"
				lame -b 128 ${DL_FILES}/"${SONG_TITLE}".wav ${MP3_LOCATION}/"${SONG_TITLE}".mp3
				echo "${SONG_TITLE} is now available at ${MP3_LOCATION}/${SONG_TITLE}.mp3"
				# added 20110813
				# check to see if video is mp4, if so, mv to Music folder.  If not, convert to mp4 then move.
					if [ "`echo ${FILE_EXT}`" = "mp4" ]; then
       					echo -e "\n\nmoving video download file ${DL_FILES}/${MP4_FILE}.${FILE_EXT} to ${VID_LOCATION}/${SONG_TITLE}.${FILE_EXT}"
       					mv ${DL_FILES}/${MP4_FILE}.${FILE_EXT} ${VID_LOCATION}/"${SONG_TITLE}".${FILE_EXT}
       					echo "video file is now at ${VID_LOCATION}/"${SONG_TITLE}".${FILE_EXT}"
					else
						echo -e "converting ${DL_FILES}/${MP4_FILE}.${FILE_EXT} to ${DL_FILES}/${MP4_FILE}.mp4....please wait"
						ffmpeg -i ${DL_FILES}/${MP4_FILE}.${FILE_EXT} ${DL_FILES}/${MP4_FILE}.mp4
						mv ${DL_FILES}/${MP4_FILE}.mp4 ${VID_LOCATION}/"${SONG_TITLE}".mp4
						echo "video file is now at ${VID_LOCATION}/"${SONG_TITLE}".mp4"
					fi
                echo -e "\n\ndone .... and enjoy"
                                   fi
			done
	else
		echo "there was an error...."
		exit
	fi		
echo "all done.....enjoy"

This site uses Akismet to reduce spam. Learn how your comment data is processed.