Posso ver imagens e assistir filmes dentro do emulador de terminal? No caso do console virtual, posso fazê-lo via framebuffer, mas e os emuladores de terminal?
Posso ver imagens e assistir filmes dentro do emulador de terminal? No caso do console virtual, posso fazê-lo via framebuffer, mas e os emuladores de terminal?
Respostas:
Vários emuladores de terminal suportam o Sixel Graphics , na página do github do PySixel , a lista é:
Você pode exibir as imagens com o PySixel mencionado acima , que parece capaz de fazer as conversões necessárias. Outra opção é usar ferramentas de netpbm
. Tive bons resultados usando o seguinte para converter e exibir uma imagem JPEG no mlterm:
jpegtopnm image.jpg | pnmquant 256 | ppmtosixel >/dev/tty
Resultado:
O XTerm também pode exibir imagens Sixel, embora o suporte esteja atualmente limitado a 16 cores (e também com erros). Um arquivo contendo imagens de amostra pode ser baixado aqui , embora os scripts pareçam estar danificados. O XTerm não exibe o formato exato de saída ppmtosixel
(não suporta as seqüências de controle usadas no início / fim). Antes de encontrar PySixel
, usei o seguinte script para cortar a ppmtosixel
saída em algo que o XTerm exibirá:
#!/bin/bash
echo -e '\eP0;0;0;q"1;2;400;400'
jpegtopnm "$1" |
pnmquant 16 |
ppmtosixel |
tail -n +2 |
head -c -3
echo -e '\x1b\x5c\x0d'
tput cup "$(tput lines)" 0
As imagens não serão exibidas no modo VT420 padrão. Somente nos modos VT240, VT241, VT330 ou VT340 eles serão exibidos. Além disso, a --enable-sixel-graphics
opção de compilação é necessária. Encontrei melhores resultados com o VT340 ( xterm -ti vt340
). Aqui estão os resultados (o primeiro é uma imagem muito legal do arquivo de exemplo):
perl -wpe 'use bytes;s!([\x80-\x9f])!qq(\e).chr(ord($1)-64)!ge'
funciona como um ótimo filtro após o ppmtosixel (e todas as outras vezes em que você desejar mudar os códigos de 8 bits c1 para seus equivalentes de 7 bits).
Por exemplo - eu quero mudar o fundo do meu terminal?
printf '\033}bp%s\000' \
'http://hdwalldesktops.com/wp-content/uploads/2014/02/background-backgrounds-high-resolution-abstract-picture-background-wallpaper.jpg'
Emula um vt100 ligeiramente estendido com algumas extensões e bling jogado dentro
> Most escapes supported by xterm, rxvt etc. work
> Xterm 256 color escapes work
> Backgrounds (bitmap, scalable/vector, animated gif, videos)
> Transparency
> Bitmap and scalable fonts supported
> Themes for the layout and design
> URL, file path and email address detection and link-handling
> Inline display of link content
> Multiple copy and paste selections and buffer support
> Works in X11
> Works in Wayland
> Works directly in the linux framebuffer (fbcon)
> Can be finger/touch controlled
> Scan scale by UI scaling factors
> Can render using OpenGL or OpenGL-ES2 (not a requirement - just an
option)
> Can display inlined media content (images, video, documents)
> Can do multiple "tabs"
> Can do splitting into multiple panes
> Block text selection
> Drag and drop of text selections and links
> Can stream media from URLs
> Tab switcher has live thumbnail content
> Single process, multiple windows/terminals support
> Fast (gives urxvt a run for its money)
> Themable visual bell
> Compress backscroll
> Text reflow on resize
> Color palette selection
> More...
Você vê isso acima? Isso é feito no buffer de estrutura.
Sim, mais ou menos. O Mplayer, por exemplo, suporta a renderização de vídeo aalib (monocromática) e libcaca (cor) em um terminal de texto. Não é exatamente de alta resolução, mas com a renderização sub "pixel" e o pontilhamento temporal aumentando a resolução efetiva, geralmente você pode dizer o que está acontecendo.
No mundo Unix, os emuladores de terminal emulam terminais seriais, onde o fluxo de dados a ser mostrado ao usuário é enviado um de cada vez através de uma linha serial.
No tempo do modem, isso geralmente era de 1000 a 2000 caracteres por segundo, mas hoje pode ser muito mais rápido se apenas o hardware emulado estiver envolvido. Cabia então ao terminal entender os bytes enviados. Normalmente, isso era para mostrar caracteres, mover o cursor e manipular a exibição na tela. Alguns terminais podem mudar para os modos gráficos - o gnuplot suporta bastante - mas a largura de banda é muito pequena para fazer algo interessante em termos de vídeo.
Ainda assim, para um computador moderno com hardware emulado, um emulador de terminal pode fazer bastante. Tente pesquisar imagens com o termo de pesquisa "ttyquake" para ver algumas delas. Eu diria que, se você gosta de HD, provavelmente ficará decepcionado.