W sobotę siedzę sobie z kolegą, pije… coś chłodnego, bo akurat pogoda była dość ładna, a i okazji do spotkań ostatnio zdecydowanie mniej. W pewnym momencie odzywa się do mnie koleżanka, że ogląda jakąś konferencję, kilka godzin za nią, ale jeszcze kilka przed nią. I choć – wg koleżanki – konferencja marketingowo napompowana, to w środku – niczym w balonie – pusto, więc nie bardzo ma ochotę siedzieć jeszcze kilka godzin i oglądać. Niestety jednak obejrzeć – choćby po łebkach – musiała/chciała, bo jej główna klientka ogląda, i to ona jej poleciła, więc wiecie, rozumienie. W każdym razie pytanie do mnie było, czy dałoby się to jakoś nagrać, tak by „do kotleta” obejrzeć w przyszłości.
Pobieranie wideo (live i VOD) za pomocą programu Streamlink
Dostałem link do konferencji i tam niespodzianka – YouTube Live, czyli jest dobrze, bo z YouTube pobrać materiał wideo jest wręcz banalnie (to jednak nie Vimeo z zabezpieczeniami ;-)). Problem w tym, że to live, i jest informacja, że od razu po zakończeniu konferencji bezpłatny dostęp do nagrania zostanie wyłączony. A to już komplikowało sprawę. Przynajmniej potencjalnie, bo niecałą minutę później ów live zapisywał się już na moim dysku. Kolega trochę zaskoczony, że to takie banalne, więc od razu pomyślałem, że warto napisać o tym poradnik/artykuł.
Możliwości są różne, jak lubię program Streamlink, który ma dla mnie kilka ważnych zalet:
- Jest dostępny na różne systemy operacyjne, od Windowsa po Linuksa
- Obsługuje wiele formatów i serwisów (choć z większym naciskiem na live niż VOD)
- Jest niezwykle skuteczny, a do tego generuje niewielkie obciążenie
- Jest wręcz banalny w obsłudze (choć z wiersza poleceń)
- Można uruchomić i na komputerze, i na serwerze
- Jest dostępny bezpłatnie
Lista obsługiwanych serwisów jest długa (z większym naciskiem na live niż VOD), a na liście znajdziemy m.in. youtube.com, vimeo.com, tvpstream.vod.tvp.pl, twitch.tv, facebook.com, dailymotion.com, drive.google.com, docs.google.com, periscope.tv, streamable.com, bloomberg.com, nbc.com, nbcsports.com, livestream.com, a do tego wsparcie m.in. dla plików/formatów m3u8/HLS/RTMP/HDS po pliku lub adresie URL:
- Adobe HTTP Dynamic Streaming: hds://
- Akamai HD Adaptive Streaming: akamaihd://
- Apple HTTP Live Streaming: hls://
- MPEG-DASH: dash://
- Real Time Messaging Protocol: rtmp:// rtmpe:// rtmps:// rtmpt:// rtmpte://
- Progressive HTTP, HTTPS, etc: httpstream://
- Local files: file://
Jak widać, jest tego chyba nawet więcej niż trochę… ;-)
Nie będę tutaj opisywał instalacji, bo ta nie tylko zależy od systemu operacyjnego, ale jest też dość dobrze opisana w dokumentacji projektu. Bardziej chciałem pokazać, że taki program jak Streamlink istnieje, oraz jak banalna – nawewt jeśli z wiesza poleceń, choć jest też Streamlink Twitch GUI – jest jego obsługa.
Z racji tego, że impulsem do napisania tego artykułu była wiadomość od koleżanki na temat streamingu live na YouTube, to poniżej będę używał przykładowego adresu w tym serwisie. Ale w większości przypadków, gdy chcemy nagrać coś z innego serwisu, czy też korzystając z jednego z obsługiwanych protokołów, wystarczy podmienić adres URL na właściwy.
Jeśli live już trwa, a mamy sekundę, to warto zacząć od sprawdzenia, jakie mamy dostępne formaty (jakość streamingu), korzystając z polecenia:
streamlink https://www.youtube.com/watch?v=ABCDEF
W odpowiedzi dostaniemy wynik w stylu:
Available streams: 144p (worst), 240p, 360p, 480p, 720p, 1080p (best)
Wybrany format (można też wpisać „worst” dla najniższej jakości, i „best” dla najlepszej) wstawiamy do linku, oraz określamy plik docelowy, i to właściwie wszystko, co trzeba zrobić:
streamlink -o h:\temp\output.mp4 https://www.youtube.com/watch?v=ABCDEF 360p
Jest to polecenie dla systemu Windows, w systemie Linux oczywiście ścieżki zapisujemy trochę inaczej, np.:
streamlink -o /media/usb01/output.mp4 https://www.youtube.com/watch?v=ABCDEF 360p
Jest to oczywiście najbardziej podstawowa komenda, którą w przypadku niektórych serwisów trzeba rozbudować o dodatkowe parametry (np. dane logowania, format/typ streamingu). Ale to znajdziemy w dokumentacji i pomocy programu:
streamlink --help
Czasem korzystam z parametru, który pozwala pobierać/zapisywać materiał (dużo) szybciej niż w czasie rzeczywistym, wtedy polecenie zapisywania będzie wyglądać np. tak:
streamlink -o /media/usb01/output.mp4 https://www.youtube.com/watch?v=ABCDEF 360p --hls-segment-threads 5
Oczywiście dotyczy to tylko materiałów, które zostały już w całości wyemitowane, albo mam bardzo duży zapas.
I chyba to tyle, bo jak widać, obsługa programu jest banalna. Sam mam program Streamlink zainstalowany zarówno na komputerze (Windows), jak i na jednym z serwerów VPS (Linux Debian), tak by móc „nagrywać” bez potrzeby trzymania komputera włączonego, co się przydaje, zwłaszcza w przypadku nie tylko dłuższych live’ów, ale też tych transmitowanych o „mniej typowych” porach.
- Home Assistant 2024.11, czyli „sekcje” domyślnym widokiem z opcją migracji, WebRTC oraz wirtualna kamera - 1970-01-01
- Black Friday w ZUS, czyli jest jeszcze kilka dni, by złożyć wniosek RWS i skorzystać z wakacji składkowych płacąc ZUS za grudzień 2024 - 1970-01-01
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
Do tego mogę polecić jeszcze LiveProxy: https://liveproxy.github.io/
Dzięki Streamlinkowi i LiveProxy możliwe jest np. tworzenie list odtwarzania, zawierających strumienie z różnych serwisów, dla których nie da się wygenerować stałego linku i wygodne ich odtwarzanie przy użyciu dowolnego odtwarzacza obsługującego odtwarzanie pliku z adresu URL.
Poza tym, na tunerze z systemem Enigma2, te dwie aplikacje razem pozwalają na zamieszczanie bezpośrednio na liście kanałów (bez „przeklikiwania się” przez menu, co jest sporym ułatwieniem dla osób mniej obeznanych technicznie) np. kanałów na żywo z YouTube’a.
Uprzedziłeś trochę jeden z kolejnych artykułów, bo jak tylko pomyślałem, by napisać o Streamlink (często jakieś zdarzenie musi „zdjąć” klątwę wiedzy), to od razu założyłem, że LiveProxy może być dobrym rozwinięciem tematu. Ale może i dobrze, bo patrząc na listę tematów, to ten temat mógłby trochę poczekać, a tak, kto zainteresowany ma już kierunek… ;-)
Chętnie poczytam więcej o możliwościach tych aplikacji z tunerami z Enigmą
@Patryk, a czy jest jakiś sposób żeby pobieranie zaczęło się od początku transmisji, a nie od momentu wykonania polecenia?
Potencjalnie jest możliwość rozpoczęcia pobierania od początku transmisji zamiast (dopiero) od momentu wykonania polecenia. Służy do tego parametr –hls-live-restart. Ale w przypadku YT coś tam w pewnym momencie przestało działać prawidłowo (zmiana HLS na DASH, czy coś w tym stylu) i nie wiem, czy już się uporali z tym problemem. Jeśli dobrze kojarzę, to jeszcze w 2020 problem miał status otwarty na GitHubie projektu. Nie wiem (nie sprawdzałem), czy już coś się udało zrobić z tym.
Witam,
interesuje mnie nagranie streamu z kamery. Obraz nadawany jest 24h, mnie interesuje wyłącznie jedna godzina. Czy jest opcja start o godzinie 12 i stop o godzinie 13?
Można rozpocząć i zakończyć rejestracje ręcznie, można też napisać skrypt, który to zautomatyzuje (łącznie z podpięciem do harmonogramu zadań).
W jaki sposób zakończyć rejestrację ręcznie. W tej chwili odpalam streamlink-a i nie wiem jak go wyłączyć. Proszę o pomoc
To już zależy od tego, w jakim systemie i jak uruchamiasz. W Linuksie możesz np. spróbować komendy timeout, możesz też – to już w sumie niezależnie od systemu – wysłać polecenie zakończenia procesu.
System: Windows 10. Streamlink uruchomiony w konsoli. Jak mam zakończyć nagrywanie? Jakiej komendy użyć lub jak zakończyć proces?