Jak słuchać radia, gdy nas przy radiu nie ma? 19


ARTYKUŁ KONKURSOWY
Niniejszy artykuł zdobył nagrodę główną w naszym konkursie – gratulujemy!

Jak zwykle pod koniec roku w radiowej Trójce pojawiła się wspaniała audycja: muzyczny Top Wszech Czasów. Bardzo chciałem jej posłuchać, jednak niezależne ode mnie okoliczności sprawiły, że nie mogłem w tym czasie być przy radiu. Rozwiązanie było bardzo proste – trzeba audycję nagrać, żeby móc ją odsłuchać potem. Gorzej z realizacją. Ale od czego mamy nasz system?

Trójka, podobnie jak sporo innych stacji radiowych, nadaje swój sygnał również w Internecie:

Do nagrania strumienia audio skorzystamy z programu VLC, który znajduje się w repozytoriach Ubuntu. Ma on tę zaletę, że może służyć nie tylko jako zwykły odtwarzacz plików multimedialnych, ale także jako konwerter strumienia. W naszym przypadku potraktujemy go właśnie jako pośrednik w przekazywaniu strumienia danych: źródłem strumienia będzie internet, natomiast celem plik na dysku.

Na początek uruchomimy program ręcznie i zobaczymy, czy wszystko działa. Uruchamiamy VLC (Programy->Dźwięk i obraz->Odtwarzacz multimediów VLC).

Program VLC
Rysunek 1. Program VLC

Z menu Media wybieramy pozycję „Konwertuj/Zapisz…”. Teraz pojawią się dwa okna. W pierwszym wybieramy źródło strumienia – w moim przypadku musiałem przejść do zakładki „Sieć”, żeby móc podać adres strumienia z Internetu.

Opcje otwarcia strumienia
Rysunek 2. Opcje otwarcia strumienia

Klikamy na przycisk „Konwertuj/Zapisz” i przechodzimy do drugiego okna, gdzie podamy cel strumienia. Jako wyjście należy oczywiście zaznaczyć opcję „Plik”, ale do testów można również zaznaczyć opcję „Odtwarzanie lokalne”. Dzięki temu będziemy słyszeć, co się nagrywa.

W części „Profil” można wybrać rodzaj kompresji i typ kontenera w pliku docelowym. Żeby ułatwić sprawę przygotowano kilka profili, z których można wybrać najbardziej nas interesujący. Ponieważ nagrywam sam dźwięk, więc wybieram „Ogg/Vorbis”.

Opcje zapisu strumienia
Rysunek 3. Opcje zapisu strumienia

Klikamy przycisk „Save” (z niewiadomych powodów nieprzetłumaczony na „Zapisz”) i jeżeli wszystko jest skonfigurowane poprawnie, to VLC powinien zacząć odtwarzać dźwięk, jednocześnie zapisując go do pliku.

Żeby uruchomić program o zadanej godzinie skorzystam z demona Cron. Problem jedna w tym, że Cron uruchamia polecenia nie korzystając z myszki – nie zmusimy go do przeklikania się przez opcje programu VLC. Musimy mieć polecenie, które można uruchomić z konsoli.

A to da się bardzo prosto zrobić. Na dole okna, gdzie określaliśmy parametry pliku docelowego, znajduje się sekcja „Generowany string strumienia wyjściowego”. Znajduje się tam zapis, który jest uaktualniany za każdym razem, gdy zmienimy coś w opcjach. Ów zapis zawiera zebrane w jednym miejscu opcje dotyczące wyjściowego pliku! W moim przypadku zapis wygląda tak:

:sout=#transcode{acodec=vorb,ab=128,channels=2}:duplicate{dst=std{access=file,mux=ogg,dst=trojka.ogg}}

Dokładny opis parametrów można znaleźć w dokumentacji VLC, jednak żeby powyższy zapis stał się jasny:

  • sout – oznacza wyjście strumienia
  • transcode – przetworzenie (konwersja) strumienia danych wewnątrz programu
    • acodec – użyty w kompresji kodek. Tutaj: Vorbis
    • ab – gęstość danych (bitrate). Tutaj: 128 kbit/s
    • channesl – ilość kanałów dźwięku. Tutaj: stereo
  • duplicate – Przetworzony strumień ma być skopiowany i przesłany dalej. Tutaj: celem (dst) jest standardowe wyjście (std).
    • access – cel strumienia. Tutaj: zwykły plik
    • mux – struktura kontenera. Tutaj: Ogg
    • dst – plik. Tutaj: trojka.ogg

