[K] Kaster 3.9

O Kasterze, programie do ułatwiania pracy nad podcastem, pisałem już na głównym blogu, a i zdarzało mi się o nim czasem wspominać. I chociaż nadal utrzymuję, że nie jest to program uniwersalny i dla każdego, postanowiłem opisać go trochę, tak z kronikarskiego obowiązku. Kto wie, jak długo jeszcze będę nagrywał podcast?

Geneza

Ktoś może zapytać - po co w ogóle bawić się w pisanie programu do zarządzania podcastem? W końcu wystarczy gdzieś na dysku stworzyć sobie listę katalogów, gdzie będziemy wrzucać pliki związane z konkretnym odcinkiem, prawda? Też tak na początku myślałem i podobną strukturę stworzyłem - ot, katalogi o nazwach będących kolejnymi numerami odcinków. Od razu założyłem, że nagram przynajmniej 100 odcinków, więc katalogi nazywały się "001", "002" itd. Wszystko było dobrze, dopóki nie uświadomiłem sobie, że byłem jednak zbyt mało przewidujący. Podcasty - jak się okazało - dobrze jest dzielić na sezony. Wysiliłem mózgownicę i wpadłem na pomysł, by nazwy katalogów zmienić tak, by przed numerem z odcinkiem podcastu pojawił się numer sezonu. Czekała mnie zatem zmiana nazw z "001" na "01001", z "002" na "01002" itd. To jeszcze było łatwe dzięki Total Commanderowi, ale odcinków przybywało, lista katalogów się wydłużała i coraz trudniej było spamiętać, w którym o czym mówię - musiałem sprawdzać na stronie Anchora albo wchodzić do katalogów na chybił trafił.

Napisałem sobie zatem "na szybko" prosty program, który nazwałem PodcastManagerem, który oprócz listowania odcinków na dysku miał za zadanie dodawanie nowych - w końcu tworzenie katalogu, kopiowanie do niego szablonu pliku rpp (czyli projektu Reaperowego) czy zmiana numeracji to czynności może i proste, ale nużące i mogące prowadzić do błędów (zwłaszcza operacja przenumerowywania całej listy katalogów). PodcastManager, jako program pisany z doskoku i na kolanie, szybko okazał się niezbyt dobrze zaprojektowany, a rosnące wymagania powodowały, że wewnątrz jego konstrukcja stawała się koszmarkiem. Postanowiłem rzecz przepisać od podstaw, znając już ogólne założenia - i tak powstał Kaster.

Stary, niezbyt dobry PodcastManager

Kaster rośnie

Kaster szybko okazał się bardzo przydatnym narzędziem, bo błyskawicznie dogonił (a i przegonił) w możliwościach PodcastManagera. Oparłem go wewnętrzne na trzech modułach: sieciowym do synchronizacji z RSS i pobierania plików z Internetu, plikowym do odczytu i zapisu plików wszelakich oraz "podcastowym", który załatwiał tworzenie czy przenumerowanie struktury katalogów podcastów. Ten podział sprawdza mi się bardzo dobrze, a że też przyłożyłem się mocniej do uporządkowania interfejsu użytkownika i do logowania operacji w pliku logów, tak że korzystanie czy namierzanie błędów jest obecnie stosunkowo łatwe.

Kaster przez lata był fioletowy, ale...

Ostatnimi czasy dodałem możliwość odczytu chapterów, zapisywanych do plików mp3 przez Chapters Creatora, a także dodałem możliwość podglądu i edycji "napisów", czyli efektów działania Whispera. Ale może do rzeczy...

Co można?

Podstawową rzeczą w Kasterze jest tworzenie nowego odcinka podcastu. Oznacza to, że na dysku pojawi się w określonym miejscu katalog o nazwie zawierającej numer sezonu i numer odcinka, zaś w środku tego katalogu znajdą się trzy pliki: xml z danymi odcinka (np. wpisanym tytułem, wybranym typem odcinka), txt, w którym będzie zapisany skrypt odcinka (albo chociaż jakieś główne punkty). Trzecim plikiem jest reaperowy rpp, uzależniony od typu odcinka (w końcu np. cykl "W terenie" ma inny jingle niż "Gadułki", a te z kolei różnią się jinglem od standardowego odcinka).

