Przejdź do treści
SubtitleMatrix

Konwerter napisów TTML na SBV

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 SBV. Wrzuć plik albo wklej tekst, a dostaniesz z powrotem wersję SBV. 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 SBV. 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 SBV

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

0:00:01.000,0:00:03.500
Hello <i>there</i>.

0:00:03.500,0: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 &amp; Jerry.</p>
    </div>
  </body>
</tt>

Wynik

0:00:01.500,0:00:03.500
Loaded from an offset and a duration.

0:00:04.000,0:00:06.500
A coarser clock spelling.

0:00:07.000,0:00:08.480
Frames, at 25fps.

0:00:09.000,0:00:11.000
<font color="#FF0000">Half-open</font> and Tom &amp; 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 przechodzą z TTML do SBV?

Nacisk przechodzi, tabela stylów nie. SBV unosi formatowanie jako znaczniki w tekście — `<i>`, `<b>`, `<u>` i `<font color="…">` — bo to jedyny rodzaj stylu dostępny w formacie blokowym. Globalne ustawienia TTML, czyli krój pisma, rozmiar, obrys, cień i marginesy, przepadają.

Co dzieje się z pozycją napisu przy konwersji TTML na SBV?

SBV nie ma pola na położenie napisu, więc atrybuty `region` i `style` z `<p>` znikają, a każdy blok wraca do położenia domyślnego odtwarzacza — najczęściej na dół kadru, do środka.

Co dzieje się z nagłówkiem TTML, tabelami `<styling>` i `<layout>` w SBV?

Przepadają. SBV zna tylko dwie linie czasu i tekst, więc deklaracja XML, style nazwane z `<styling>` oraz regiony z `<layout>` nie mają gdzie się zapisać. Nacisk wewnątrz akapitu, zapisany w TTML jako `<span tts:fontStyle="italic">`, jest wyjątkiem i trafia do tekstu SBV jako `<i>`.

Jak wygląda plik SBV otrzymany z TTML?

Bez numerów i bez nagłówka: najpierw linia `0:00:01.500,0:00:03.500`, pod nią tekst. Każdy blok TTML daje jeden blok SBV, w tej samej kolejności i z tą samą treścią.

Czy znaczniki czasu TTML pozostają dokładne w SBV?

Tak, do milisekundy. TTML zapisuje `00:00:04.126`, a SBV `0:00:04.126` — różni się tylko liczba cyfr przed dwukropkiem. Nic nie jest zaokrąglane, więc blok o długości 2,9 sekundy pozostaje taki sam.

Jak dwie linie bloku TTML wychodzą w SBV?

Jako dwie linie tekstu pod sobą, nadal w jednym bloku SBV. Odtwarzacz pokaże je razem, bo SBV nie rozdziela wierszy wewnątrz bloku.

Czy SBV zachowuje kolejność bloków z TTML?

Zachowuje, ale dopiero po sortowaniu po czasie rozpoczęcia. Blok, który w TTML stał wyżej, ale zaczynał się później, w SBV trafi niżej; to porządkowanie struktury, nie zmiana treści.

Czy konwersja SBV z powrotem na TTML coś dodaje?

Nie dodaje, bo SBV mieści mniej niż TTML: w drodze powrotnej nie ginie już nic nowego. Nie da się jednak odzyskać tego, co przepadło tutaj — stylu, pozycji i konstrukcji formatu nie odtworzy się z pliku SBV, który ich nie zapisuje.

Czy SBV dziedziczy kodowanie pliku TTML?

Nie, wynik jest zawsze w UTF-8, z końcami LF i bez BOM. Kodowanie źródłowe jest odczytywane przy wczytaniu i konwertowane, a panel wyniku odnotowuje ten fakt; sam plik SBV ma już stałe kodowanie.

Powiązane narzędzia