Estou procurando uma maneira de assistir vídeos do YouTube no terminal (não em um navegador ou outra janela, mas ali mesmo, em qualquer sessão do bash).
Existe uma maneira simples de fazer isso?
Eu imagino algo assim:
$ youtube <video-url>
Eu já sei como reproduzir um vídeo usando mplayer
:
$ mplayer -vo caca local-file.avi
No entanto, isso abre uma nova janela. Seria legal jogá-lo no terminal.
Além disso, deve ser compatível com as tmux
sessões.
Fiz outra pergunta sobre como impedir a abertura de uma nova janela .
Para aqueles que se perguntam onde eu preciso dessa funcionalidade, iniciei um projeto experimental chamado TmuxOS - com o conceito de que tudo deve ser executado dentro de uma tmux
sessão .
Então, de fato, preciso de um player de vídeo para vídeos locais e remotos. :-)
terminal
video
adobe-flash
Ionică Bizău
fonte
fonte
mpv <youtube url>
. Também funciona para vários outros sites de vídeo. Mas isso abre uma nova janela.Respostas:
Você pode baixar vídeos e / ou apenas o áudio e depois assistir / ouvir usando
youtube-dl
. O script é escrito em Python e faz uso deffmpeg
eu acredito.Para baixar vídeos, basta fornecer o URL da página em que você deseja que o vídeo e o script façam o resto:
Você pode usar
vlc
oumplayer
assistir a eles localmente:OK, mas eu quero assistir esses vídeos enquanto eles são transmitidos e em ASCII
Eu encontrei este artigo do blog intitulado: No ASCII, youtube e deixar ir, que demonstra o método que discuti na sala de bate-papo, usando principalmente
youtube-dl
como o "back-end" que poderia fazer o download do fluxo do YouTube e redirecioná-lo para outro aplicativo.Este artigo mostra que está sendo feito com
mplayer
:O vídeo baixado por
youtube-dl
é redirecionado via STDOUT acima-o -
,. Há uma demonstração do efeito aqui .Com a instalação de bibliotecas adicionais, o vídeo ASCII pode ser aprimorado ainda mais.
OK, mas eu quero o vídeo no meu terminal atual?
Encontrei esse truque que permite que o vídeo seja reproduzido em uma
xterm
articulação de O'Reilly intitulada: Assista a vídeos na arte ASCII .O resultado acima resulta em uma
xterm
janela sendo aberta onde o vídeo é reproduzido.Então pensei: por que não juntar a manteiga de amendoim e o chocolate assim:
Isso quase funciona! Não sei por que o vídeo não pode ser reproduzido na janela, mas parece que deveria ser capaz. A janela aparece e começa a tocar, mas depois fecha. Eu vejo o vídeo por alguns breves segundos e depois nada.
Talvez o exposto acima o aproxime da sua solução definitiva ou talvez precise apenas de um pouco de ajustes nas opções.
Bibliotecas adicionais
Se você
libcaca
instalou (a versão coloridaaalib
) e reduziu o tamanho da fontegnome-terminal
para algo realmente pequeno, como digamos 3, o comando a seguir exibirá um vídeo ASCII muito mais bonito diretamente no terminal:Terminais
Parece que a escolha do terminal pode ser importante para saber se é
mplayer
possível jogar diretamente dentro do terminal ou se ele abre uma janela separada. O armazenamento em cache tambémmplayer
fez uma diferença dramática em poder tocar diretamente nos terminais.Usando este comando, eu pude reproduzir
terminator
, pelo menos nos primeiros 1/4 do vídeo antes de cortar:A versão colorida usou este comando:
Esses mesmos comandos também podem ser reproduzidos no
gnome-terminal
&xterm
.NOTA: É (da esquerda para direita)
xterm
,terminator
,gnome-terminal
, eterminology
.fonte
terminology
- e não apenas com os caca libs. Você pode usar escapes de terminal para especificar uma parte mapeada da janela terninal e reproduzi-la ali mesmo em alta definição. Você pode até definir o vídeo como pano de fundo e trabalhar nele.terminology
também entende os URIs - obtenha um link de webm para o seu vídeo do youtube e apenasprintf
na tela como um prompt de terminal.tybg my.avi
faça.printf
método. Façatybg somefile | sed -n l
para ver como funciona - ele apenas usa escapes de terminal estendidos. Eles estão documentados naman
página. Você pode fazer o mesmo comty{ls,cat}
. Mas esses pequenos aplicativos são apenas antigos invólucros de demonstração da coisa real e talvez não sejam tão capazes. De qualquer forma, se sua versão foi criada nos últimos dois meses, você pode gostar da miniview tanto quanto eu - pressione ctrl + shift + h. Toda a iluminação é igualmente boa - é por isso que sugeri que você a experimentasse recentemente. Também é uma loucura rápida.Portanto, com a Terminologia (provavelmente a melhor coisa que já aconteceu a um emulador de terminal, a propósito) no momento da redação deste artigo, o seguinte funciona:
O
terminology
bit específico é othen
blocoplay()
- aprintf \033}...
linha.terminology
aceita fugas de terminal estendidas para mídia de impressão na tela - como cores prontas, mas também vídeo em alta definição e basicamente o que mais você quiser.O resto é um pouco de
curl | sed
script que:ytplay 'https://www.youtube.com/watch?v=${id}'
e assim por diante...curl "$yturl" | grep url_encoded_fmt_stream_map
para ver todo o bloco.grep
exposto acima, encontrará a lista no campo"
delimitado por aspas...stream_map: "
.%[[:hexdigit:]]\{2\}
codificação em links de trabalho./tmp/vid.${mime-type}
mas seytplay
for chamado com um segundo argumento, ele interpretará isso como o nome do arquivo de download direcionado - enquanto ainda anexa a extensão de acordo com o tipo mime.terminology
a mídia de impressão em segundo plano agora escape terminal; caso contrário, ele simplesmente desiste e deixa uma mensagem de erro em maiúsculas.\033}bt[LINK/FILE]\0
para reprodução em janela cheia.pn
abriria para uma nova janela. Existem outras para limitar geometricamente a área de jogo - como apenas para uma parte da janela, por exemplo.Isso passou por um pouco mais do que testes mínimos , mas até agora funcionou para todos os links sem falhas, exceto um - e porque eu não estava realmente interessado em assistir ao que não tocava, não tentei descobrir porque.
Embora funcionasse para todos eles, não necessariamente reproduzia cada um - e isso ocorre porque no começo eu anexei cegamente a
.mp4
extensão ao arquivo de destino sem verificar se estava correta. É possível que o que eu não examinei antes fosse apenas isso também. De qualquer forma, eu mudei para lidar com isso.Como mencionei antes, o único
terminology
bit específico está na última função -play()
- e você pode alterá-lo facilmente para fazer o que quiser com o arquivo de vídeo baixado / baixado - como usá-lo commplayer
as bibliotecas CACA de outro terminal, ou então abra-o em umavlc
janela ou o que for. Mas se você gosta de si mesmo, assistirá em alta definiçãoterminology
.Ah, e por último, isso geralmente é muito rápido - minhas velocidades aumentaram minha largura de banda pela duração até agora em todas as tentativas, mas
terminology
não precisam do arquivo inteiro para começar a reproduzi-lo.Aqui está funcionando:
fonte
/tmp/vid.mp4
talvez você deva usarmktemp --suffix=.mp4
, não?terminology
ogstreamer
back-end possa acidentalmente executar código executável em um arquivo de vídeo ... Talvez. Duvido, mas não o suficiente para ter certeza. De qualquer forma, prefiro que sempre escreva sobre o mesmo arquivo, a menos que eu diga o contrário, mas se eu tentar melhorar - como a escolha do tamanho e outras coisas - definitivamente vou corrigir isso também.terminology
a todos - aqueles vãotmux
'spty
porquetmux
detém lado o mestre dos intervenientespty
s eterminology
é dono de lado o mestre detmux
' spty
. Para lidar com isso você pode fazer como ...PTTY=$(tty) tmux ...
então natmux
sessão como ...tybg >"$PTTY"
. Na verdade, acabei de responder o mesmo problema que você está tendo aqui ontem. O script acima deve funcionar comoytplay ... >"$PTTY"
dentro de um multiplexador dessa maneira.Há um tutorial para isso no youtube:
https://www.youtube.com/watch?v=QCuq0_nY3Xk
De acordo com o vídeo, o seguinte deve funcionar:
Você pode criar uma função simples para esta finalidade:
fonte
mplayer <(youtube-dl -o - "https://www.youtube.com/watch?v=QCuq0_nY3Xk")
mplayer
escolhe automaticamente o melhor driver de saída e, se você tiver o Xorg em execução, provavelmente escolherá oxv
driver. Tente adicionar a seguinte opçãomplayer
de escolher o driver arte consola ASCII:-vo caca
.Em https://github.com/mps-youtube/mps-youtube
fonte