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.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk