
Show HN: Termplay: Play videos in your terminal - LEGOlord208
https://github.com/legolord208/termplay
======
tilpner
I see these every so often, but they never mention Sixels, which could be used
to display videos with much more detail (like with
[https://github.com/saitoha/FFmpeg-SIXEL](https://github.com/saitoha/FFmpeg-
SIXEL) ).

Sixels aren't widely supported, and the implementations I tried were lacking
in stability, but they offer some interesting possibilities, like embedding
images into your text browser (and not with a hack like w3m uses), or playing
Battle for Wesnoth inside your terminal [
[https://github.com/saitoha/libsixel](https://github.com/saitoha/libsixel) ]

~~~
LEGOlord208
I was looking for image libraries. I couldn't really find more than /dev/fb0.
Cool, I'll look into sixel!

~~~
LEGOlord208
Update: Sixels now work. I just need to fix scaling. The image turns out
REALLY small.

------
Retr0spectrum
Mplayer can do this by default e.g.

    
    
        $ CACA_DRIVER=ncurses mplayer -quiet -vo caca video.avi
    

Here's the Silicon Valley intro in glorious ASCII:
[http://i.imgur.com/YKP6nfP.png](http://i.imgur.com/YKP6nfP.png)

I had some audio sync issues with mplayer, and it sounds like termplay avoids
that. I'm also not sure if there's a way to use true colour with mplayer.

~~~
anonova
mpv has a true color terminal renderer.[1] It's not the fastest though:
[http://i.imgur.com/919Rez5.png](http://i.imgur.com/919Rez5.png)

    
    
      $ mpv --vo tct https://www.youtube.com/watch\?v\=PA4InNa0NSQ
    

[1]: [https://mpv.io/manual/master/#video-output-drivers-
tct](https://mpv.io/manual/master/#video-output-drivers-tct)

~~~
jakeogh
I had to --vo=tct (xterm was not happy around the letterbox borders!)

------
jitl
You should allow the user to specify a pixel ratio that describes the
width/height of each character of their terminal font. Otherwise, your images
will be distorted, because your output pixels are not square.

Here's a screenshot demonstrating this issue, when converting a GIF to text in
a terminal:

[https://monosnap.com/file/HwrGbSHEwxWlTQCCeXyd9qcFxwL38V.png](https://monosnap.com/file/HwrGbSHEwxWlTQCCeXyd9qcFxwL38V.png)

On the left, the original image. In the center, a ratio-perserved resized
render in a terminal On the left, a pixel-ratio aware resized render.

~~~
LEGOlord208
I'll look into it, thanks!

EDIT: Done :)
[https://github.com/legolord208/termplay/commit/2263a5c5e385c...](https://github.com/legolord208/termplay/commit/2263a5c5e385cb9f6042eaab2c37722ae11582d1)

------
tobyjsullivan
Great! Now can we get this integrated with Lynx so that can be my default
browser?

~~~
tbodt
I can't wait

------
name_for_now
I've written something similar myself in C++ before, but I'm curious if people
actually have interest in using something like this regularly. I had thought I
would do something like configure lynx to use it but the novelty quickly wore
off and instead I went and started playing with the Mandelbrot set in the
terminal and forgot all about it.

~~~
LEGOlord208
Cool!

I think that playing YouTube in the terminal today is just a fun idea because
the videos look so goofy. But like people say... Sixel... Everything is
apparently possible!

Someday, somebody will make the whole YouTube platform.

------
mfukar
It's 2017 and we still don't have a single decent bitmap terminal.

~~~
majewsky
xterm and Konsole allow to display images in the terminal. To check it out,
install w3m with the w3m-img patch (in Debian, the "w3m-img" package; in Arch
Linux, the "w3m" and "imlib2" packages) and open a webpage that contains plain
<img src="..." /> tags.

Example screenshot from Konsole:
[https://imgur.com/a/D98Kl](https://imgur.com/a/D98Kl) (showing
[https://en.wikipedia.org/wiki/xterm](https://en.wikipedia.org/wiki/xterm))

The rendering is really buggy. Images glitch away all the time, possibly until
w3m issues a redraw event, but it kinda sorta works.

Some day, I'll have to dig into either the w3m source or the Konsole source
and figure out which ANSI escapes are being used for that. (If someone has a
link to a spec or sth, that'd be much appreciated.)

~~~
LEGOlord208
You could do like the "fbi" tool, which uses the framebuffer (/dev/fb0) to
draw to the screen. And that works for the TTY, but doesn't in Konsole.

Others have also told me about Sixels, so I'll probably add support for that
at least.

~~~
LEGOlord208
Update: Sixels are now supported :)

Try it out with one of the terminals listed in
[https://github.com/saitoha/libsixel#terminal-
requirements](https://github.com/saitoha/libsixel#terminal-requirements)

------
rnmp
From the creators of April Fools day…

