Przejdź do treści
SubtitleMatrix

Konwerter napisów SSA na JSON

Konwersja formatówSubStation Alpha (SSA)
Albo wklej tekst napisów

Co zmienia ta konwersja

1 rzecz zostaje pominięta albo wymaga decyzji

  • 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 zamienia SSA w JSON. SSA trzyma styl w tabeli [V4 Styles] i w kodach nadpisań; JSON zapisuje te same dane jako obiekt z version, title, styles i cues.

Tabela stylów przechodzi w całości, razem z kolumnami TertiaryColour i AlphaLevel, a wyróżnienia w tekście – kursywa, pogrubienie, podkreślenie – zostają jako znaczniki w tablicy tags. Przepada to, czego JSON nie opisuje: reszta [Script Info], zdarzenia inne niż Dialogue: oraz zawartość [Fonts] i [Graphics].

Pliki można podać hurtowo: kolejka idzie po kolei, można ją przerwać, a wynik wraca jako jeden ZIP. Konwersja odbywa się w przeglądarce.

Przykłady

Typowy plik SSA po konwersji do JSON

Wejście

[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines

Wynik

{
  "version": 1,
  "title": "Example SSA",
  "styles": {
    "Default": {
      "name": "Default",
      "Name": "Default",
      "Fontname": "Arial",
      "Fontsize": "20",
      "PrimaryColour": "&H00FFFFFF",
      "SecondaryColour": "&H000000FF",
      "TertiaryColour": "&H00000000",
      "BackColour": "&H00000000",
      "Bold": "0",
      "Italic": "0",
      "BorderStyle": "1",
      "Outline": "2",
      "Shadow": "2",
      "Alignment": "2",
      "MarginL": "10",
      "MarginR": "10",
      "MarginV": "10",
      "AlphaLevel": "0",
      "Encoding": "1",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#ffffff",
      "bold": false,
      "italic": false
    }
  },
  "cues": [
    {
      "start": 1000,
      "end": 4000,
      "lines": [
        "Hello there."
      ],
      "style": "Default"
    },
    {
      "start": 5000,
      "end": 8000,
      "lines": [
        {
          "text": "Italic line.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 6
            }
          ]
        }
      ],
      "style": "Default"
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Two",
        "lines"
      ],
      "style": "Default"
    }
  ]
}

W tym wyniku odrzucono: resztę [Script Info], zdarzenia inne niż Dialogue: i treści specyficzne dla formatu. Tabela stylów, tekst i czasy są w wyniku.

Ta sama konwersja na trudnym pliku

Wejście

[Script Info]
Title: Dirty SSA
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.

Wynik

{
  "version": 1,
  "title": "Dirty SSA",
  "styles": {
    "Default": {
      "name": "Default",
      "Name": "Default",
      "Fontname": "Arial",
      "Fontsize": "20",
      "PrimaryColour": "&H00FFFFFF",
      "SecondaryColour": "&H000000FF",
      "TertiaryColour": "&H00000000",
      "BackColour": "&H00000000",
      "Bold": "0",
      "Italic": "0",
      "BorderStyle": "1",
      "Outline": "2",
      "Shadow": "2",
      "Alignment": "2",
      "MarginL": "10",
      "MarginR": "10",
      "MarginV": "10",
      "AlphaLevel": "0",
      "Encoding": "1",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#ffffff",
      "bold": false,
      "italic": false
    }
  },
  "cues": [
    {
      "start": 1000,
      "end": 4000,
      "lines": [
        {
          "text": "Bold and underlined.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            },
            {
              "kind": "underline",
              "start": 9,
              "end": 19
            }
          ]
        }
      ],
      "style": "Default"
    },
    {
      "start": 5000,
      "end": 8000,
      "lines": [
        "A soft",
        "break and a {\\p1}mystery{\\p0} code."
      ],
      "style": "Default"
    }
  ]
}

Tak wyglądają prawdziwe pliki – mieszane końce wierszy, zbłąkane spacje, puste pola. Porównaj z czystym przykładem powyżej, żeby zobaczyć, co parser wybacza.

Częste pytania

Co z [Script Info], liniami Comment: i osadzonymi fontami, gdy SSA trafia do JSON?

Tytuł przechodzi, a tabela [V4 Styles] również – z każdą kolumną, także TertiaryColour i AlphaLevel, plus odczytany krój, rozmiar, kolor i flagi. JSON nie ma miejsca na resztę [Script Info], na zdarzenia inne niż Dialogue: ani na zawartość [Fonts] i [Graphics]; te rzeczy przepadają.

Jak wygląda wynik, gdy SSA zamienia się w JSON?

Jak obiekt JSON z kluczami version, title, styles i cues; każdy blok SSA staje się obiektem z polami start, end, lines i style, bez pola id.

Czy czasy z SSA są dokładne w pliku JSON?

Tak, co do milisekundy: 0:00:04.13 odpowiada 4130 w JSON, bez zaokrągleń.

Jak w JSON wygląda blok SSA z dwiema liniami?

Jako dwa wpisy w tablicy lines jednego bloku – para zostaje zachowana.

Czy kolejność bloków SSA jest zachowana w JSON?

Tak, po posortowaniu rosnąco po czasie początku; wynik ma porządek osi czasu.

Czy da się zamienić JSON z powrotem na SSA?

Tak, ale JSON do SSA odrzuca precyzję i część pól formatowych, bo JSON nie zna sekcji [Script Info].

Czy wynik JSON zachowuje kodowanie pliku SSA?

Nie – plik JSON powstały z SSA jest w UTF-8 bez BOM, z uniksowymi końcami wierszy; nic nie zależy od kodowania źródła.

Powiązane narzędzia