Dodany przez: azhag, 12:12 06-11-2013

Nowy Pobierz
  1. #!/bin/sh
  2.  
  3. TMPFILE="/tmp/yt-${RANDOM}.html"
  4. VIDS=""
  5. PREFIX=""
  6. COUNT=00000
  7.  
  8. ## Prefered format
  9. FORMAT=43
  10.  
  11. ## Prefered closed caption language
  12. LANG=en
  13.  
  14. while [ ! -z $1 ]; do
  15.     case "$1" in
  16.         '-t')
  17.             FILENAME_FROM_TITLE=1
  18.             shift
  19.             ;;
  20.         '-A')
  21.             AUTO_NUMBER=1
  22.             shift
  23.             ;;
  24.         '--write-srt')
  25.             SAVE_SRT=1
  26.             shift
  27.             ;;
  28.         '--srt-lang')
  29.             shift
  30.             LANG=$1
  31.             shift
  32.             ;;
  33.         '-f')
  34.             shift
  35.             FORMAT=$1
  36.             shift
  37.             ;;
  38.         *)
  39.             VIDS="$VIDS $1"
  40.             shift
  41.             ;;
  42.     esac
  43. done
  44. #echo $VIDS
  45.  
  46. for VID in $VIDS; do
  47.     ID=$(echo "$VID" | sed 's/.*\(v=[^&]\+\).*/\1/;s/^v=//;s/.*youtu.be\///')
  48.     URL="http://www.youtube.com/watch?v=${ID}"
  49.     if [ "$AUTO_NUMBER" = 1 ]; then
  50.         PREFIX="${COUNT}-"
  51.         COUNT=$(printf "%.5d\n" $((COUNT + 1)))
  52.     fi
  53.    
  54.     ## Informations
  55.     echo -n "Downloading video page... "
  56.     if wget -q --no-cache "$URL" -O "$TMPFILE"; then
  57.         echo OK
  58.     else
  59.         echo Error
  60.         break
  61.     fi
  62.     if [ "$FILENAME_FROM_TITLE" = 1 ]; then
  63.         TITLE=$(grep '<meta property="og:title" content=' "$TMPFILE" | cut -d\" -f4 | tr ' ' '_')
  64.        FILENAME="${PREFIX}${TITLE}-${ID}"
  65.    else
  66.        FILENAME="${PREFIX}${ID}"
  67.    fi
  68.    case $FORMAT in
  69.        44|43) EXT=webm ;;
  70.        22|18|17) EXT=mp4 ;;
  71.        5) EXT=flv ;;
  72.    esac
  73.  
  74.    ## Subtitles
  75.    if [ "$SAVE_SRT" = 1 ]; then
  76.        echo -n "Downloading subtitles... "
  77.        wget -q --no-cache "http://video.google.com/timedtext?lang=en&format=srt&v=${ID}" -O "${FILENAME}.srt"
  78.        if [ -s "${FILENAME}.srt" ]; then
  79.            echo OK
  80.        else
  81.            echo Error
  82.            rm -f "${FILENAME}.srt"
  83.        fi
  84.    fi
  85.  
  86.    echo -n "Extracting video URL... "
  87.    URL="$(sed 's/"url_encoded_fmt_stream_map"\(.*\)/\1/g' "$TMPFILE" | sed 's/,/\n\n/g' | grep itag="$FORMAT")"
  88.    if [ -n "$URL" ]; then
  89.        echo OK
  90.        URL="$(echo "$URL" | sed 's/\:\ \"//' | sed 's/%3A/:/g' | sed 's/%2F/\//g' | sed 's/%3F/\?/g' |\
  91.                              sed 's/%3D/\=/g' | sed 's/%252C/%2C/g' | sed 's/%26/\&/g' |\
  92.                              sed 's/sig=/signature=/g' | sed 's/\\u0026/\&/g' | sed 's/type=[^&]\+//g' |\
  93.                              sed 's/fallback_host=[^&]\+//g' | sed 's/quality=[^&]\+//g')"
  94.        SIGNATURE="$(echo "$URL" | sed 's/.*\(signature=[^&]\+\).*/\1/')"  
  95.        YOUTUBEURL="$(echo "$URL" | sed 's/.*\(http\?:.\+\).*/\1/'| sed 's/&signature.\+$//')"
  96.        DOWNLOADURL="$(echo "${YOUTUBEURL}&${SIGNATURE}" | sed 's/&\+/\&/g' | sed 's/&itag=[0-9]\+&signature=/\&signature=/g')"
  97.        wget -c --no-cache "$DOWNLOADURL" -O "${FILENAME}.${EXT}"
  98.        ## alternative download method with a bar only, curl required
  99.        # curl -C - -# -o "${FILENAME}.${EXT}" "$DOWNLOADURL"
  100.    else
  101.        echo "URL not found, try different format"
  102.    fi
  103.  
  104.    rm -f "$TMPFILE"
  105. done
  106.  

Źródło:

Ostatnie wpisy

Linki

Funkcje