Konversi JSON ke SSA
Atau tempel teks subtitle
Apa yang berubah dalam konversi ini
1 hal dihapus atau memerlukan keputusan
- Presisi
presisi waktu — jam keluaran lebih kasar, sehingga setiap stempel waktu dibulatkan ke 10 ms terdekat
Daftar ini berasal dari matriks kemampuan untuk kedua format ini, bukan dari file tertentu yang Anda muat. File tertentu bisa kehilangan lebih banyak jika memakai fitur yang diizinkan format tetapi tidak dimodelkan matriks.
Alat ini mengonversi JSON ke SSA langsung di peramban Anda. Seret file atau tempel teks, dan versi SSA siap diunduh; tidak ada unggahan dan tidak perlu akun.
JSON dan SSA menyimpan hal yang berbeda, dan selisihnya nyata: nilai yang lebih halus dari 10 ms dibulatkan, karena SSA menyimpan waktu dalam langkah 10 ms. Dokumen JSON di sini adalah model field: setiap cue punya `id`, `start`, dan `end` dalam milidetik, `lines` membawa `tags`, dan objek `styles` menyimpan tabel gaya. Daftar di atas dihitung dari kemampuan kedua format, bukan dari isi file Anda, sehingga hasilnya tidak berubah sebelum file dimuat.
Satu file maupun ratusan file bisa masuk ke antrean yang sama; hasilnya diunduh bersama sebagai satu ZIP setelah semuanya selesai.
Contoh
File JSON umum, dikonversi ke SSA
Masukan
{
"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"
}
]
}
Keluaran
[Script Info]
Title: Fixture: typical
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,,,,0,0,,,,,,,,,
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:02.00,Default,,0,0,0,,{\pos(100,200)}Hello world.\NSecond line.
Dialogue: 0,0:00:02.50,0:00:04.00,Default,,0,0,0,,Plain line.\N{\i1}Styled{\i0} line.
Dialogue: 0,0:00:04.50,0:00:06.00,Default,,0,0,0,,Roger: I am here.
Yang hilang pada keluaran ini: presisi. Sisanya cocok baris demi baris.
Konversi yang sama pada input berantakan
Masukan
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
Keluaran
[Script Info]
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
Dialogue: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,First.
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,Second.
Dialogue: 0,0:00:02.00,0:00:03.00,Default,,0,0,0,,Third.
Inilah jenis kerusakan yang ada pada file nyata — byte-order mark, koma yang hilang, nilai null, atau waktu yang tidak terbaca. Bandingkan dengan contoh rapi di atas untuk melihat apa yang dimaafkan parser.
Pertanyaan yang sering diajukan
Mengapa stempel waktu bergeser dari JSON ke SSA?
SSA menyimpan waktu sebagai `0:00:04.13` sedangkan JSON menyimpannya sebagai `4126` — seperseratus detik versus seperseribu — jadi setiap timecode dibulatkan ke 10 ms terdekat: 00:00:04,126 menjadi 4,13 detik. Tidak ada yang diregangkan atau diurutkan ulang dan tidak ada cue yang bergeser lebih dari 5 ms, tetapi jika Anda menyelaraskan subtitle ini dengan file lain, di situlah konversi ini berhenti eksak.
Seperti apa keluarannya ketika JSON menjadi SSA?
Keluaran SSA disusun seperti SSA — tanpa nomor cue: setiap subtitle adalah baris `Dialogue:` di bagian `[Events]`, dengan kolom `Marked` di tempat SRT menyimpan nomor. Cue yang di JSON ditulis `4126` menjadi cue yang di SSA ditulis `0:00:04.13`, dalam urutan yang sama, dan tidak ada teks yang berubah.
Bagaimana cue JSON dua baris keluar di SSA?
Dua baris JSON menjadi dua baris dengan `\N` di antaranya, cara SSA menulis pemisah baris keras. Pasangannya bertahan — keduanya tetap menjadi satu subtitle di keluaran SSA, dan pemutar menampilkannya bersama.
Apakah cue JSON mempertahankan urutannya di keluaran SSA?
Urutannya dipertahankan, tetapi dirapikan: cue diurutkan menurut waktu mulai, paling awal lebih dulu. Susunan itu yang diharapkan setiap format di sini dan yang dibaca pemutar. Kalau file JSON semula tidak berurutan, keluaran SSA mengembalikannya ke urutan yang benar — perubahan struktur, bukan isi.
Bisakah SSA dikonversi balik ke JSON?
Ya, dan arah itu punya daftarnya sendiri: mengonversi SSA ke JSON menghilangkan konten khusus format. Daftar itu berbeda dari daftar di atas karena kedua format menyimpan hal yang berbeda.
Apakah keluaran SSA mempertahankan encoding file JSON?
Tidak — keluarannya UTF-8, dengan akhir baris Unix dan tanpa byte-order mark, apa pun yang dipakai file JSON. File yang datang dalam UTF-16 atau encoding satu-byte Windows didekode saat masuk (panel hasil memberi tahu bila itu terjadi); yang keluar selalu SSA UTF-8 yang sama.