Estoy buscando una manera de ver videos de YouTube en la terminal (no en un navegador u otra ventana, sino allí mismo, en cualquier sesión de bash).
¿Hay una manera simple de hacer esto?
Me imagino algo como esto:
$ youtube <video-url>
Ya sé cómo reproducir un video usando mplayer
:
$ mplayer -vo caca local-file.avi
Sin embargo, esto abre una nueva ventana. Sería genial jugarlo en la terminal.
Además, debería ser compatible con las tmux
sesiones.
Hice otra pregunta sobre cómo evitar abrir una nueva ventana .
Para aquellos que se preguntan dónde necesito dicha funcionalidad, comencé un proyecto experimental llamado TmuxOS , con el concepto de que todo debería ejecutarse dentro de una tmux
sesión .
Entonces, de hecho necesito un reproductor de video para videos locales y remotos. :-)
terminal
video
adobe-flash
Ionică Bizău
fuente
fuente
mpv <youtube url>
. También funciona para muchos otros sitios de videos. Pero esto abre una nueva ventana.Respuestas:
Puede descargar videos y / o solo el audio y luego verlos / escucharlos usando
youtube-dl
. El script está escrito en Python y hace uso deffmpeg
creo.Para descargar videos, simplemente dele la URL de la página en la que desea el video y el script hace el resto:
Luego puede usar
vlc
omplayer
para verlos localmente:OK, pero quiero ver estos videos mientras se transmiten y en ASCII
Encontré este artículo del blog titulado: En ascii, youtube y dejarlo ir, eso demuestra el método que discutí en la sala de chat, principalmente
youtube-dl
como el "backend" que podría descargar el flujo de YouTube y luego redirigirlo a alguna otra aplicación.Este artículo muestra que se está haciendo con
mplayer
:El vídeo está descargando por
youtube-dl
se redirige a través de la salida estándar anterior,-o -
. Hay una demostración del efecto aquí .Con la instalación de bibliotecas adicionales, el video ASCII se puede mejorar aún más.
OK pero quiero el video en mi terminal actual?
Encontré este truco que permite reproducir videos en un
xterm
artículo de O'Reilly titulado: Ver videos en ASCII Art .Lo anterior hace
xterm
que se abra una ventana donde se reproduce el video.Entonces pensé, ¿por qué no poner la mantequilla de maní y el chocolate juntos de esta manera:
Esto casi funciona! No estoy seguro de por qué el video no se puede reproducir en la ventana, pero parece que debería poder hacerlo. La ventana aparece y comienza a jugar pero luego se cierra. Veo video por unos breves segundos y luego nada.
Quizás lo anterior lo acerque a su solución definitiva, o tal vez solo necesite modificar un poco las opciones.
Bibliotecas adicionales
Si ha
libcaca
instalado (la versión coloreada deaalib
) y reduce el tamaño de la fuentegnome-terminal
a algo realmente pequeño, como por ejemplo 3, el siguiente comando mostrará un video ASCII mucho mejor directamente en el terminal:Terminales
Parece que la elección del terminal puede hacer un gran problema en cuanto a si
mplayer
puede jugar directamente dentro del terminal o si abre una ventana separada. El almacenamiento en caché tambiénmplayer
marcó una diferencia dramática al poder jugar directamente en los terminales.Usando este comando pude jugar
terminator
, al menos durante el primer cuarto del video antes de que se cortara:La versión coloreada utiliza este comando:
Estos mismos comandos podrían jugar en
gnome-terminal
&xterm
también.NOTA: Eso es (de izquierda a derecha)
xterm
,terminator
,gnome-terminal
, yterminology
.fuente
terminology
, y no solo con las bibliotecas de caca. Puede usar escapes de terminal para especificar una parte asignada de la ventana terninal y reproducirla allí en alta definición. Incluso puedes configurar el video como fondo y trabajar sobre él.terminology
también comprende los URI: obtenga un enlace webm a su video de youtube y soloprintf
a la pantalla como un indicador de terminal.tybg my.avi
¿no?printf
método. Hagatybg somefile | sed -n l
para ver cómo funciona: solo usa escapes de terminal extendidos. Están documentados en laman
página. Puedes hacer lo mismo conty{ls,cat}
. Pero esas pequeñas aplicaciones son solo viejos envoltorios de demostración de lo real y tal vez no tan capaces. De todos modos, si su versión se ha creado en los últimos dos meses, es posible que le guste la miniview tanto como a mí: ctrl + shift + h. Toda la iluminación es igual de buena, es por eso que te sugerí que la probaras recientemente. También es una locura rápida.Entonces, con Terminología (probablemente lo mejor que le haya pasado a un emulador de terminal, por cierto) en el momento de escribir este artículo, funciona lo siguiente:
El
terminology
bit específico es elthen
bloque enplay()
laprintf \033}...
línea.terminology
acepta escapes de terminal extendidos para imprimir medios en la pantalla, algo así como colores rápidos, pero también video de alta definición y, básicamente, cualquier otra cosa que desee.El resto es un poco de
curl | sed
script que:ytplay 'https://www.youtube.com/watch?v=${id}'
y así...curl "$yturl" | grep url_encoded_fmt_stream_map
para ver todo el bloque.grep
anterior, encontrará la lista en el campo"
delimitado por comillas...stream_map: "
.%[[:hexdigit:]]\{2\}
codificación en enlaces de trabajo./tmp/vid.${mime-type}
pero siytplay
se llama con un segundo argumento, lo interpretará como el nombre de archivo de descarga específico, a la vez que agrega la extensión según el tipo MIME.terminology
los medios colocados en segundo plano ahora escape de terminal, de lo contrario simplemente se da por vencido y le deja un mensaje de error en mayúsculas\033}bt[LINK/FILE]\0
para jugar a ventana completa.pn
lo abriría a una nueva ventana. Hay otros para limitar geométricamente el área de juego, por ejemplo, solo para una parte de la ventana.Esto ha experimentado solo un poco más que pruebas muy mínimas , pero hasta ahora ha funcionado para cada enlace sin falta, excepto uno, y debido a que no estaba realmente interesado en ver el que no se jugó, no intenté averiguarlo por qué.
Si bien funcionó para todos ellos, no necesariamente se reprodujo cada uno, y esto se debe a que al principio adjunté ciegamente la
.mp4
extensión al archivo de destino sin verificar si era correcta. Es posible que el que no examiné antes fuera solo esto también. En cualquier caso, lo cambié para manejar eso.Como mencioné antes, el único
terminology
bit específico está en la última función,play()
por lo que puede modificarlo fácilmente para hacer lo que quiera con el archivo de video descargado / descargado, como usarlo conmplayer
las bibliotecas CACA en otro terminal, o salta a lavlc
ventana o lo que sea. Pero si te gustas, lo verás en alta definiciónterminology
.Ah, y por último, esto suele ser muy rápido : mis velocidades han maximizado mi ancho de banda hasta el momento en cada intento, pero de
terminology
todos modos no necesito el archivo completo para comenzar a reproducirlo.Aquí está funcionando:
fuente
/tmp/vid.mp4
tal vez deberías usarmktemp --suffix=.mp4
, ¿no?terminology
elgstreamer
backend accidentalmente pueda ejecutar código ejecutable en un archivo de video ... Tal vez. Lo dudo, pero no tengo suficiente para decir con certeza. De todos modos, prefiero que siempre escriba sobre el mismo archivo a menos que diga lo contrario, pero si consigo mejorarlo, como la selección de tamaños y tal, definitivamente lo arreglaré también.terminology
en todos - los que van atmux
'spty
porquetmux
posee el lado del maestro de los que intervienenpty
s yterminology
propietaria de la parte principal detmux
' spty
. Para manejar eso se puede hacer, como ...PTTY=$(tty) tmux ...
entonces en latmux
sesión como ...tybg >"$PTTY"
. De hecho, acabo de responder el mismo problema que tienes aquí ayer. La secuencia de comandos anterior debería funcionar comoytplay ... >"$PTTY"
dentro de un multiplexor de esa manera.Hay un tutorial para esto en youtube:
https://www.youtube.com/watch?v=QCuq0_nY3Xk
De acuerdo con ese video, lo siguiente debería funcionar:
Puede crear una función simple para este propósito:
fuente
mplayer <(youtube-dl -o - "https://www.youtube.com/watch?v=QCuq0_nY3Xk")
mplayer
elige automáticamente el mejor controlador de salida, y si tiene Xorg ejecutándose, probablemente elegirá elxv
controlador. Trate de añadir la siguiente opción demplayer
elegir el controlador de la consola arte ASCII:-vo caca
.Desde https://github.com/mps-youtube/mps-youtube
fuente