#!/bin/sh
TMPFILE="/tmp/yt-${RANDOM}.html"
VIDS=""
PREFIX=""
COUNT=00000
## Prefered format
FORMAT=43
## Prefered closed caption language
LANG=en
while [ ! -z $1 ]; do
case "$1" in
'-t')
FILENAME_FROM_TITLE=1
shift
;;
'-A')
AUTO_NUMBER=1
shift
;;
'--write-srt')
SAVE_SRT=1
shift
;;
'--srt-lang')
shift
LANG=$1
shift
;;
'-f')
shift
FORMAT=$1
shift
;;
*)
VIDS="$VIDS $1"
shift
;;
esac
done
#echo $VIDS
for VID in $VIDS; do
ID=$(echo "$VID" | sed 's/.*\(v=[^&]\+\).*/\1/;s/^v=//;s/.*youtu.be\///')
URL="http://www.youtube.com/watch?v=${ID}"
if [ "$AUTO_NUMBER" = 1 ]; then
PREFIX="${COUNT}-"
COUNT=$(printf "%.5d\n" $((COUNT + 1)))
fi
## Informations
echo -n "Downloading video page... "
if wget -q --no-cache "$URL" -O "$TMPFILE"; then
echo OK
else
echo Error
break
fi
if [ "$FILENAME_FROM_TITLE" = 1 ]; then
TITLE=$(grep '<meta property="og:title" content=' "$TMPFILE" | cut -d\" -f4 | tr ' ' '_')
FILENAME="${PREFIX}${TITLE}-${ID}"
else
FILENAME="${PREFIX}${ID}"
fi
case $FORMAT in
44|43) EXT=webm ;;
22|18|17) EXT=mp4 ;;
5) EXT=flv ;;
esac
## Subtitles
if [ "$SAVE_SRT" = 1 ]; then
echo -n "Downloading subtitles... "
wget -q --no-cache "http://video.google.com/timedtext?lang=en&format=srt&v=${ID}" -O "${FILENAME}.srt"
if [ -s "${FILENAME}.srt" ]; then
echo OK
else
echo Error
rm -f "${FILENAME}.srt"
fi
fi
echo -n "Extracting video URL... "
URL="$(sed 's/"url_encoded_fmt_stream_map"\(.*\)/\1/g' "$TMPFILE" | sed 's/,/\n\n/g' | grep itag="$FORMAT")"
if [ -n "$URL" ]; then
echo OK
URL="$(echo "$URL" | sed 's/\:\ \"//' | sed 's/%3A/:/g' | sed 's/%2F/\//g' | sed 's/%3F/\?/g' |\
sed 's/%3D/\=/g' | sed 's/%252C/%2C/g' | sed 's/%26/\&/g' |\
sed 's/sig=/signature=/g' | sed 's/\\u0026/\&/g' | sed 's/type=[^&]\+//g' |\
sed 's/fallback_host=[^&]\+//g' | sed 's/quality=[^&]\+//g')"
SIGNATURE="$(echo "$URL" | sed 's/.*\(signature=[^&]\+\).*/\1/')"
YOUTUBEURL="$(echo "$URL" | sed 's/.*\(http\?:.\+\).*/\1/'| sed 's/&signature.\+$//')"
DOWNLOADURL="$(echo "${YOUTUBEURL}&${SIGNATURE}" | sed 's/&\+/\&/g' | sed 's/&itag=[0-9]\+&signature=/\&signature=/g')"
wget -c --no-cache "$DOWNLOADURL" -O "${FILENAME}.${EXT}"
## alternative download method with a bar only, curl required
# curl -C - -# -o "${FILENAME}.${EXT}" "$DOWNLOADURL"
else
echo "URL not found, try different format"
fi
rm -f "$TMPFILE"
done
Źródło: