Ich suche nach einer Möglichkeit, YouTube-Videos im Terminal anzusehen (nicht in einem Browser oder einem anderen Fenster, sondern genau dort, in einer beliebigen Bash-Sitzung).
Gibt es eine einfache Möglichkeit, dies zu tun?
Ich stelle mir so etwas vor:
$ youtube <video-url>
Ich kann bereits ein Video abspielen mit mplayer
:
$ mplayer -vo caca local-file.avi
Dies öffnet jedoch ein neues Fenster. Es wäre cool, es im Terminal zu spielen.
Außerdem sollte es mit tmux
Sitzungen kompatibel sein .
Ich habe eine andere Frage gestellt, um zu verhindern, dass ein neues Fenster geöffnet wird .
Für diejenigen, die sich fragen, wo ich eine solche Funktionalität benötige, habe ich ein experimentelles Projekt namens TmuxOS gestartet - mit dem Konzept, dass alles innerhalb einer tmux
Sitzung ablaufen soll .
Also, in der Tat brauche ich einen Videoplayer für lokale und entfernte Videos. :-)
quelle
mpv <youtube url>
. Es funktioniert auch für eine Reihe anderer Video-Sites. Dies öffnet aber ein neues Fenster.Antworten:
Sie können Videos und / oder nur die Audiodateien herunterladen und diese dann mit ansehen / anhören
youtube-dl
. Das Skript ist in Python geschrieben und bedient sichffmpeg
meines Erachtens.Um Videos herunterzuladen, geben Sie einfach die URL der Seite ein, auf der Sie das Video haben möchten, und das Skript erledigt den Rest:
Sie können diese dann lokal mit
vlc
odermplayer
ansehen:OK, aber ich möchte diese Videos als Stream & in ASCII ansehen
Ich fand diesen Blog-Artikel mit dem Titel: Auf ASCII, Youtube und Loslassen , der die Methode demonstriert, die ich im Chatroom besprochen habe, hauptsächlich
youtube-dl
als "Backend", das das Herunterladen des YouTube-Streams und die Weiterleitung zu einer anderen App ermöglicht.Dieser Artikel zeigt, wie es gemacht wird mit
mplayer
:Das von heruntergeladene Video
youtube-dl
wird über STDOUT weitergeleitet-o -
. Hier gibt es eine Demo des Effekts .Durch die Installation zusätzlicher Bibliotheken kann das ASCII-Video weiter verbessert werden.
OK, aber ich möchte das Video in meinem aktuellen Terminal?
Ich habe diesen Trick gefunden, mit dem Videos in einem
xterm
der folgenden O'Reilly- Artikel abgespielt werden können : Videos in ASCII Art ansehen .Das obige führt dazu, dass ein
xterm
Fenster geöffnet wird, in dem das Video abgespielt wird.Also dachte ich mir, warum man die Erdnussbutter und die Schokolade nicht so zusammensetzt:
Das funktioniert fast! Ich bin nicht sicher, warum das Video nicht im Fenster abgespielt werden kann, aber es scheint, als ob dies möglich wäre. Das Fenster öffnet sich und beginnt zu spielen, schließt sich aber wieder. Ich sehe Video für ein paar Sekunden und dann nichts.
Vielleicht bringt Sie das Obige näher an Ihre endgültige Lösung, oder vielleicht müssen Sie die Optionen nur ein wenig anpassen.
Zusätzliche Bibliotheken
Wenn Sie
libcaca
(die kolorierte Version vonaalib
) installiert haben und die Schriftgröße in Ihrergnome-terminal
auf etwas wirklich Kleines reduzieren , wie z. B. 3, zeigt der folgende Befehl ein viel besser aussehendes ASCII-Video direkt im Terminal an:Terminals
Es scheint, dass die Wahl des Terminals eine große Rolle spielt, ob
mplayer
es direkt im Terminal abgespielt werden kann oder ob es ein separates Fenster öffnet. Auch das Cachen aufmplayer
machte einen dramatischen Unterschied, wenn es darum ging, direkt in einem Terminal zu spielen.Mit diesem Befehl konnte ich
terminator
zumindest das erste Viertel des Videos vor dem Ausschneiden abspielen :Die farbige Version verwendete diesen Befehl:
Dieselben Befehle könnten auch in
gnome-terminal
&xterm
abgespielt werden.HINWEIS: Das ist (von links nach rechts)
xterm
,terminator
,gnome-terminal
, undterminology
.quelle
terminology
- und nicht nur mit den Caca-Bibliotheken. Sie können Terminal-Escape-Zeichen verwenden, um einen zugeordneten Teil des Terninal-Fensters anzugeben und dort in High-Def abzuspielen. Sie können das Video sogar auf Ihren Hintergrund einstellen und darüber arbeiten.terminology
Verstehe auch URIs - erhalte einen Weblink zu deinem YouTube-Video und rufeprintf
es einfach wie eine Terminal-Eingabeaufforderung auf dem Bildschirm auf.tybg my.avi
tut es.printf
Methode. Tun ,tybg somefile | sed -n l
um zu sehen , wie es funktioniert - es nutzt nur erweiterte Terminal entweicht. Sie sind auf derman
Seite dokumentiert . Das können Sie auch mit tunty{ls,cat}
. Aber diese kleinen Apps sind nur alte Demo-Wrapper der realen Sache und vielleicht nicht so fähig. Wie auch immer, wenn deine Version in den letzten paar Monaten erstellt wurde, magst du die Miniview vielleicht genauso wie ich - mache Strg + Shift + H. Alle Erleuchtung ist ziemlich gut - deshalb habe ich vorgeschlagen, dass Sie es vor kurzem versuchen. Es ist auch verrückt schnell.Mit der Terminologie (übrigens das Beste, was einem Terminal-Emulator jemals passiert ist) zum Zeitpunkt dieses Schreibens funktioniert Folgendes:
Das
terminology
spezifische Bit ist derthen
Block inplay()
derprintf \033}...
Zeile.terminology
Akzeptiert erweiterte Terminal-Escapes für Druckmedien auf dem Bildschirm - ein bisschen wie sofortige Farben, aber auch HD-Videos und im Grunde alles, was Sie wollen.Der Rest ist ein bisschen
curl | sed
Skript , dass:ytplay 'https://www.youtube.com/watch?v=${id}'
und so weiter...curl "$yturl" | grep url_encoded_fmt_stream_map
, um den ganzen Block zu sehen.grep
finden Sie die Liste im durch"
Anführungszeichen getrennten...stream_map: "
Feld.%[[:hexdigit:]]\{2\}
Codierung in funktionierende Links./tmp/vid.${mime-type}
aber wennytplay
sie mit einem zweiten Argument aufgerufen wird, interpretiert sie dies als den Dateinamen des gezielten Downloads - während die Erweiterung weiterhin nach MIME-Typ angehängt wird.terminology
‚s Platz Medien im Hintergrund jetzt Terminal Escape, sonst nur es gibt auf und läßt Dich mit einer Fehlermeldung all in Kappen.\033}bt[LINK/FILE]\0
für Full-Window-Spiel.pn
würde es in einem neuen Fenster öffnen. Es gibt andere Möglichkeiten, um den Spielbereich geometrisch zu begrenzen - beispielsweise nur für einen Teil des Fensters.Dies hat nur ein wenig mehr als nur minimale Tests durchgemacht , hat aber bisher für jeden Link ohne Fehler funktioniert - und weil ich nicht wirklich daran interessiert war, denjenigen zu sehen, der nicht gespielt hat, habe ich nicht versucht, es herauszufinden Warum.
Während es für alle von ihnen arbeitet, dauert es nicht unbedingt spielt jeder - und das ist , weil zunächst blind ich die beigefügte
.mp4
Erweiterung der Zieldatei , ohne zu überprüfen , ob es richtig war. Es ist möglich, dass derjenige, den ich vorher nicht untersucht habe, auch nur dieser war. In jedem Fall habe ich es geändert, um damit umzugehen.Wie ich bereits erwähnte, ist das einzige
terminology
spezifische Bit in der allerletzten Funktion -play()
- und so können Sie es leicht ändern, um mit der heruntergeladenen / heruntergeladenen Videodatei alles zu tun, was Sie wollen - wie sie mitmplayer
CACA-Bibliotheken in einem anderen Terminal zu verwenden oder knallen Sie es in einvlc
Fenster oder was auch immer. Aber wenn du dich magst, siehst du es dir in High Definition anterminology
.Oh, und zu guter Letzt ist dies normalerweise sehr schnell - meine Geschwindigkeit hat meine Bandbreite für die bisherige Dauer bei jedem Versuch maximiert, es ist
terminology
jedoch nicht erforderlich, dass die gesamte Datei abgespielt wird.Hier funktioniert es:
quelle
/tmp/vid.mp4
vielleicht solltest du verwendenmktemp --suffix=.mp4
, nein?terminology
, dasgstreamer
Backend kann versehentlich ausführbaren Code in einer Videodatei ausführen ... Vielleicht. Ich bezweifle es, aber ich kann nicht genug sagen. Wie auch immer, ich bevorzuge es, immer über dieselbe Datei zu schreiben, sofern ich nichts anderes sage, aber wenn ich es besser machen will - wie z. B. die Größenauswahl und so weiter - werde ich das definitiv auch beheben.terminology
überhaupt - jene zu gehen ,tmux
ist ,pty
weiltmux
der Seite derer dazwischen Master besitztpty
s undterminology
besitzt die Master - Seite vontmux
'spty
. Zu behandeln , die Sie tun können , wie ...PTTY=$(tty) tmux ...
dann in dertmux
Sitzung wie ...tybg >"$PTTY"
. Ich antwortete eigentlich nur das gleiche Problem , das Sie haben hier erst gestern. Das obige Skript sollteytplay ... >"$PTTY"
auf diese Weise wie in einem Multiplexer funktionieren .Auf youtube gibt es dazu ein Tutorial:
https://www.youtube.com/watch?v=QCuq0_nY3Xk
Laut diesem Video sollte folgendes funktionieren:
Zu diesem Zweck können Sie eine einfache Funktion erstellen:
quelle
mplayer <(youtube-dl -o - "https://www.youtube.com/watch?v=QCuq0_nY3Xk")
mplayer
wählt automatisch den besten Ausgabetreiber aus. Wenn Xorg ausgeführt wird, wird wahrscheinlich derxv
Treiber ausgewählt. Versuchen Sie, die folgende Option hinzugefügt , ummplayer
die Konsole ASCII - Art - Treiber auszuwählen:-vo caca
.Von https://github.com/mps-youtube/mps-youtube
quelle