Powyższy zapis wykorzystamy, żeby uruchomić VLC z linii poleceń. Tutaj mała uwaga: zapis należy lekko poprawić, to znaczy usunąć „:sout=” z początku. Generalnie uruchomia się VLC w następujący sposób:

vlc --sout "parametry_wyjścia" źródło_strumienia

ale można też tak:

cvlc --sout "parametry_wyjścia" źródło_strumienia

„cvlc” różni się od „vlc” tylko tym, że jest uruchomiony w konsoli i nie potrzebuje menadżera okien. Jest to szczególnie przydatne, gdy uruchamiany program z Crona. W moim przypadku polecenie wygląda następująco:

cvlc --sout "#transcode{acodec=vorb,ab=128,channels=2}:duplicate{dst=std{access=file,mux=ogg,dst=trojka.ogg}}" http://www.polskieradio.pl/st/program3M.asx

Jeżeli wszystko działa, to pozostaje nam tylko skonfigurować Crona, by uruchomił VLC o odpowiedniej godzinie. W tym celu trzeba edytować (z uprawnieniami administratora) plik /etc/crontab:

sudo gedit /etc/crontab

Plik zawiera informacje o tym kiedy i jakie polecenia uruchomić. Każda linijka to jedno polecenie. Kolejne kolumny w linii oznaczają minutę, godzinę, dzień miesiąca, miesiąc i dzień tygodnia, kiedy polecenie ma być uruchomione. Potem informacja o tym, z uprawnieniami jakiego użytkownika ma być uruchomione polecenie, a na końcu to, co ma się uruchomić. Jeżeli chcemy, żeby nagrywanie radia rozpoczęło się o godzinie 15:00, to należy do pliku dopisać następującą linijkę:

0 15 * * * Twoja_nazwa_użytkownika cvlc --sout "#transcode{acodec=vorb,ab=128,channels=2}:duplicate{dst=std{access=file,mux=ogg,dst=ścieżka_do_pliku/trojka.ogg}}" http://www.polskieradio.pl/st/program3M.asx

Proszę tylko pamiętać, żeby poprawnie wpisać swoją nazwę użytkownika i ścieżkę do pliku. Zakładając, że chcemy skończyć nagrywanie o godzinie 19:20, należy dodać jeszcze jedną linijkę:

20 19 * * * Twoja_nazwa_użytkownika killall vlc

Jest to dość brutalny, ale skuteczny sposób, by przerwać nagrywanie… Teraz wystarczy odświeżyć Crona:

sudo /etc/init.d/cron restart

Gotowe! Jeżeli zostawimy komputer włączony, a sami wybierzemy się do cioci na herbatkę, to powrocie w pliku będzie czekać na nas oczekiwana audycja.

Na zakończenie chciałbym wspomnieć o jednej rzeczy. Mimo, że w opcjach programu VLC znajduje się możliwość zapisu do pliku MP3, to zapis taki się nie powiedzie. Powodem są ograniczenia patentowe za oceanem – VLC w paczkach w repozytorium jest kompilowany bez możliwości zapisu do MP3. Jeżeli ktoś bardzo pragnie zapisać dźwięk od razu do tego formatu, musi sobie skompilować VLC samemu ze źródeł.

VLC ma dużo więcej opcji (można nim zapisać także wideo), ale to już zupełnie inna bajka…


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

