nixCraft Poll

Topics

Download and watch YouTube videos from Linux shell prompt

Posted by Vivek Gite [Last updated: August 15, 2006]

Joe Barr shows us how to enhance your YouTube viewing pleasure!

FTA, "Publishing your own video on YouTube, or watching other people's videos, is all the rage these days. Why are we talking about YouTube, in a column about the CLI? Because this week we're writing about youtube-dl, a clever little CLI tool that's easy to install and and use to fetch YouTube videos.

Youtube-dl is a Python script, licensed under the "non-copyleft" free software MIT/X11 license. It is not platform-specific; it can run under Linux, Mac OS X, or Windows platforms so long as a recent -- 2.4 or later -- version of Python is installed."

Read more at Linux.com

Update: Check out this bash script - it does same thing w/o using python.

Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates. You can Email this page to a friend.

You may also be interested in other helpful articles:

Discussion on This Article:

  1. bash Says:

    http://bashscripts.org/viewtopic.php?t=210


    #!/bin/bash
    bu="http://youtube.com/get_video.php?";mkdir -p ~/YouTube;cd ~/YouTube;read -p "YouTube url? " ur;read -p "Name? " nv
    wget ${ur} -O /tmp/y1;uf=${bu}`grep player2.swf /tmp/y1 | cut -d? -f2 | cut -d\" -f1`;wget "${uf}" -O /tmp/y.flv
    ffmpeg -i /tmp/y.flv -ab 56 -ar 22050 -b 500 -s 320x240 ${nv}.mpg;rm /tmp/y.flv; rm /tmp/y1;rm gmon.out; exit

    BASH RULES :)

  2. nixcraft Says:

    Hee

    Nice and dirty bash work

    Appreciate your post.

  3. Ivan Says:

    lol @ rm gmon.out

  4. Ray Says:

    Great information, thanks very much!

    You might try this for Zsh (maybe modern Bournes?):

    ytdl () {
    video_id=${1#http://*youtube.com/watch?v=}
    video_id=${video_id#http://*youtube.com/v/}
    video_id=${video_id%&*}
    player_line=`ftp -o - "http://www.youtube.com/watch?v=$video_id"|grep /player2.swf`
    base_getter_url=http://youtube.com/get_video.php?
    url=${player_line/*player2.swf\?/$base_getter_url}
    url=${url%%\"*}
    ftp -o $video_id.flv "$url"
    ffmpeg -i $video_id.flv -ab 56 -ar 22050 -b 500 -s 320x240 $video_id.mpg
    echo
    echo mplayer $video_id.mpg
    }

    If you have an ftp with HTTP support.

  5. nixcraft Says:

    Nice to see you are using Zsh :)

    Appreciate your script/post.

  6. luke Says:

    great :D
    thats real hacking lol

  7. TjL Says:

    The ZSH code has a problem:

    ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard
    built on Apr 4 2005 06:01:28, gcc: 3.4.2 [FreeBSD] 20040728
    Input #0, flv, from ‘j0u_F8-oYQE.flv’:
    Duration: N/A, bitrate: N/A
    Stream #0.0: Audio: mp3, 22050 Hz, mono
    Stream #0.1: Video: flv, 320×240, 15.00 fps
    Output #0, mpeg, to ‘j0u_F8-oYQE.mpg’:
    Stream #0.0: Video: mpeg1video, 320×240, 15.00 fps, q=2-31, 500 kb/s
    Stream #0.1: Audio: mp2, 22050 Hz, mono, 56 kb/s
    Stream mapping:
    Stream #0.1 -> #0.0
    Stream #0.0 -> #0.1
    [mpeg1video @ 0x282f4010]MPEG1/2 doesnt support 15/1 fps
    Error while opening codec for stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height

  8. James Says:

    Here’s the bash script, made more solid. I fixed the ffmpeg call (it doesn’t like making 15fps mpeg files), and kept the flv at the end.

    If you want to use the flv from your own apache server you’ll need to add

    video/x-flv flv

    to /etc/mime.types and restart apache, then go and get flash_flv player from http://www.jeroenwijering.com/upload/flash_flv_player.zip

    unpack it, put flvplayer.swf and flvplayer.html on your site with the .flv, and modify flvplayer.html appropriately

    #!/bin/bash
    bu=”http://youtube.com/get_video.php?”
    tmp=`mktemp`
    touch ${tmp}.flv
    read -p “YouTube url? ” ur
    wget ${ur} -O ${tmp}
    uf=${bu}`grep player2.swf ${tmp} | cut -d? -f2 | cut -d\” -f1`
    nv=`cat ${tmp} | grep ‘h1 id=”video_title”‘ | cut -d “>” -f 2 | cut -d “

  9. James Says:

    #!/bin/bash
    bu=”http://youtube.com/get_video.php?”
    tmp=`mktemp`
    touch ${tmp}.flv
    read -p “YouTube url? ” ur
    wget ${ur} -O ${tmp}
    uf=${bu}`grep player2.swf ${tmp} | cut -d? -f2 | cut -d\” -f1`
    nv=`cat ${tmp} | grep ‘h1 id=”video_title”‘ | cut -d “>” -f 2 | cut -d “

  10. James Says:

    nv=`cat ${tmp} | grep ‘h1 id=”video_title”‘ | cut -d “>” -f 2 | cut -d “lt” -f 1`

    *** i can’t post a less than symbol, so change the lt in that command to a less than symbol

    echo “Title ${nv}”
    wget “${uf}” -O ${tmp}.flv
    ffmpeg -i ${tmp}.flv -r 30 -ab 56 -ar 22050 -b 1500k -s 320×240 “${nv}.mpg”
    mv ${tmp}.flv “${nv}.flv”
    rm ${tmp}
    exit

  11. nixcraft Says:

    James,

    You can use
    <pre>code</pre>

    or
    <code>code</code> tags :)

  12. SaveTube Says:

    I use http://www.savetube.com to save any youtube videos. They also got a latest saved section.

  13. Jen Says:

    I recommend http://www.snatchvid.com it’s very easy and fast to use!

  14. James Attard Says:

    does anybody know how he arrived to the get_video.php ? i mean how did he know that that php file existed on youtube servers?

  15. Coolclu3 Says:

    Uhm…youtube has changed their code. now this script doesn’t work any more, from something like 20th August - 20007. Anyone can help fix the code? savetube.com has done it

  16. Roger Says:

    A good script is Mortube
    Demo: http://www.morllaines.com/busca_youtube/?tag=brasil (Portuguese)
    Download: http://www.morllaines.com/downloads/arquivo.php?file=54 (English)

    The script require youtube apy key on config.php
    And Curl installed on server

  17. wearetherock Says:

    #!/bin/bash

    ### mr-paul
    ### paul@sci.ubu.ac.th

    if [ "$1" = "" ]; then
    echo -e “\nUsage: getyoutube http://www.youtube.com/watch?v=UHvAXLBMWGI\n”
    else
    url=$1
    name=${url:(-11)} ### get the last 11 chars
    #echo $name

    fullscreenURL=$( wget -q -nv $url -O - | grep \&video_id= )
    echo $fullscreenURL
    title=${fullscreenURL##*=} ### delete to last occurance of ‘=’
    title=${title/\’;/} ### replace ‘; with nothing ${title:(-2)} or #{title#(-2)} do not work’ :(
    echo $title

    videoID=${fullscreenURL:54} ### cut first 53 chars
    videoID=${videoID/\’;/} ##
    echo $videoID

    wget -q -nv “http://www.youtube.com/get_video?$videoID” -O “$title.flv”
    fi

  18. clarjon1 Says:

    Hmm, anyone got a perl one liner for this job? ;)

  19. Rob Says:

    There’s now a software tool to allow linux users to download youtube videos to a preferred directory, in a variety of formats (mpeg, wmv, mp4, flv, avi), specifying the resolution… all in a GTK theme’d graphical tool.

    Check it here:
    http://yourtubedownloader.awardspace.com/

    Feedback most appreciated, via the forums or by email.

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.