Format napisów JSON
Co potrafi wyrazić ten format
- Formatowanie tekstu
- Czcionki, kolor, obrys, cień
- Pozycja na ekranie
- Tak
- Czasy karaoke
- Tak
- Podziały wierszy w bloku
- Tak
- Oś czasu
- Czas początku i końca dla każdego bloku
- Dokładność czasów
- 1 ms
- Czasy zapisane jako numery klatek
- Nie
- Tekst od prawej do lewej
- Tak
Przykłady
Typowy plik JSON i to, co z niego czytamy
Plik
{
"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"
}
]
}
Co zawiera
3 cues, 5 lines of text
0 ms → 2000 ms
Hello world.
Second line.
[Default; position 100,200 (center)]
2500 ms → 4000 ms
Plain line.
Styled line. [italic ×1]
4500 ms → 6000 ms
Roger: I am here.
[speaker Roger]
Outside the cues:
styles Default
other keys version, title, fps, generator — carried through untouchedPrawa kolumna to nie przekonwertowany plik, tylko to, co ta strona odczytuje z lewej — i od czego zaczyna się każda konwersja tego pliku.
Trudny plik JSON i to, co mimo to z niego czytamy
Plik
{
"cues": [
{ "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
{ "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
{ "start": 9000, "end": 8000, "lines": ["End before start."] },
{ "start": "nope", "end": 12000, "lines": ["No readable start."] },
{ "start": 13000, "lines": ["No end at all."] }
],
"generator": "subtitlematrix boundary",
"styles": {},
"title": "Fixture: boundary"
}
Co zawiera
3 cues, 4 lines of text
1500 ms → 3000 ms
Unpadded timecode.
4001 ms → 5000 ms
Fractional start.
Second.
9000 ms → 9001 ms
End before start.
Outside the cues:
other keys generator, title — carried through untouched
Reported while reading — repaired or skipped, never silently:
2 × entries with no readable start and end time (they are not cues, so they were skipped)
1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
1 × cues whose end time was not after their start time (they were given a 1ms duration)Prawdziwe pliki przychodzą ze znacznikiem BOM, windowsowymi końcami wierszy, zbłąkaną linią przed znacznikiem czasu albo znacznikiem, którego nie da się odczytać. Nic nie rzuca wyjątku: to, czego nie da się zrozumieć, jest raportowane, a nie po cichu gubione.
Konwertuj SubtitleMatrix JSON na inny format
Każda z nich działa w całości w Twojej przeglądarce. Etykiety mówią, ile kosztuje dany kierunek, zanim go otworzysz.
- Dokładność
- Formatowanie
- Pozycjonowanie
- Karaoke
- Czasy
- Formatowanie
- Pozycjonowanie
- Karaoke
- Dokładność
- Formatowanie
- Pozycjonowanie
- Karaoke
- Liczba klatek
- Formatowanie
- Pozycjonowanie
- Karaoke
- Formatowanie
- Karaoke
- Formatowanie
- Pozycjonowanie
- Karaoke
- Dokładność
- Czasy
- Formatowanie
- Pozycjonowanie
- Karaoke
- Podziały wierszy
- Formatowanie
- Pozycjonowanie
- Karaoke
Konwersja do tego formatu
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
SubtitleMatrix JSON to jeden z formatów napisów obsługiwanych przez tę stronę, a ta strona jest jego opisem: co potrafi przechować, czego nie potrafi i gdzie przekonwertować go dalej.
Powyższa tabela mówi wszystko — nie ma żadnej ukrytej listy funkcji. Gdy wiersz mówi „nie”, dokładnie to ginie przy konwersji do JSON, i każda strona konwersji linkowana poniżej mówi o tym, zanim otworzysz plik.
Każda z tych konwersji działa w Twojej przeglądarce. Nic nie jest wysyłane i nie potrzebujesz konta, co ma znaczenie przy materiałach objętych NDA, dokumentacją medyczną czy embargiem emisyjnym.
Częste pytania
Czym jest plik JSON w SubtitleMatrix?
`.json` to własny kształt napisów tej strony: pole `version`, tablica `cues`, a w każdym bloku `start` i `end` w milisekundach oraz `lines` z tekstem. Jest celowo bezstratny wobec tego, co potrafią wyrazić inne formaty, i służy raczej skryptom oraz pipeline'om niż odtwarzaczom.
Czy JSON przechowuje styl?
Tak, i więcej niż pozostałe formaty: obiekt `styles` z krojami, rozmiarami, kolorami, obrysami i marginesami oraz znaczniki w tablicy `tags` przy każdej linii, więc jedna linia może być pogrubiona i kolorowa bez nazwanego stylu. Karaoke też jest przechowywane. Formatowanie siedzi w `tags`, a nie w kodach wewnątrz tekstu, dlatego nic nie trzeba escapować przy zapisie i odczycie.
Czy każdy blok JSON ma początek i koniec?
Tak, a moment w pliku JSON zapisuje się jako `4126`, czyli liczbę całkowitą milisekund. To najdrobniejsza jednostka tego formatu i wartość jest dokładna, więc blok może być krótki, długi albo nachodzić na następny.
Na jaki format najlepiej przekonwertować JSON?
Każdy format docelowy ma własną listę strat, bo żaden nie przechowuje całego obiektu `styles` i `tags` razem z czasami. Wybieraj po tym, czego potrzebuje odtwarzacz lub pipeline, a nie po popularności formatu.
Czy plik JSON można otworzyć w edytorze tekstu?
Tak, jeśli tylko nie pogubisz przecinków i cudzysłowów. Czasy to zwykłe liczby milisekund, więc blok na 1,25 sekundy ma `"start": 1250`.