Konwerter napisów JSON na SRT
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)
- Karaoke
czasy karaoke (podświetlanie sylaba po sylabie)
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 czyta dokument JSON opisujący napisy i zapisuje z niego plik SRT. Akceptowane kształty to schema zapisywana przez tę stronę — numer `version` i tablica `cues` — oraz forma tablicowa, w której dokument jest po prostu listą bloków. W obu przypadkach potrzebne są `start`, `end` i tekst; czasy są w milisekundach i trafiają wprost do znaczników SRT, więc nic nie jest zaokrąglane.
Wszystko, czego SRT nie pomieści, jest raportowane, a nie po cichu odrzucane: `title`, `fps` i tablica `styles` nie mają miejsca w pliku, który składa się wyłącznie z numerowanych bloków. Gdy blok używa formatowania — kursywy, pogrubienia, koloru — trafia ono do tekstu jako odpowiedni znacznik, a to, czego znacznik nie wyraża, jest wymienione powyżej.
Uszkodzony plik nie przerywa konwersji. Parser czyta, co może, i naprawia blok, którego `end` nie jest późniejszy niż `start`, bo plik napisów, który da się wczytać i poprawić, jest wart więcej niż komunikat o błędzie. Cały zestaw plików JSON konwertuje się w jednym przebiegu, w Twojej przeglądarce, i wraca jako ZIP.
Przykłady
Typowy plik JSON po konwersji do SRT
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
1
00:00:00,000 --> 00:00:02,000
Hello world.
Second line.
2
00:00:02,500 --> 00:00:04,000
Plain line.
<i>Styled</i> line.
3
00:00:04,500 --> 00:00:06,000
Roger: I am here.
W tym wyniku przepada: styl, pozycjonowanie i karaoke. 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
1
00:00:00,000 --> 00:00:01,000
First.
2
00:00:01,000 --> 00:00:02,000
Second.
3
00:00:02,000 --> 00:00:03,000
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
Jakie kształty JSON-a są akceptowane?
Dokument zapisywany przez tę stronę — numer `version` i tablica `cues` — oraz równoważna forma tablicowa, w której plik jest po prostu listą bloków. Liczy się to, żeby każdy blok miał `start`, `end` i tekst w jednym z rozpoznawanych kształtów.
Co dzieje się z `title`, `styles` i `fps` z mojego JSON-a?
Są odczytywane, a potem raportowane jako utracone, bo SRT nie ma na nie pola. Szczególnie `fps` nie ma gdzie trafić — SRT przechowuje czas zegarowy, nie klatki — więc trafia na powyższą listę zamiast działać po cichu.
Czy milisekundy są zaokrąglane przy zapisie do SRT?
Nie. SRT przechowuje milisekundy i JSON też jest w milisekundach, więc każdy `start` i `end` jest przenoszony dokładnie, a oś czasu się nie przesuwa. `4126` w JSON-ie staje się `00:00:04,126` w SRT.
Co jeśli `start` bloku jest późniejszy niż `end`?
Konwerter to naprawia, zamiast odrzucać plik, więc dokument edytowany ręcznie nadal daje wczytywalny plik SRT. Sprawdź czasy tego bloku na tle wideo, bo plik sygnalizował, że coś jest nie tak.
Czy konwersja tam i z powrotem nic nie traci?
Konwersja do JSON-a i z powrotem odtwarza oś czasu dokładnie oraz formatowanie, które JSON opisuje: kursywę, pogrubienie i kolory jako znaczniki. Nie przetrwa nic, czego samo SRT nie przechowuje — czyli dokładnie to, co wymieniono powyżej.