Główne okno Kastera - widoczny edytor zaznaczonego odcinka

Drugą, zaskakująco bardzo ważną funkcją Kastera jest... zmiana numeracji odcinków. W PodcastManagerze potraktowałem tę funkcję po macoszemu, co się później na mnie zemściło, więc jednym z założeń przy pisaniu Kastera była bezbłędnie i pewnie działająca funkcja zmiany numeru. Wydawałoby się, że to nie może być coś skomplikowanego - ale polega ona nie tylko na zmianie numeru katalogu. Trzeba zmienić jeszcze pliki wewnątrz - przenumerować pliki, które numer odcinka mają w nazwie, zmodyfikować plik xml, a potem... Przeprowadzić tę samą operację dla wszystkich odcinków późniejszych od zmienianego. W końcu nie tylko ten jeden odcinek zmieni numer!

Trzecią funkcją, na której bardzo mi zależało i którą też trochę pokpiłem w PodcastManagerze, była synchronizacja z plikiem RSS na serwerze. Chodziło o rzecz banalną - po publikacji odcinka chciałem, by na dysku znalazła się kopia danych z serwera - i plik mp3, i plik graficzny z okładką, i aktualny tytuł (czasem w Anchorze/Spotify zdarza mi się zmienić tytuł odcinka), i aktualny opis. Kiedy zatem odcinek się opublikuje (bo zwykle wrzucam odcinki do harmonogramu i publikują się "same"), odpalam Kastera, klikam w synchronizację i czekam, aż dane odcinka pobiorą się z aktualnego pliku RSS. W zasadzie, gdybym bardzo potrzebował, Kaster i lokalne dane odcinków mogłyby służyć do generowania mojego własnego pliku RSS, który umieszczałbym w domenie konradlesniak.pl - powoli dojrzewam do tej myśli.

Synchronizacja danych z RSS

Cała reszta funkcji jest już tylko gadżetem. Mogę sobie wygodnie przejrzeć wszystkie pliki podcastu, otworzyć je:

Lista plików - dwuklik otwiera w domyślnej aplikacji

Mogę wyedytować opis odcinka, ale mogę też spisać skrypt bezpośrednio w Kasterze:

Rzadko zdarza mi się pisać obecnie tak dokładne skrypty - ale mogę!

Jeśli mam już wygenerowany przez Reapera czy ChaptersCreatora plik mp3, mogę wczytać jego rozdziały i np. umieścić je w opisie:

Chaptery odczytane z pliku mp3

No i po przeprowadzeniu transkrypcji gotowego odcinka mogę wczytać plik srt do edytora napisów i sobie te napisy w spokoju przejrzeć oraz wyedytować, jeśli trafię na jakieś pomyłki Whispera - ta operacja czeka mnie przed każdym wrzuceniem napisów do serwisu YouTube:

Dodany w październiku 2023 edytor napisów

Reliktem przeszłości jest przycisk Video, którym generowałem plik wideo dla YouTube'a. Przycisk działa nadal, ale obecnie wideo generuję już ChaptersCreatorem - tam mam to opracowane znacznie elastyczniej, między innymi da się umieszczać grafiki przypisane do rozdziałów jako elementy filmu. Mechanizm "kasterowy" daje możliwość wyłącznie zastosowania okładki odcinka.

Co dalej?

W sumie Kaster ma już niemal wszystko, czego bym od niego potrzebował. Rozmyślam jeszcze tylko może o jakiejś integracji np. z FileImporterem czy SubtitleJoinerem - ale szczerze mówiąc, nie ma to dużego sensu. Łatwiej mi zarządzać kilkoma mniejszymi aplikacjami niż jedną wielką - chyba że chciałoby mi się zintegrować je w postaci czegoś w rodzaju "wtyczek", czyli pluginów. Wtedy to może i ChaptersCreator mógłby się załapać!

Tak czy owak, dzisiaj nie wyobrażam sobie ogarniania całego podcastu wyłącznie za pomocą Eksploratora plików. Kaster, z nową szatą graficzną, w wersji 3.9 służy dalej i pewnie dociągnie już do końca mojej podcastowej przygody.

Komentarze