Przejdź do treści
SubtitleMatrix

Konwerter napisów MicroDVD na JSON

Konwersja formatówMicroDVD (SUB)
Albo wklej tekst napisów

Opcje

W jakiej liczbie klatek na sekundę liczone są czasy. Na stronach formatów tego wymaga MicroDVD, bo zapisuje czasy jako numery klatek. Na stronach poświęconych liczbie klatek jest to stawka, według której zgrany był plik — wersja, dla której powstały napisy — a drugie pole na stronie przyjmuje liczbę klatek wideo, z którym napisy będą używane. Najczęstsze wartości to 23,976, 24, 25, 29,97, 30, 50, 59,94 i 60. Pomyłka przesuwa całą oś czasu, a na stronach poświęconych liczbie klatek przesuwa ją o współczynnik, a nie o stałą wartość.

Co zmienia ta konwersja

1 rzecz zostaje pominięta albo wymaga decyzji

  • Liczba klatek

    źródło zapisuje czasy jako numery klatek — każdy znacznik czasu zależy od podanej liczby klatek na sekundę

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.

JSON to struktura danych, więc napisy trzeba w niej opisać jawnie. Konwersja z MicroDVD przelicza numery klatek na milisekundy i zapisuje tablicę `cues`, w której każda pozycja ma `start`, `end` oraz tablicę `lines` z tekstem.

Do przeliczenia potrzebna jest liczba klatek na sekundę: najpierw pole na stronie, potem deklaracja w pierwszej linii pliku, na końcu 25. Klatka 100 przy 25 fps daje `start: 4000`. Pionowa kreska `|` dzieli tekst na dwie pozycje tablicy `lines`, więc dwuliniowy napis pozostaje jedną pozycją `cues`.

Po zapisie czasy są już absolutne i do ich odczytu nie trzeba znać fps. Konwersja odbywa się w przeglądarce, bez konta i bez wysyłania pliku.

Przykłady

Typowy plik MicroDVD po konwersji na JSON

Wejście

{1}{1}25
{100}{150}The quick brown fox jumps over the lazy dog.
{200}{260}Faster than|the last one.

Wynik

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "The quick brown fox jumps over the lazy dog."
      ]
    },
    {
      "start": 8000,
      "end": 10400,
      "lines": [
        "Faster than",
        "the last one."
      ]
    }
  ]
}

W tym wyniku ginie liczba klatek: czasy są zapisane w milisekundach, więc klatki nie są już potrzebne.

Ta sama konwersja na nierównym pliku wejściowym

Wejście

{1}{1}23.976
{0100}{0150}Leading zeros in the frame numbers.
[INFORMATION]
{300}{340}An unrecognized line above was kept in place.
{400}{450}Trailing spaces are kept.   

Wynik

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "Leading zeros in the frame numbers."
      ]
    },
    {
      "start": 12000,
      "end": 13600,
      "lines": [
        "An unrecognized line above was kept in place."
      ]
    },
    {
      "start": 16000,
      "end": 18000,
      "lines": [
        "Trailing spaces are kept.   "
      ]
    }
  ]
}

Takie uszkodzenia ma wiele prawdziwych plików: mieszane końce wierszy, zbłąkane spacje, puste pola. Porównaj to z czystym przykładem powyżej, żeby zobaczyć, co parser wybacza.

Częste pytania

Jaką liczbę klatek stosuje się przy odczycie MicroDVD przed zapisem do JSON?

Najpierw pole na stronie, potem deklaracja z pierwszej linii pliku, a dopiero na końcu 25. JSON przechowuje milisekundy, więc fps jest potrzebne wyłącznie w chwili przeliczania. Jeśli wideo nie ma 25 fps, wpisz właściwą wartość, bo inaczej wszystkie `start` i `end` będą proporcjonalnie przesunięte.

Jak wygląda JSON powstały z pliku MicroDVD?

To obiekt z polem `version` i tablicą `cues`. Każda pozycja zawiera `start` i `end` jako liczby całkowite w milisekundach oraz `lines` z tekstem. Klatki znikają, a numery bloków nie występują — kolejność wyznacza tablica.

Jak dwuwierszowy blok MicroDVD wychodzi w JSON?

Jako jedna pozycja w `cues` z dwiema wartościami w `lines`. Kreska `|` jest w MicroDVD złamaniem wiersza, więc w JSON dzieli tekst na dwa napisy w tej samej pozycji. Para pozostaje jednym blokiem, nie dwoma pozycjami o identycznym czasie.

Czy kolejność bloków MicroDVD zostaje w JSON?

Tak, po sortowaniu rosnąco według `start`. Tablica `cues` ma odwzorowywać przebieg napisów, więc parser normalizuje porządek przed zapisem. Plik źródłowy z klatkami pomieszanymi da uporządkowany wynik, bez zmiany treści ani wartości czasów.

Co ginie przy powrocie z JSON do MicroDVD?

Style, pozycjonowanie, karaoke i liczba klatek. MicroDVD wymaga numerów klatek, więc każdy `start` i `end` trzeba by przeliczyć przez fps, którego JSON nie przechowuje. Zostaje tekst i momenty w milisekundach, o ile struktura zawiera potrzebne dane.

Jakie kodowanie ma JSON powstały z MicroDVD?

Wynik jest w UTF-8, z końcami wierszy LF i bez BOM. Jeśli plik `.sub` przyszedł w UTF-16 lub w kodowaniu jednobajtowym Windows, zostanie zdekodowany przed konwersją, a panel wyniku to pokaże. Kodowanie źródła nie przechodzi do wyniku.

Powiązane narzędzia