Szukam sposobu na oglądanie filmów z YouTube'a w terminalu (nie w przeglądarce lub innym oknie, ale właśnie tam, w dowolnej sesji bash).
Czy istnieje prosty sposób to zrobić?
Wyobrażam sobie coś takiego:
$ youtube <video-url>
Wiem już, jak odtwarzać wideo, używając mplayer
:
$ mplayer -vo caca local-file.avi
Otwiera to jednak nowe okno. Byłoby fajnie zagrać w terminal.
Ponadto powinien być kompatybilny z tmux
sesjami.
Zadałem kolejne pytanie, jak zapobiec otwieraniu nowego okna .
Dla tych, którzy zastanawiają się, gdzie potrzebuję takiej funkcjonalności, rozpocząłem eksperymentalny projekt o nazwie TmuxOS - z założeniem, że wszystko powinno działać w ramach tmux
sesji .
Potrzebuję więc odtwarzacza wideo do lokalnych i zdalnych filmów. :-)
terminal
video
adobe-flash
Ionică Bizău
źródło
źródło
mpv <youtube url>
. Działa również w przypadku wielu innych witryn wideo. Ale to otwiera nowe okno.Odpowiedzi:
Możesz pobierać filmy i / lub tylko dźwięk, a następnie oglądać / słuchać ich za pomocą
youtube-dl
. Skrypt jest napisany w Pythonie i używaffmpeg
wierzę.Aby pobrać filmy, po prostu podaj adres URL strony, na której chcesz wideo, a skrypt zajmie się resztą:
Następnie możesz użyć
vlc
lub,mplayer
aby obejrzeć je lokalnie:OK, ale chcę oglądać te filmy, gdy są przesyłane strumieniowo i w ASCII
Znalazłem ten artykuł na blogu zatytułowany: Na ascii, youtube i puszczaniu, który demonstruje metodę, którą omawiałem na czacie, głównie
youtube-dl
jako „backend”, który mógłby pobierać strumień YouTube, a następnie przekierowywać go do innej aplikacji.W tym artykule pokazano, jak to zrobić
mplayer
:Wideo są pobierane przez
youtube-dl
zostaje przekierowany poprzez standardowe wyjście powyżej-o -
. Tutaj jest demonstracja efektu .Po zainstalowaniu dodatkowych bibliotek wideo ASCII można jeszcze bardziej ulepszyć.
OK, ale chcę wideo w moim terminalu?
Znalazłem tę sztuczkę, która pozwala na odtwarzanie wideo
xterm
w artykule O'Reilly zatytułowanym: Oglądaj wideo w sztuce ASCII .Powyższe powoduje
xterm
otwarcie okna, w którym odtwarzany jest film.Pomyślałem więc, dlaczego nie poskładać razem masła orzechowego i czekolady w ten sposób:
To prawie działa! Nie jestem pewien, dlaczego wideo nie może być odtwarzane w oknie, ale wydaje się, że powinno. Okno pojawia się i zaczyna grać, ale potem się zamyka. Przez kilka sekund widzę wideo, a potem nic.
Być może powyższe zbliży Cię do ostatecznego rozwiązania, a może po prostu trzeba nieco poprawić opcje.
Dodatkowe biblioteki
Jeśli
libcaca
zainstalowałeś (w wersji kolorowejaalib
) i zmniejszysz rozmiar czcionkignome-terminal
do czegoś naprawdę małego, na przykład powiedzmy 3, następujące polecenie wyświetli znacznie lepiej wyglądające wideo ASCII bezpośrednio w terminalu:Zaciski
Wydaje się, że wybór terminala może mieć duży wpływ na to, czy
mplayer
można grać bezpośrednio w terminalu, czy też otwiera osobne okno. Również buforowaniemplayer
miało ogromną różnicę w możliwości grania bezpośrednio w terminalach.Korzystając z tego polecenia, byłem w stanie zagrać
terminator
, przynajmniej dla pierwszej 1/4 wideo przed jego wycięciem:Wersja kolorowa używała tego polecenia:
Te same polecenia mogą być odtwarzane w
gnome-terminal
&xterm
też.UWAGA: To (od lewej do prawej)
xterm
,terminator
,gnome-terminal
, iterminology
.źródło
terminology
- i nie tylko w / lib caca. Możesz użyć klawiszy ucieczki terminala, aby określić odwzorowaną część okna rybitwy i odtworzyć ją właśnie w wysokiej rozdzielczości. Możesz nawet ustawić wideo jako tło i pracować nad nim.terminology
rozumie również identyfikatory URI - uzyskaj link webm do swojego filmu na youtube i po prostuprintf
do ekranu jak monit terminalu.tybg my.avi
robi to.printf
metodę. Zrobićtybg somefile | sed -n l
, aby zobaczyć jak to działa - po prostu używa rozszerzeń ucieczek zacisków. Są udokumentowane naman
stronie. Możesz zrobić to samo zty{ls,cat}
. Ale te małe aplikacje są tylko starymi opakowaniami demonstracyjnymi prawdziwych rzeczy i być może nie są tak skuteczne. W każdym razie, jeśli twoja wersja została zbudowana w ciągu ostatnich kilku miesięcy, możesz polubić mini-widok tak samo jak ja - ctrl + shift + h. Całe oświecenie jest prawie tak samo dobre - dlatego zasugerowałem, abyście spróbowali go niedawno. To także szalone szybkie.Tak więc, używając terminologii (przy okazji, prawdopodobnie najlepszej rzeczy, jaka kiedykolwiek przydarzyła się emulatorowi terminala) w czasie pisania tego tekstu, działa:
terminology
Specyficzny bit jestthen
blok wplay()
- naprintf \033}...
linii.terminology
akceptuje wydłużone ucieczki terminala dla mediów drukarskich na ekranie - coś w rodzaju szybkich kolorów, ale także wideo w wysokiej rozdzielczości i zasadniczo cokolwiek innego.Reszta to trochę
curl | sed
skryptu, który:ytplay 'https://www.youtube.com/watch?v=${id}'
i tak dalej...curl "$yturl" | grep url_encoded_fmt_stream_map
aby zobaczyć cały blok.grep
powyższe, znajdziesz listę w polu"
rozdzielanym cytatami...stream_map: "
.%[[:hexdigit:]]\{2\}
kodowanie na działające łącza./tmp/vid.${mime-type}
ale jeśliytplay
zostanie wywołany z drugim argumentem, zinterpretuje to jako docelową nazwę pliku do pobrania - jednocześnie dodając rozszerzenie zgodnie z typem mime.terminology
„s place mediów w tle teraz Terminal ucieczki, inni po prostu rezygnuje i zostawia cię z komunikatem o błędzie wszystkich w czapkach.\033}bt[LINK/FILE]\0
do gry w pełnym oknie.pn
wyskoczyłoby to do nowego okna. Istnieją inne geometryczne ograniczenia obszaru gry - na przykład tylko dla części okna.To przeszło tylko niewiele więcej niż bardzo minimalne testy, ale jak dotąd działało bez problemu dla każdego linku, ale jedno - a ponieważ tak naprawdę nie byłem zainteresowany oglądaniem tego, który nie grał, nie próbowałem się dowiedzieć dlaczego.
Chociaż zadziałało dla nich wszystkich, niekoniecznie grało dla każdego z nich - a to dlatego, że początkowo na ślepo dołączyłem
.mp4
rozszerzenie do pliku docelowego, nie sprawdzając, czy jest poprawne. Możliwe, że ten, na który wcześniej nie patrzyłem, był tylko tym. W każdym razie zmieniłem to, aby sobie z tym poradzić.Jak wspomniałem wcześniej, jedynym
terminology
konkretnym bitem jest ostatnia funkcja -play()
- więc możesz łatwo to zmienić, aby zrobić wszystko, co chcesz z pobranym / pobranym plikiem wideo - na przykład używając go zmplayer
bibliotekami CACA w innym terminalu, albo wyskocz to dovlc
okna lub cokolwiek innego. Ale jeśli lubisz siebie, obejrzysz to w wysokiej rozdzielczościterminology
.Aha, i na koniec, jest to zwykle bardzo szybkie - moje prędkości maksymalizowały moją przepustowość do tej pory przy każdej próbie, ale i
terminology
tak nie potrzebuje całego pliku, aby rozpocząć odtwarzanie.Tutaj działa:
źródło
/tmp/vid.mp4
może powinieneś użyćmktemp --suffix=.mp4
, nie?terminology
żegstreamer
backend może przypadkowo uruchomić kod wykonywalny w pliku wideo ... Może. Wątpię, ale nie jestem tego pewien. W każdym razie wolę, aby zawsze zapisywał ten sam plik, chyba że powiem inaczej, ale jeśli uda mi się ulepszyć - na przykład wybieranie rozmiaru i tym podobne - na pewno to naprawię.terminology
w ogóle - to będzietmux
„spty
ponieważtmux
jest właścicielem strony pan owych interwencyjnympty
s orazterminology
posiada stronę wzorcowątmux
” spty
. Aby poradzić sobie, że można zrobić jak ...PTTY=$(tty) tmux ...
następnie wtmux
sesji jak ...tybg >"$PTTY"
. Właśnie odpowiedziałem na ten sam problem, który masz tutaj wczoraj. Powyższy skrypt powinien działaćytplay ... >"$PTTY"
w taki sposób jak w multiplekserze.Na YouTube znajduje się samouczek:
https://www.youtube.com/watch?v=QCuq0_nY3Xk
Zgodnie z tym filmem powinny działać następujące elementy:
W tym celu możesz utworzyć prostą funkcję:
źródło
mplayer <(youtube-dl -o - "https://www.youtube.com/watch?v=QCuq0_nY3Xk")
mplayer
automatycznie wybiera najlepszy sterownik wyjściowy, a jeśli masz uruchomiony Xorg, prawdopodobnie wybierzexv
sterownik. Spróbuj dodać następujące opcje domplayer
wyboru sterownik konsoli sztuki ASCII:-vo caca
.Od https://github.com/mps-youtube/mps-youtube
źródło