Hacker News new | ask | show | jobs
by renekooi 4233 days ago
YT videos lag a lot when I stream them directly in VLC 2.2.0, (`vlc <youtube link>`) and some protected videos don't play at all, so I often use this:

    ytplay() { youtube-dl "$1" -o - | vlc - }
As a side benefit it of course also allows you to instantly watch stuff from all the other sites YT-DL supports :)
6 comments

That's a great idea. I use Livestreamer for that purpose.

https://pypi.python.org/pypi/livestreamer/1.10.2

Had to add a colon:

    ytplay() { youtube-dl "$1" -o - | vlc -; }
but works great!
That is a semicolon, and it shouldn't be necessary (at least not in bash/zsh).
I believe it's necessary, otherwise the closing bracket counts as parameter to the last command.
Correct. On the command line:

    ytplay() { youtube-dl "$1" -o - | vlc - ; }
or:

    ytplay() { youtube-dl "$1" -o - | vlc - #<enter here>
    > } #Where "> "  is bash prompting for more/end of definitoin
In a file (eg: .bashrc), I'd personally prefer:

    ytplay() {
       youtube-dl "${1}" -o - | vlc -
    }
Note that there's very little difference between "$1" and "${1}" in practice, I tend to prefer it for consistency with recommended[1] practice of using ${NAME} rather than $NAME. (And to differentiate something like "${1}${2}" vs "${12}", as you might if $1 was a name, and $2 an extension, or $1 and url-scheme and $2 a host-name (http://hostname -> "${1}${2}" 1="http://" 2="hostname").

[1] http://stackoverflow.com/questions/8748831/bash-why-do-we-ne...

May I ask what the program "ytplay" is? Google doesn't guide me.
It's a function name that renekooi would have made up to run the command following it without having to type it all out every time.
That's how you define a function in Bash.
Holy heck that's a great idea. Thanks!
I use xargs

    youtube-dl --get-url "$1" | xargs mplayer
I think I fixed the "some protected videos" last week.

If not, please share me a YT link.