[K] Mp3 Chapters Creator

Po niedawnej rozmowie z Tomkiem Stankiewiczem postanowiłem się wreszcie zmobilizować i napisać program, który spełniałby dwie funkcje: po pierwsze, umiał odczytać z pliku mp3 istniejące już chaptery i zamienić je na opis w formacie Spotify. Po drugie, żeby umiał rzecz odwrotną - na podstawie pliku tekstowego uzupełniać znaczniki w pliku mp3, dając jeszcze możliwość wstawiania linków URL lub grafik (a co!).

Chaptery, chaptery...

O chapterach w podcaście pisałem całkiem niedawno, a że programów na platformę Windows nie potrafiłem znaleźć za dużo, wpadłem na pomysł z programem - ale od razu dodam, że wpadłem nie sam, bo po rozmowie z Tomkiem Stankiewiczem.

Tak czy owak, pod paru tygodni uzupełniam chaptery w odcinkach mojego podcastu, ale do tej pory było to męczące - wstawiałem znaczniki w Reaperze, potem eksportowałem listę znaczników do pliku tekstowego i tam ręcznie przerabiałem ją na dane akceptowane przez Spotify i YouTube'a. W efekcie miałem wprawdzie chaptery w postaci tekstowej, ale nie miałem ich w pliku mp3 odcinka, przez co np. Pocket Cast nie był w stanie wyświetlić specjalnej zakładki.

Potem dowiedziałem się właśnie od Tomka o "sposobie na Reapera" - to znaczy, że jeśli markery wpisze się w postaci CHAP=Tytuł rozdziału, a przy renderze zaznaczy pole Embedded, to chaptery zostaną umieszczone w pliku mp3.

Powstał zatem pomysł: gdybym potrafił odczytać dane z mp3, to mógłbym sobie je od razu sformatować do postaci Spotify/YouTube i nie potrzebowałbym już ręcznie obrabiać dodatkowego pliku tekstowego z markerami.

Start

Do uruchomienia programiku trzeba mieć (niestety) zainstalowaną Javę w wersji 14 lub nowszą, np. wersję 19. Jako że instalowanie Javy może nie być zadaniem trywialnym, polecam tutorial dla choćby pobieżnie znających angielski lub poradnik po polsku (uwaga, strona ma nieaktualny certyfikat SSL, więc przeglądarka może wyświetlić informację, że strona jest niebezpieczna).

Jeśli Java jest już zainstalowana, można pobrać Mp3 Chapters Creator. To pojedynczy plik jar do uruchamiania z linii poleceń. Plik ten zapisujemy gdzieś na dysku i żeby sobie ułatwić pracę, do tego samego pliku wrzucamy pozostałe pliki.

Program uruchamiamy z linii poleceń w następujący sposób:

java -jar mp3chapters.jar

W takiej postaci program wyświetli dokumentację, żeby coś zaczął robić, należy po mp3chapters.jar podać nazwę pliku lub plików. Przyjrzyjmy się zatem, co ten maluch potrafi.

Odczyt chapterów

Pierwszy tryb pracy programu to odczytywanie chapterów już istniejących w pliku mp3:

java -jar mp3chapters.jar plik.mp3

Jeśli program znajdzie w pliku chaptery, wypisze ich tytuły razem ze znacznikami czasowymi, na przykład:

(00:00) Intro
(00:09) Wstęp
(00:44) Co w pudełku?
(01:52) Uchwyt

Tych danych można użyć bezpośrednio w opisie odcinka - w ten sposób oszczędziłem sobie eksportowania znaczników z Reapera i ręcznego poprawiania danych. Po prostu renderuję plik mp3 i wyciągam z niego dane już odpowiednio sformatowane.

Konwersja markerów na chaptery

Jeśli ktoś jednak z Reapera renderuje pliki wav, może wyeksportować znaczniki do pliku tekstowego (txt lub csv). Mp3 Chapters Creator potrafi te pliki odczytać:

java -jar mp3chapters.jar znaczniki.csv

po czym zaprezentować w postaci gotowej do wklejenia do opisu:

(00:00) Intro
(00:09) Wstęp
(00:44) Co w pudełku?
(01:52) Uchwyt

Tworzenie chapterów w pliku mp3

I tym sposobem dochodzimy do ostatniego, być może najważniejszego trybu pracy. Punkt wyjścia jest taki, że mamy plik mp3 jeszcze bez chapterów, ale chcemy je do niego zapisać. Musimy zatem najpierw stworzyć plik tekstowy (np. w Notatniku) i wpisać do niego dane odcinka:

