Konwerter napisów TTML na CSV
Albo wklej tekst napisów
Co zmienia ta konwersja
3 rzeczy zostają pominięte albo wymagają decyzji
- Formatowanie
całe formatowanie (pogrubienie, kursywa, kolor, obrys, cień)
- Pozycjonowanie
pozycjonowanie na ekranie (każdy blok wraca do domyślnego położenia)
- Treści specyficzne dla formatu
treść, którą format źródłowy trzyma poza blokami (bloki niebędące napisami, tekst nagłówka, ustawienia pojedynczych bloków, zakomentowane zdarzenia) — format docelowy nie ma dla niej miejsca
Ta lista pochodzi z macierzy możliwości tych dwóch formatów, a nie z konkretnego wczytanego pliku. Konkretny plik może stracić więcej, jeśli używa cech, które format dopuszcza, ale macierz ich nie modeluje.
Ta strona konwertuje TTML na CSV. Wrzuć plik albo wklej tekst, a dostaniesz z powrotem wersję CSV. Konwersja odbywa się w całości w Twojej przeglądarce — nic nie jest wysyłane i nie potrzebujesz konta.
Te dwa formaty nie przechowują tego samego, a różnica nie jest kosmetyczna: styl, pozycjonowanie i konstrukcje charakterystyczne dla formatu nie mają gdzie się podziać w CSV. Powyższa lista wynika z tego, co potrafi wyrazić każdy z formatów, a nie z zawartości Twojego pliku — więc odpowiedź jest taka sama, zanim cokolwiek wczytasz.
Jeden plik to żaden problem, podobnie cały sezon: kolejka przetwarza je po kolei, a wyniki pobierasz razem w jednym archiwum ZIP.
Przykłady
Typowy plik TTML po konwersji do CSV
Wejście
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
Wynik
start,end,text
00:00:01.000,00:00:03.500,Hello <i>there</i>.
00:00:03.500,00:00:06.000,"How are you?
Fine, thanks."
W tym wyniku przepada: styl, pozycjonowanie i konstrukcje charakterystyczne dla formatu. Reszta zgadza się linia w linię.
Ta sama konwersja na trudniejszym pliku
Wejście
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
Wynik
start,end,text
00:00:01.500,00:00:03.500,Loaded from an offset and a duration.
00:00:04.000,00:00:06.500,A coarser clock spelling.
00:00:07.000,00:00:08.480,"Frames, at 25fps."
00:00:09.000,00:00:11.000,"<font color=""#FF0000"">Half-open</font> and Tom & Jerry."
To typowe uszkodzenia prawdziwych plików — mieszane końce wierszy, zbłąkane spacje, puste pola. Porównaj z uporządkowanym przykładem powyżej, żeby zobaczyć, co parser wybacza.
Częste pytania
Czy pogrubienie i kursywa z TTML trafiają do CSV?
Trafia nacisk, nie trafia tabela stylów. CSV dostaje znaczniki `<i>`, `<b>`, `<u>` i `<font color="…">` w komórce tekstowej, ponieważ format tabelaryczny nie ma innego miejsca na formatowanie. Globalny wygląd z TTML — krój, rozmiar, obrys, cień, marginesy — nie jest przenoszony.
Co dzieje się z pozycją na ekranie przy konwersji TTML na CSV?
CSV nie opisuje położenia napisu, więc `region` i `style` z elementu `<p>` są odrzucane, a każdy blok wraca na domyślną pozycję odtwarzacza, zwykle na dół kadru i do środka.
Co dzieje się z prologiem i tabelami `<styling>` oraz `<layout>` przy przejściu na CSV?
Nic z nich nie zostaje. CSV ma wiersz nagłówka i wiersze danych, a TTML trzyma wygląd w deklaracji XML oraz w `<styling>` i `<layout>`; te konstrukcje nie mają odpowiednika w tabeli. Wyjątkiem jest formatowanie zapisane w akapicie, np. `<span tts:fontStyle="italic">`, które trafia do tekstu jako `<i>`.
Jak wygląda CSV powstały z pliku TTML?
Jak tabela: nagłówek `start,end,text`, a pod nim jeden wiersz na blok. Każdy blok TTML daje jeden wiersz CSV, w tej samej kolejności i z tą samą treścią.
Czy czasy z TTML są dokładne w CSV?
Tak, co do milisekundy. Oba formaty zapisują moment jako `00:00:04.126`, więc znaczniki wychodzą znak w znak takie, jakie weszły, bez zaokrągleń i przesunięć.
Jak dwuwierszowy blok TTML zapisuje się w CSV?
Jako dwie linie w jednej komórce `text`, ujętej w cudzysłowy — tak wymaga CSV. Para linii zostaje w jednym bloku, więc po ponownym odczycie nadal tworzą jeden napis.
Czy CSV zachowuje kolejność bloków TTML?
Tak, po sortowaniu według czasu startu. Najwcześniejszy blok staje się pierwszym wierszem danych; plik TTML z zaburzoną kolejnością zostanie uporządkowany, co jest zmianą struktury, a nie treści.
Czy CSV można z powrotem zamienić na TTML?
Tak, i ten kierunek nie pogarsza sytuacji: CSV mieści mniej niż TTML, więc powrót nie dodaje nowych strat. Nie odtworzy jednak stylu, pozycji ani konstrukcji formatu, bo CSV ich nie przechowuje.
Czy wynikowy CSV zachowuje kodowanie pliku TTML?
Nie — wychodzi UTF-8 z końcami LF i bez BOM. Kodowanie źródła jest rozpoznawane przy wczytaniu i konwertowane, a panel wyniku o tym mówi; plik CSV ma już zawsze to samo kodowanie.