Napisy i transkrypcje w JSON
Nie jeden format, lecz wiele: JSON to sposób, w jaki silniki zamiany mowy na tekst, serwisy wideo i serwisy z napisami przekazują napisy i transkrypcje, każdy w swoim kształcie. Subtitld zapisuje własny, w kształcie Whispera, z wszystkim, co zawiera napis, i otwiera to, co zapisuje kilkanaście innych narzędzi.
W skrócie
| Rozszerzenie | .json |
|---|---|
| Typ mediów | application/json |
| Specyfikacja | Sam JSON: RFC 8259 i ECMA-404. Kształt każdego narzędzia jest jego własny. |
| Precyzja czasu | Subtitld: sekundy, co do milisekundy. Inne: milisekundy, sekundy, takty po 100 nanosekund albo tekst, np. "1.400s". |
| Kodowanie tekstu | UTF-8 |
| Stylizacja | Subtitld: znaczniki, które zachowuje tekst. YouTube: pogrubienie, kursywa, podkreślenie i kolory. Reszta: brak. |
| Pozycjonowanie | Subtitld: w tekście, jako {\an8}. YouTube: okna. Bilibili: położenie. |
| Mówcy | speaker w Subtitld; usługi zamiany mowy na tekst oznaczają swoich |
| W kontenerach | Brak |
Budowa JSON Subtitld
Co Subtitld zapisuje dla jednego napisu:
{
"language": "en-us",
"segments": [
{
"id": 0,
"start": 23.0,
"end": 24.5,
"text": "You're a jerk, Thom.",
"speaker": "Celia"
}
],
"text": "You're a jerk, Thom."
}
| Element | Co to jest |
|---|---|
"language" |
Język projektu, tak jak nazywa go Subtitld (en-us) |
"segments" |
Napisy, w kolejności |
"id" |
Jego numer, od 0, jak numeruje je Whisper |
"start", "end" |
Sekundy |
"text" |
Jego tekst ze znacznikami (<i>, {\an8}) i podziałami wierszy (\n) |
"speaker", "translations" … |
Wszystko inne, co zawiera napis: jego mówca, tłumaczenia według języka, dubbingi |
"text", na końcu |
Cały tekst w jednym wierszu, dla narzędzi, które chcą tylko tego. Nie jest odczytywany z powrotem. |
Kształt Whispera, celowo. To ten, który zapisuje OpenAI Whisper, więc narzędzia czytające segmenty Whispera czytają pliki Subtitld, a Subtitld otwiera pliki Whispera, pomijając statystyki jego dekodowania i czasy każdego słowa.
Co otwiera Subtitld
JSON każdego narzędzia mówi, czym jest, po swoich kluczach. Subtitld otwiera te:
| Narzędzie | Co Subtitld z niego bierze |
|---|---|
| Subtitld, Whisper OpenAI | Każde pole (Subtitld); tekst i język (Whispera) |
| whisper.cpp | Jego segmenty i mówców, gdy rozróżnia dwa kanały |
| WhisperX | Jego segmenty i mówców |
YouTube (.json3, tak jak zapisuje go yt-dlp) |
Tekst, pogrubienie, kursywę, podkreślenie, kolory i miejsce |
Bilibili (.bcc) |
Tekst i miejsce |
| AssemblyAI, Deepgram, AWS Transcribe, Rev.ai, Google Speech-to-Text, Azure Speech, Speechmatics | Słowa, mówców i język, zamienione w napisy |
| Amara | Tekst, kursywę, pogrubienie, podkreślenie i napisy na górze |
Plik JSON, który nie jest żadnym z nich, to zgłasza. Taki, który nie jest poprawnym JSON-em, wskazuje, gdzie się myli, przez wiersz i kolumnę.
Transkrypcje w napisy
Usługi zamiany mowy na tekst przekazują słowa z ich czasami albo długie wypowiedzi. Subtitld robi z nich napisy, o ile pozwalają na to limity panelu Sprawdzanie jakości: znaki w wierszu, wiersze i sekundy. Napis kończy się:
- tam, gdzie zmienia się mówca albo mowa milknie na ponad sekundę;
- na końcu zdania, gdy następne przekroczyłoby jeden wiersz;
- gdy jest pełny: na ostatnim znaku interpunkcyjnym, który zostawia go dość pełnym, a w przeciwnym razie między dwoma słowami.
Wypowiedź bez czasów słów dzieli się tak samo, a jej czas według długości części.
Najpierw ustaw limity. Napisy powstają w chwili otwierania pliku: zmień limity Sprawdzanie jakości przed otwarciem transkrypcji, aby uzyskać dłuższe lub krótsze.
Mówcy i języki
Usługi numerują mówców: 0, spk_1, SPEAKER_02, S3. Subtitld nazywa ich A, B, C … w kolejności, w jakiej zaczynają mówić, tak jak sam nazywa mówców; mówca nazwany w pliku, jak potrafi Rev.ai, zachowuje nazwę.
Język projektu pochodzi z pliku, jako kod (en_us, pt) albo nazwa (English, tak jak zachowuje ją Whisper, gdy się go o to poprosi), a w ostateczności z nazwy pliku: video.en.json3. Plik w języku projektu zachowuje kraj projektu: pt w projekcie pt-br pozostaje pt-br.
JSON YouTube
To, co czyta odtwarzacz YouTube i zapisuje yt-dlp jako .json3: zdarzenia tekstu w milisekundach, z piórami dla pogrubienia, kursywy, podkreślenia i kolorów oraz oknami dla miejsca, w którym się pojawiają. Automatyczne napisy przewijają się, wiersz za wierszem, każdy widoczny do chwili pojawienia się następnego; Subtitld robi z każdego wiersza napis, aż zacznie się następny.
BCC Bilibili
To, co czyta odtwarzacz Bilibili, i drugi JSON, jaki Subtitld zapisuje.
{
"font_size": 0.4,
"font_color": "#FFFFFF",
"background_alpha": 0.5,
"background_color": "#9C27B0",
"Stroke": "none",
"body": [
{
"from": 23.0,
"to": 24.5,
"location": 2,
"content": "You're a jerk, Thom."
}
]
}
Czasy są w sekundach; content to zwykły tekst, którego wiersze rozdziela \n. Wygląd u góry to ten, który niosą własne pliki Bilibili, a także zapisuje Subtitle Edit.
Jeden napis naraz. Napisy pokazywane w tym samym momencie stają się jednym wpisem, a ich teksty są po jednym w wierszu, dzięki czemu oś czasu nie ma nakładek. location to zawsze 2, dolny środek: nie wiadomo, by odtwarzacz Bilibili używał go do umieszczania napisów gdziekolwiek indziej.
JSON w Subtitld
- Tekst, formatowanie i miejsce każdego napisu
- Mówcy, tłumaczenia i dubbingi
- Początek i koniec co do milisekundy
- Język projektu
- Czasy słów i pewność, z jaką usługa oceniła każde
- Statystyki dekodowania Whispera
- Czcionki, rozmiary, obramowania i cienie YouTube
- W BCC: formatowanie, miejsce i tłumaczenia obok oryginału
Zapisz projekt .usfx, aby zachować to, co należy do Subtitld.
Eksportowanie
Eksportuj, potem Napisy, oferuje oba:
- JSONSubtitld: projekt taki, jaki jest, każdy napis i każde pole.
- BCCBilibili: oryginał, tłumaczenie lub oba, z tłumaczeniem pod spodem; nazwy mówców pominięte albo przed tekstem; czasy przesunięte, jeśli wybierzesz.
Ciekawostki
Standard JSON, RFC 8259 z 2017 roku, mówi, że JSON wysyłany między systemami musi być w UTF-8.
Takty na sekundę w transkrypcjach Azure: liczy czas w setkach nanosekund.
Sekundy, przez które odtwarzacz YouTube pokazuje napis json3, który nie podaje, jak długo ma trwać.
Powiązane formaty
Otwórz go w Subtitld razem z wideo i dopasuj czasy na przebiegu fali dźwiękowej.