(00:00) Intro
(00:09) Wstęp
(00:44) Co w pudełku?
(01:52) Uchwyt

Plik zapisujemy w katalogu z Mp3 Chapters Creatorem, np. jako metadata.txt. Teraz pozostaje uruchomić polecenie:

java -jar mp3chapters.jar plik.mp3 metadata.txt

Program odczyta dane z metadata.txt i w postaci tagów zapisze je do pliku plik_0001.mp3. Co ważne, nie jest przy tym dokonywana ponowna kompresja, dane audio są zachowywane w oryginalnej postaci. Tworzony jest osobny plik ze względów bezpieczeństwa, żeby w razie czego nie tracić pliku oryginalnego.

Podobnie zresztą, jeśli plik mp3 już zawierał dane chapterów, są one zapisywane do pliku metadata_0001.txt.

Funkcje dodatkowe - linki

Mp3 Chapters Creator umożliwia przypisywanie do chapterów nie tylko tytułów, ale i linków, czyli adresów URL. Aby tego dokonać, w pliku tekstowym należy po tytule chaptera dopisać znak "pałki" | i po niej podać opis linku, znak równości i sam link:

(00:00) Intro
(00:09) Wstęp
(00:44) Co w pudełku?
(01:52) Uchwyt|Test uchwytu=http://test.uchwytu.pl

W powyższym przykładzie do chaptera "Uchwyt" zostanie przypisany link "Test uchwytu", prowadzący do adresu "http://test.uchwytu.pl".

Jako ciekawostkę dodam, że Mp3 Chapters Creator potrafi dekodować także pliki chapterów w tzw. formacie mp4, który wygląda mniej więcej tak:

00:00:00.000 Intro <http://url1.com>
00:00:10.000 Baby prepares to rock
00:00:30.000 Baby rocks the house
00:01:00.000 One Minute
00:01:30.000 End <http://url2.at/ha>

przy czym potrafi wydobyć także podane adresy url i przypisać je do odpowiednich rozdziałów.

Funkcje dodatkowe - tagi

Jeśli ktoś czuje taką potrzebę, w tekstowym pliku z danymi chapterów można umieścić pewne dane, które spowodują uzupełnienie "zwykłych" tagów pliku mp3, takich jak tytuł, nazwa artysty czy rok:

artist=Gades
title=074 Odcinek taki a taki
album=Gadanie Gadesa
year=2022
publisher=Konrad Leśniak
(00:00) Intro
(00:09) Wstęp
(00:44) Co w pudełku?
(01:52) Uchwyt|Test uchwytu=http://test.uchwytu.pl

Program potrafi uzupełnić następujące taki (i takich nazw należy używać przed znakiem równości w pliku tekstowym):

artist
album
track
copyright
composer
albumartist
publisher
title
date
year
url

Dodatkowo można użyć specjalnego znacznika "cover=sciezka_do_pliku_graficznego", który umieści w pliku mp3 grafikę, która stanie się "okładką".

Co z grafikami dla rozdziałów?

Pisałem na początku, że do rozdziałów będzie można przypisywać nie tylko linki, ale także obrazki. I faktycznie, da się takie grafiki osadzić w pliku mp3, struktura tagów na to pozwala - powiem więcej, Mp3 Chapters Creator od wersji 1.7 potrafi to zrobić. Gdyby ktoś chciał eksperymentować, to obrazek do rozdziału można dodać, odpowiednio formatując linie w tytułami, podobnie jak to było przy linkach:

(00:00) Intro
(00:09) Wstęp||image=sciezka_do_pliku_graficznego.jpg
(00:44) Co w pudełku?
(01:52) Uchwyt|Test uchwytu=http://test.uchwytu.pl|image=sciezka_do_pliku_graficznego.png

PocketCasts wyświetla taki obrazek zamiast okładki podcastu w momencie odtwarzania danego rozdziału:

Dlaczego linia poleceń i Java?

Przede wszystkim dlatego, że chciałem mieć szybko działające rozwiązanie. Java to mój główny język programowania, a dodatkowo użyłem w programie biblioteki do odczytu/zapisu tagów, autorstwa Michaela Patriciosa (http://github.com/mpatric/mp3agic), również napisanej w tym języku. Linia poleceń - bo stworzenie fajnego i funkcjonalnego interfejsu użytkownika to nie jest z pewnością zadanie na jedno popołudnie (zwłaszcza w Javie), a nie chciałem tracić czasu.

Program pisałem z myślą o Tomku i sobie, ale postanowiłem go też upublicznić - jeśli komuś nie jest straszna linia poleceń, może sobie trochę ułatwi życie.

Komentarze