Przejdź do treści
SubtitleMatrix

Konwerter napisów JSON na LRC

Albo wklej tekst napisów

Co zmienia ta konwersja

5 rzeczy zostaje pominiętych albo wymaga decyzji

  • Czasy

    czasy końca bloków (format docelowy zapisuje tylko, kiedy blok się zaczyna)

  • Formatowanie

    całe formatowanie (pogrubienie, kursywa, kolor, obrys, cień)

  • Pozycjonowanie

    pozycjonowanie na ekranie (każdy blok wraca do domyślnego położenia)

  • Karaoke

    czasy karaoke (podświetlanie sylaba po sylabie)

  • Dokładność

    dokładność czasów — zegar wyniku jest grubszy, więc każdy znacznik czasu jest zaokrąglany do najbliższych 10 ms

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 JSON na LRC. Wrzuć plik albo wklej tekst, a dostaniesz z powrotem wersję LRC. 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: czasy, styl, pozycjonowanie, karaoke i precyzja nie mają gdzie się podziać w LRC. 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 JSON po konwersji do LRC

Wejście

{
  "version": 1,
  "title": "Fixture: typical",
  "fps": 25,
  "styles": {
    "Default": {
      "name": "Default",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#FFFFFF",
      "bold": false,
      "italic": false
    }
  },
  "generator": "subtitlematrix fixtures",
  "cues": [
    {
      "id": "1",
      "start": 0,
      "end": 2000,
      "lines": [
        "Hello world.",
        "Second line."
      ],
      "style": "Default",
      "position": {
        "x": 100,
        "y": 200,
        "align": "center"
      }
    },
    {
      "id": "2",
      "start": 2500,
      "end": 4000,
      "lines": [
        "Plain line.",
        {
          "text": "Styled line.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 6
            }
          ]
        }
      ]
    },
    {
      "id": "3",
      "start": 4500,
      "end": 6000,
      "lines": [
        "Roger: I am here."
      ],
      "speaker": "Roger"
    }
  ]
}

Wynik

[ti:Fixture: typical]
[00:00.00]Hello world.
[00:00.00]Second line.
[00:02.50]Plain line.
[00:02.50]Styled line.
[00:04.50]Roger: I am here.

W tym wyniku przepada: czasy, styl, pozycjonowanie, karaoke i precyzja. Reszta zgadza się linia w linię.

Ta sama konwersja na trudniejszym pliku

Wejście

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Wynik

[00:00.00]First.
[00:01.00]Second.
[00:02.00]Third.

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

Co dzieje się z czasem zakończenia bloku JSON przy konwersji na LRC?

LRC zapisuje tylko moment rozpoczęcia linii — odtwarzacz trzyma ją do następnej, więc `end` byłby zbędny. Każdy `end` z JSON-a zostaje odrzucony, a każdy `start` pozostaje bez zmian.

Co dzieje się z pogrubieniem, kursywą i kolorem przy przejściu z JSON do LRC?

LRC nie przechowuje żadnego stylu, więc znika wszystko: znaczniki z tablicy `tags` i wpisy z obiektu `styles`. Każda linia jest czystym tekstem, a same słowa pozostają nietknięte.

Co dzieje się z pozycją napisu przy konwersji JSON na LRC?

LRC nie potrafi wskazać miejsca na ekranie, więc obiekt `position` z `x`, `y` i `align` znika, a każdy blok wraca do domyślnego położenia odtwarzacza — najczęściej na dół kadru, pośrodku.

Co dzieje się z karaoke przy przejściu z JSON do LRC?

Znika czas, zostają słowa. Znaczniki `kind: "karaoke"` mówią, kiedy zapala się sylaba, ale LRC nie potrafi zapisać momentu wewnątrz linii, więc znaczniki są zdejmowane, a sylaby stają się zwykłym tekstem LRC.

Dlaczego czasy zmieniają się przy konwersji JSON na LRC?

LRC zapisuje czas jako `[00:04.12]`, a JSON jako `4126` — setne zamiast tysięcznych. Każdy znacznik jest zaokrąglany do 10 ms: 4,126 s daje 4,13 s. Przesunięcie nie przekracza 5 ms, ale to jedyne miejsce, gdzie ta konwersja traci precyzję.

Jak wygląda plik LRC powstały z JSON-a?

Każda linia ma własny znacznik `[mm:ss.xx]`, a nagłówek `[ti:…]` pojawia się tylko wtedy, gdy dokument ma `title`. Każdy blok JSON daje jedną lub więcej linii LRC, w tej samej kolejności i z tym samym tekstem.

Jak dwuwierszowy blok JSON wychodzi w LRC?

Jako dwie linie z tym samym znacznikiem czasu — tak LRC mówi, że należą do siebie. Para zostaje zachowana, a odtwarzacz pokazuje obie linie razem.

Czy LRC zachowuje kolejność bloków JSON?

Tak, po sortowaniu po czasie `start`. Linie idą od najwcześniejszej, więc plik JSON z zaburzoną kolejnością zostanie uporządkowany; to zmiana struktury, nie treści.

Czy da się wrócić z LRC do JSON-a?

Tak, ale ten kierunek ma własną listę strat: konwersja LRC na JSON traci czasy zakończenia, bo LRC ich nie zapisuje. Lista różni się od powyższej, ponieważ formaty przechowują inne rzeczy.

Czy LRC zachowuje kodowanie pliku JSON?

Nie, wynik jest w UTF-8 z LF i bez BOM. Kodowanie źródła jest rozpoznawane i konwertowane przy wczytaniu, o czym mówi panel wyniku; plik LRC ma już zawsze stałe kodowanie.

Powiązane narzędzia