19 komentarzy do “Jak słuchać radia, gdy nas przy radiu nie ma?

  • szmergiell

    Kelo: dokładnie. Łącząc streamrippera z „at” bądź cronem (jeżeli audycja jest cykliczna) wystarczy mieć włączony komputer i już „słuchasz” radia.

  • Smiecho Autor wpisu

    StreamRipper? Zbyt łatwo by było… 🙂

    A na poważnie, to jest kilka powodów użycia VLC:
    – streamripper domyślnie nie obsługuje strumieni Windows Media (a także RealAudio i ultravox),
    – mamy od razu kompresję (chociaż pewnie dałoby się jakoś pobawić streamripperem, lame i potokami),
    – w momencie wyjścia z domu szukałem rozwiązania na szybko i… zapomniałem o streamripperze. 🙂

  • celafon

    A od kiedy to cron wymaga restartu po zmianie crontab? i po co edytować /etc/crontab?

    jako user:

    crontab -e

    i edytujemy. w Ubuntu pojawiło mi się jako bonus mile pytanko o wybór edytora. chyba można tez wymusić przez jakąś zmienną środowiskową…

    w każdym razie po zapisie tego co wpiszemy po tym poleceniu nie trzeba nic restartować, a crony działają jako nasz user a nie root…

  • slotwek

    To ja siedzialem do 2.00 rano i mi sie nie udalo… A tu taki artykul… Dzis sprobuje jeszcze raz… Oczywiscie mnie interesowal strumien mms, ale moze teraz bedzie latwiej. Z gory dzieki za artykul 🙂

  • fooof

    Po pierwsze gratulacje za artykuł. Po drugie, to właśnie to mnie dobija w ubuntu. GDZIE TE NAJCUDOWNIEJSZE „Tak, dalej, dalej, zapisz, zakończ”.

    Ale i tak gratuluje!

  • LordD

    Twoje dane wejściowe nie moga byc otwarte :
    VLC is unable to open the MRL 'mms://stream.polskieradio.pl/program3?MSWMExt=.asf’. Check the log for details.

  • Smiecho Autor wpisu

    [quote comment=”35487″]Twoje dane wejściowe nie moga byc otwarte :
    VLC is unable to open the MRL 'mms://stream.polskieradio.pl/program3?MSWMExt=.asf’. Check the log for details.[/quote]
    Do rozwiązywania problemów bardziej nadaje się forum. Załóż tam temat i dołącz logi błędów.

  • fieloryb

    [quote post=”3562″]Na zakończenie chciałbym wspomnieć o jednej rzeczy. Mimo, że w opcjach programu VLC znajduje się możliwość zapisu do pliku MP3, to zapis taki się nie powiedzie. Powodem są ograniczenia patentowe za oceanem – VLC w paczkach w repozytorium jest kompilowany bez możliwości zapisu do MP3. Jeżeli ktoś bardzo pragnie zapisać dźwięk od razu do tego formatu, musi sobie skompilować VLC samemu ze źródeł.[/quote]

    Niekoniecznie, niekoniecznie. Przy zainstalowanej wersji VLC media player 0.8.6e Janus i zainstalowanym w systemie kodeku (dystrybucja Hardy Heron) mój skrypt bash’a wygląda następująco:

    [code]
    #!/bin/bash
    vlc –sout „#transcode{acodec=mp3,ab=128,channels=2}:duplicate{dst=std{access=file,mux=dummy,dst=trojka.mp3}}” http://www.polskieradio.pl/st/program3M.asx
    [/code]

    Jak widać wprowadziłem tu następujące istotne zmiany względem oryginału:
    [code]
    acodec=mp3
    mux=dummy
    [/code]
    co po nadaniu mu odpowiednich praw do wykonywania spowoduje po uruchomieniu stworzenie pliku mp3 w katalogu w którym został umieszczony.

  • yarof

    Trochę zmodyfikowałem nazwę pliku, aby automatycznie dodawała się data nagrania (w przykładzie zapis do wav)

    „c:Program FilesVideoLANVLCvlc.exe” –sout „#transcode{acodec=s16l,channels=2, samplerate=44100}:duplicate{dst=std{access=file,mux=wav,dst=trojka_%Y-%m-%d_%H.%M.wav}}” http://www.polskieradio.pl/st/program3M.asx

    Powstaje plik o przykładowej nazwie „trojka_2010-01-01_20.00.wav”

    Tak umieszczone polecenie w zaplanowanych zadaniach oraz w załadce aktywna opcja Zatrzymaj zadanie, gdy jest ono uruchmione przez xx h yy min i już nic nie trezba robić – nagrywa się cyklicznie samo (nawet podczas urlopu) i nie nadpisuje utworzonego pliku.

  • fieloryb

    ->Czesław

    Jeśli nie ma VLC to instalujemy w konsoli:

    sudo apt-get update[enter][hasło]
    sudo apt-get upgrade[enter]
    sudo apt-get install vlc

  • Martin

    Super instrukcja, jednak jakoś nie mogę pomimo jej spowodować, by plik OGG był niepusty. Coś dałoby się przybliżyć w kwestii zatrzymywania nagrywania? Poza tym mamy opcję :start-time=xxx – czy jest też jakiś stop-time?