Skrypt Radio2Podcast
O skrypcie
Krótki opis
Stworzyłem Radio2Podcast (z pomocą GPT-41) do nagrywania audycji radiowych i przekształcania ich w podcasty. Niektóre stacje pobierają opłaty za dostęp do archiwalnych transmisji – ten skrypt to sprytne obejście tego problemu. Skrypt automatycznie generuje także kanał RSS, co ułatwia późniejsze słuchanie w aplikacji do podcastów. Skrypt można wykorzystać do archiwizacji audycji radiowych. Można wybrać stację, ustawić czas nagrywania i zapisać pliki lokalnie, na serwerze FTP lub w NextCloud.
Skrypt można pobrać tutaj: Radio2Podcast 0.051
Lista zmian
- 2024-10-20 wydano wersję 0.051
- Dodano SFTP jako nową lokalizację zapisu, obok lokalnego, FTP i NextCloud.
- Nagrywanie odbywa się teraz w formacie .ts z oryginalną jakością strumienia, przed konwersją do wybranego formatu (np. mp3 lub opus).
- Dodano obsługę pauz podczas nagrywania (np. do pomijania reklam), kontrolowanych za pomocą parametrów wiersza poleceń. Więcej informacji w sekcji użycia.
- 2024-08-30 wydano wersję 0.05
- Zmieniłem nazwę skryptu z RSRS na Radio2Podcast.
- Zmiany w logice skryptu – od teraz nazwy audycji i stacji mogą składać się z kilku wyrazów. Jeśli tytuł audycji lub nazwa stacji zawierają specyficzne znaki diakrytyczne, skrypt zachowuje je w RSS, ale podczas tworzenia ścieżek do plików zastępuje je odpowiednikami łacińskimi.
- Dodano do config.json możliwość wyboru ścieżki zapisu plików lokalnie. Domyślnie jest to ./ (czyli lokalizacja skryptu), ale można użyć innego katalogu.
- 2024-07-18 wydano wersję 0.04
- Wiele drobnych poprawek, aby skrypt był bardziej wygodny w użyciu, zmieniając parametry wywołujące skrypt, dodając funkcję monitorującą liczbę plików przechowywanych lokalnie.
- 2024-05-01 wydano wersję 0.3
- Dodano podstawową obsługę podcastów. Skrypt przesyła plik na serwer FTP do odpowiedniego folderu, a następnie sprawdza listę plików audio w tym folderze i generuje plik RSS przy każdym uruchomieniu. Plik RSS jest zgodny ze standardami – chociaż nadal nie wiem, dlaczego nie można go dodać do PocketCasts. W innych aplikacjach do podcastów wszystko działa poprawnie. Plik RSS odnosi się do okładki w folderze, okładka musi być plikiem nazwanym podcast.jpg. Dodatkowo poprawiono zarządzanie ścieżkami plików.
- 2024-04-03 wydano wersję 0.02
- Skrypt został całkowicie przebudowany. Można wybrać format pliku (mp3 lub opus), bitrate i kanały (stereo lub mono) dla każdego miejsca docelowego. Umożliwia to zapisanie pliku lokalnie w formacie .opus 32kbps stereo, na FTP w formacie mp3 32kbps mono i w Nextcloud w formacie .opus 16kbps mono. Ta funkcja będzie również przydatna, gdy skrypt zacznie obsługiwać podcasty. Dodałem obsługę aac(m4a) do planu rozwoju.
- 2024-03-29 wydano wersję 0.01
Plan rozwoju
- wiele formatów
Możliwość zapisu różnych typów plików w zależności od lokalizacji (przykład: .mp3 na serwer FTP i .opus w NextCloud)(zrobione w wersji 0.02)- Możliwość użycia formatów opus, mp3, aac/m4a (w trakcie prac, obecnie brak obsługi aac/m4a)
- obsługa podcastów
Jeśli użytkownik zdecyduje się na zapis plików na FTP, skrypt powinien generować RSS podcastu.(zrobione w wersji 0.03)Kanał powinien być zgodny ze standardami podcastów.(zrobione w wersji 0.05)- Przepisanie kodu generującego RSS. Zamiast biblioteki pod2gen, użycie feedgen.
- Skrypt powinien generować prosty obraz okładki.
- ścieżka zapisu plików
Dodanie do pliku config.json możliwości wyboru ścieżki zapisu plików lokalnych. Przydatne, jeśli skrypt działa na VPS, na którym jednocześnie działa serwer WWW.(zrobione w wersji 0.05)Dodanie obsługi SFTP(zrobione w wersji 0.05)
Użycie
Przed pierwszym użyciem
Wymagania
Jeśli korzystasz z dystrybucji opartej na Debianie, możesz zainstalować wszystko na raz, uruchamiając to polecenie w terminalu:
sudo apt-get update && sudo apt-get install -y python3 python3-pip ffmpeg && pip3 install webdavclient3 pod2gen paramiko
To zapewni, że wszystkie niezbędne narzędzia i moduły zostaną zainstalowane i będą gotowe do użycia.
Aby uruchomić skrypt, będziesz potrzebował kilku podstawowych narzędzi:
Więcej
Plik konfiguracyjny
Skrypt korzysta z pliku konfiguracyjnego o nazwie config.json, aby zarządzać różnymi ustawieniami. Ten plik jest niezbędny do określenia, jak i gdzie mają być zapisywane nagrane pliki audio, a także do kontroli formatu i jakości tych nagrań.
Jeśli chcesz przesyłać nagrane pliki na serwer FTP lub do NextCloud, wypełnij szczegóły takie jak nazwa hosta, nazwa użytkownika, hasło. Możesz wybrać kodek (mp3 lub opus), bitrate, kanały (stereo lub mono) dla każdego miejsca docelowego. Jeśli nie potrzebujesz różnych formatów plików i jakości - ustaw je wszystkie na takie same. W ten sposób skrypt nie będzie musiał konwertować wielokrotnie pliku lokalnego przed przesłaniem go na FTP lub do NextCloud, co zmniejszy zużycie procesora.
Parametry local_max_files, ftp_max_files, nextcloud_max_files, sftp_max_files pozwalają kontrolować liczbę nagrań przechowywanych w każdej lokalizacji. Gdy ustawisz wartość na 0, nie będzie ograniczeń co do liczby nagrań, a wszystkie nagrane pliki będą zapisywane bez ograniczeń. Gdy ustawisz dodatnią liczbę, przechowywane będą tylko najnowsze nagrania do określonej liczby, a starsze nagrania będą automatycznie usuwane.
Stacje
Edytuj plik stations.json, aby dodać adresy URL strumieni radiowych, które chcesz nagrywać. Jeśli nie wiesz, jak znaleźć adres URL strumienia, możesz skorzystać z narzędzi takich jak FMStream, aby go znaleźć. Jeśli witryna stacji udostępnia plik .pls, otwórz go w edytorze tekstowym, aby znaleźć adres URL wewnątrz. W przypadkach, gdy adres URL strumienia jest ukryty, może być konieczne przejrzenie kodu źródłowego witryny, aby go wydobyć.
Pierwsze użycie
Przykładowe użycie:
python3 r2p.py "BBC Radio 1" "Night Show" 15 -s local sftp ftp nextcloud
Skrypt nagra 15 minut audycji z BBC Radio 1. Plik audio zostanie zapisany lokalnie w folderze /recordings/BBC Radio 1/Night Show, a następnie plik zostanie przesłany również na FTP, SFTP i NextCloud.
Oto wszystkie parametry:
- Nazwa stacji (np. “BBC Radio 1”)
- Nazwa audycji (do organizacji w folderach i nazwie pliku)
- Czas nagrywania (w minutach)
- Wybierz miejsce zapisu (użyj
-s
lub--save
, aby określić, gdzie nagranie ma być zapisane. Opcje to: local, ftp, sftp i nextcloud. Możesz wybrać jedno lub więcej miejsc.)- Parametry -s lub –save pozwalają wybrać, gdzie ma być zapisane nagranie. Przykłady:
- Użyj
-s local
, aby zapisać plik tylko lokalnie. - Użyj
-s ftp
, aby zapisać plik tylko na FTP. - Użyj
-s local nextcloud
, aby zapisać plik lokalnie i w NextCloud. - Użyj
-s sftp
, aby zapisać tylko w SFTP. - Użyj
-s local ftp sftp nextcloud
, aby zapisać plik we wszystkich czterech lokalizacjach.
- Użyj
- Parametry -s lub –save pozwalają wybrać, gdzie ma być zapisane nagranie. Przykłady:
- Pauzy i segmenty nagrywania (użyj -p, aby ustawić sekwencję czasów nagrywania i pauz w minutach):
- Na przykład,
-p 10,2,8,1
oznacza nagrywanie przez 10 minut, pauzę przez 2 minuty, nagrywanie przez 8 minut, pauzę przez 1 minutę i tak dalej. Jest to przydatne do pomijania fragmentów, takich jak reklamy.
- Na przykład,
Inny przykład:
python3 r2p.py "BBC Radio 1" "Morning Show" 25 -s local nextcloud -p 10,3,15
W tym przypadku skrypt nagra strumień BBC Radio 1 przez łącznie 25 minut, zapisując nagranie lokalnie i na NextCloud. Nagranie rozpocznie się i będzie trwało 10 minut, następnie skrypt zrobi pauzę na 3 minuty, a potem skrypt wznowi nagrywanie na kolejne 15 minut. Pozwala to na pominięcie niechcianych części, takich jak reklamy, poprzez kontrolowanie segmentów nagrywania i pauz.
Harmonogram nagrywania
W systemie Linux możesz użyć crontaba (tabeli Cron). Oto przewodnik, jak to zrobić. Przykładowa linia w crontabie powinna wyglądać tak:
0 19 * * 1 python3 r2p.py "BBC Radio 1" "Night Show" 15 -s local ftp nextcloud
To uruchomi skrypt w każdy poniedziałek o 19:00, rozpoczynając 15-minutowe nagrywanie programu Night Show z BBC Radio 1 i zapisując je lokalnie, a także przesyłając na FTP i NextCloud.
Generowanie kanału RSS
Skrypt automatycznie generuje kanał RSS za każdym razem, gdy plik jest przesyłany na serwer FTP i SFTP, przekształcając nagrane audycje w podcast. Oto jak to działa:
- Kanał RSS (feed.xml) zawiera listę wszystkich plików audio w określonym katalogu FTP, w tym szczegóły, takie jak nazwa podcastu, opis i daty publikacji.
- Kanał odwołuje się do obrazu okładki (podcast.jpg), który należy ręcznie przesłać do tego samego katalogu FTP. W przyszłości skrypt będzie mógł automatycznie generować miniaturę obrazu.
- Za każdym razem, gdy nowe nagranie jest przesyłane, kanał RSS jest aktualizowany o najnowszy odcinek.
Ta funkcja upraszcza dystrybucję nagranych audycji radiowych jako podcastu, co ułatwia słuchaczom subskrybowanie i automatyczne otrzymywanie nowych odcinków.
-
Niektóre części zostały napisane przez GPT-4. Nie jestem programistą, a AI bardzo mi pomogło, zwłaszcza w częściach związanych z obsługą serwera FTP. ↩︎