MPlayer youtube script: Difference between revisions
Line 82: | Line 82: | ||
to get the HD version if available. | to get the HD version if available. | ||
To | To avoid seeking issues, try updating to latest SVN. It contains a special hack that works around a bug in youtube's HTTP server (it does not set Accept-Ranges, which incorrectly indicates it does not support seeking/partial requests - MPlayer now just assumes that seeking is possible if the server string is "gvs 1.0" - which is what youtube currently uses). | ||
If that does not help, try configuring MPlayer with http support via FFmpeg (--enable-protocol="http_protocol" or --enable-protocol="file_protocol pipe_protocol http_protocol rtmp_protocol tcp_protocol udp_protocol") and use instead | |||
mplayer ffmpeg://$(youtube-dl -b -g http://www.youtube.com/watch?v=.....) | mplayer ffmpeg://$(youtube-dl -b -g http://www.youtube.com/watch?v=.....) |
Revision as of 12:54, 30 December 2009
bash script for playing youtube videos
- save it as youtube.sh
- chmod +x youtube.sh
- place it somewhere in PATH (like /usr/local/bin )
Usage:
- youtube.sh <url> [mplayer args]
- youtube.sh http://www.youtube.com/watch?v=example -dumpstream -dumpfile something.flv
- youtube.sh http://www.youtube.com/watch?v=example -aspect 16:9
- youtube.sh http://www.youtube.com/watch?v=example -xy 2
#!/bin/bash if [ -z "$1" ]; then echo "No URL!" exit fi url=$1 shift echo \"http://www.youtube.com/get_video?video_id=`wget -q -O - $url | grep fullscreenUrl | awk -F'video_id=' '{ print $2 }' | sed -e 's/ /_/g' | tr -d \'\; `\" | xargs mplayer $* ### # The scipt above grabs the html source to the real stream (the .flv file), which youtube constantly alters. The "http://www.youtube.com/get_video?video_id=" is always the prefix -- and the script uses wget to d/l and append the rest of the 'full' url (which is very long and stupid).. an ex.; #mplayer #"http://www.youtube.com/get_video?video_id=L2SED6sewRw&l=2965&sk=GOT2L_qmpVJOx0w#rud5ycdyuWziPg1lcC&fmt_map=6%2F720000%2F7%2F0%2F0&t=OEgsToPDskLlf4ls3xB6V84dMYLu#ndws&hl=en&plid=AARTXK76vCTnvQ5#JAAAC6ADCAAA&sdetail=rv%253AL2S#ED6sewRw&tk=P4Lg#O65y-u5BllZJBsB_e2Gw-OVgaMp4a8prsHTahDhuPN_xsReW2Q%3D%3D&title=Greg Kroah # Hartman on the Linux Kernel" # as you can see, there are blank spaces also that need to be cleaned up (blank # # spaces replaced with underscores).
created by enouf and n3kl and amphi
RE-modified by enouf
Alternative Version
Here is an alternative version by Elte.
The differences are
- fewer programm calls
- less shell pipes
- no dependency on grep, awk or tr
- supports double quotes in video url
This version is nevertheless heavily based on the previous script.
#!/bin/bash # © 2008,2009 Elte GPL V2.1 URL="$1" shift if [ "${URL#http://}" = "$URL" ] then echo "usage: $0 <youtube-URL> [mplayer args ...]" exit fi echo \"http://www.youtube.com/get_video?video_id=$(wget -q -O - "$URL" \ | sed -e '/fullscreenUrl/!d' \ -e "s/.*video_id=\([^']*\).*/\1/" \ -e 's/ /_/g' \ -e 's/\\\"/"/g' \ )\" \ | xargs mplayer "$@"
Or just use youtube-dl
Available in almost all Linux distributions.
Usage:
mplayer $(youtube-dl -g http://www.youtube.com/watch?v=.....)
or
mplayer $(youtube-dl -b -g http://www.youtube.com/watch?v=.....)
to get the HD version if available.
To avoid seeking issues, try updating to latest SVN. It contains a special hack that works around a bug in youtube's HTTP server (it does not set Accept-Ranges, which incorrectly indicates it does not support seeking/partial requests - MPlayer now just assumes that seeking is possible if the server string is "gvs 1.0" - which is what youtube currently uses).
If that does not help, try configuring MPlayer with http support via FFmpeg (--enable-protocol="http_protocol" or --enable-protocol="file_protocol pipe_protocol http_protocol rtmp_protocol tcp_protocol udp_protocol") and use instead
mplayer ffmpeg://$(youtube-dl -b -g http://www.youtube.com/watch?v=.....)