Download Youtube Video dengan Shell Script (Update)

Bulan lalu Youtube merubah metode untuk link file videonya. Sepertinya dia memang sering merubah link itu, jadi beberapa add-on firefox dan software-software untuk download youtube jadi gagal mendownload. Dan saya sebelumnya pernah ngoprek shell sederhana untuk download video dari Youtube di sini, dan pastinya cara itu juga sudah tidak bisa digunakan lagi. Kita hanya perlu cari cara yang lain.

UPDATE: Versi terbaru yt-download.sh ada di sini.

Disini ada cara baru yang bisa digunakan untuk mendownload video dari Youtube. Agak berbeda dari cara yang lama, banyak parameter-parameter yang disertakan di-urlnya. Dan untuk di shell scriptnya perlu tambahan Regex (regular expression) untuk merubah string.

Buka source di browser halaman contoh ini

http://www.youtube.com/watch?v=jNQXAC9IVRw

Kemudian lakukan pencarian string ini "img.src =" temuan yang pertama, dan seharusnya string tersebut hanya ada satu di halaman itu. Ambil string itu sampai bertemu karakter ';.

Kemudian, hanya dengan mengganti semua string ini "\/" menjadi "/", dan "generate_204" menjadi "videoplayback", kita akan langsung dapat link untuk videonya. Jalankan url itu di browser akan mendownload video tersebut. Gampang banget kan? Contohnya seperti ini.

http://v3.lscache8.c.youtube.com/videoplayback?ip=111.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=907103%2C900073%2C901023&algorithm=throttle-factor&itag=34&ipbits=8&burst=40&sver=3&expire=1280523600&key=yt1&signature=6F96527E73C895221DF2D018BB1B8BFFD7FFFAF8.4651E6B8C7F7B0B638D39A41F1439FE4F3314B&factor=1.25&id=8cd417002f48551c

Dan untuk shell scriptnya, buat file dengan nama "yt-download.sh". Scriptnya kira-kira seperti ini:

#!/bin/bash

if [ $2 ]
then
fn=$2
else
fn=$1.flv
fi

if [ $1 ]
then
  wget -O $1.tmp "http://www.youtube.com/watch?v="$1
  st=$(grep -o "img.src = '.*';" $1.tmp)
  st=${st#img.src = \'}
  st=${st%\';}
  st=${st//\\\///}
  st=${st/generate_204/videoplayback}
  echo "Link:" $st
  echo "File:" $fn

  wget -O $fn "$st"
  rm $1.tmp
else
  echo "Usage: sh yt-download.sh [video_id] [file_name]"
  exit
fi

Jalankan shell ini dengan command sh yt-download.sh jNQXAC9IVRw atau seperti ini bash yt-download.sh jNQXAC9IVRw untuk di Ubuntu. Di mana "jNQXAC9IVRw" adalah video id. Hasil downloadnya adalah file jNQXAC9IVRw.flv.

Saya kurang lihai untuk masalah Regex, jadi kalau ada Regex yang lebih baik bisa dipost di sini. Thx.

7 komentar

  1. Mestinya bisa, dengan sedikit modifikasi. Program ini adalah gtkdialog+bash script. Di puppy kami menyebutnya gtkdialog3. Tapi sy kira anda bisa jd kontribvutor yg baik di puppy … Mau join? Hehehe

  2. wah senang bs membantu. tp shell yg diatas itu pake cara gampangnya aja. data youtube jg disimpan dlm bntuk JSON (coba di trace “PLAYER_CONFIG”).

    url videonya ada di array “fmt_url_map”, dan untuk sizenya di “fmt_list” atau “fmt_map”.

    gw jg ga begitu ngerti bagian nentuin mp4 & flv, tp dr header filenya sih bs keliatan.

    mudah2an bs dibikin shell yg lebih baik. dmn sy bs liat hasil perkembangannya?

  3. Hai,

    Pertama, terima kasih atas pencerahannya … saya ambil script anda utk di share sbg download engine utk you2pup (di puppy linux forum) utk mengantikan yang lama.

    Anyway, saya mau bertanya, bagaimana caranya utk mencari url download mp4 atau hd misalnya?

    Terima kasih banyak

Tinggalkan komentar

Alamat email Anda tidak akan dipublikasikan.