Lompat ke konten utama
SubtitleMatrix

Konversi SSA ke JSON

Konversi formatSubStation Alpha (SSA)
Atau tempel teks subtitle

Apa yang berubah dalam konversi ini

1 hal dihapus atau memerlukan keputusan

  • Konten khusus format

    konten yang disimpan format sumber di luar cue-nya (blok non-cue, teks header, pengaturan per cue, event yang dikomentari) — format tujuan tidak punya tempat untuknya

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.

Di halaman ini skrip SSA diubah menjadi dokumen JSON dengan skema milik situs ini: satu nomor versi, lalu satu entri per cue berisi pengenal, waktu mulai dan selesai dalam milidetik, baris-baris teks, dan rentang inline untuk tiap tag. Model cue situs ini menampung gaya, posisi, dan karaoke, jadi hampir semua yang dibawa skrip SSA bisa dinyatakan di JSON.

Satu hal hilang: isi khas format. Itu berarti [Script Info], baris Comment:, bagian [Fonts] dan [Graphics], serta konstruksi skrip lain di luar cue. Semuanya konfigurasi atau lampiran untuk mesin render, bukan subtitle, jadi tidak punya kunci di skema dan tidak diselipkan ke kolom cadangan.

Waktu berubah dari perseratus detik ke milidetik bilangan bulat, dan baris cue tetap terpisah alih-alih digabung, sehingga hasilnya bisa langsung dipakai skrip Anda. Satu file atau satu musim, di peramban, tanpa unggah, hasil dalam satu ZIP.

Contoh

File SSA biasa, dikonversi ke JSON

Masukan

[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal

[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: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines

Keluaran

{
  "version": 1,
  "title": "Example SSA",
  "styles": {
    "Default": {
      "name": "Default",
      "Name": "Default",
      "Fontname": "Arial",
      "Fontsize": "20",
      "PrimaryColour": "&H00FFFFFF",
      "SecondaryColour": "&H000000FF",
      "TertiaryColour": "&H00000000",
      "BackColour": "&H00000000",
      "Bold": "0",
      "Italic": "0",
      "BorderStyle": "1",
      "Outline": "2",
      "Shadow": "2",
      "Alignment": "2",
      "MarginL": "10",
      "MarginR": "10",
      "MarginV": "10",
      "AlphaLevel": "0",
      "Encoding": "1",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#ffffff",
      "bold": false,
      "italic": false
    }
  },
  "cues": [
    {
      "start": 1000,
      "end": 4000,
      "lines": [
        "Hello there."
      ],
      "style": "Default"
    },
    {
      "start": 5000,
      "end": 8000,
      "lines": [
        {
          "text": "Italic line.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 6
            }
          ]
        }
      ],
      "style": "Default"
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Two",
        "lines"
      ],
      "style": "Default"
    }
  ]
}

Yang hilang pada hasil ini: isi khas format. Sisanya sama baris demi baris.

Konversi yang sama pada input yang berantakan

Masukan

[Script Info]
Title: Dirty SSA
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
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.

Keluaran

{
  "version": 1,
  "title": "Dirty SSA",
  "styles": {
    "Default": {
      "name": "Default",
      "Name": "Default",
      "Fontname": "Arial",
      "Fontsize": "20",
      "PrimaryColour": "&H00FFFFFF",
      "SecondaryColour": "&H000000FF",
      "TertiaryColour": "&H00000000",
      "BackColour": "&H00000000",
      "Bold": "0",
      "Italic": "0",
      "BorderStyle": "1",
      "Outline": "2",
      "Shadow": "2",
      "Alignment": "2",
      "MarginL": "10",
      "MarginR": "10",
      "MarginV": "10",
      "AlphaLevel": "0",
      "Encoding": "1",
      "fontFamily": "Arial",
      "fontSize": 20,
      "primaryColor": "#ffffff",
      "bold": false,
      "italic": false
    }
  },
  "cues": [
    {
      "start": 1000,
      "end": 4000,
      "lines": [
        {
          "text": "Bold and underlined.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            },
            {
              "kind": "underline",
              "start": 9,
              "end": 19
            }
          ]
        }
      ],
      "style": "Default"
    },
    {
      "start": 5000,
      "end": 8000,
      "lines": [
        "A soft",
        "break and a {\\p1}mystery{\\p0} code."
      ],
      "style": "Default"
    }
  ]
}

Ini jenis kerusakan yang nyata pada file asli — akhir baris campuran, spasi berlebih, kolom kosong. Bandingkan dengan contoh rapi di atas untuk melihat apa yang dimaafkan parser.

Pertanyaan yang sering diajukan

Apa yang terjadi pada [Script Info], Comment:, dan font SSA di JSON?

Semuanya dibuang. Skema JSON di sini mendeskripsikan cue; [Script Info] adalah konfigurasi skrip, Comment: adalah catatan penulis, dan [Fonts] serta [Graphics] adalah lampiran biner untuk renderer. Tidak ada kunci untuk mereka.

Seperti apa keluaran saat SSA menjadi JSON?

JSON-nya berisi nomor versi dan array cues. Tiap cue membawa id, start dan end dalam milidetik, serta lines; tag SSA seperti posisi dan karaoke disimpan sebagai rentang.

Apakah waktu SSA tetap persis di file JSON?

Ya. SSA menulis 0:00:01.23 dan JSON menyimpannya sebagai 1230 milidetik; tidak ada pembulatan baru. Angka itu langsung bisa dipakai dalam perhitungan.

Bagaimana cue SSA dua baris keluar di JSON?

Sebagai dua entri di array lines, bukan satu string dengan baris baru. Pemisahan itu mempertahankan struktur cue dan memudahkan skrip yang memperlakukan setiap baris secara terpisah.

Apakah urutan cue SSA tetap di keluaran JSON?

Ya, dan cue diurutkan menurut waktu mulai saat diproses. Urutan event di skrip bisa berbeda dari urutan waktu; JSON mengembalikannya ke urutan kronologis.

Bisakah JSON hasil konversi SSA ini diubah kembali menjadi SSA?

Bisa lewat halaman JSON ke SSA, dan yang tidak bisa dipulihkan hanyalah isi khas format — [Script Info], Comment:, dan lampiran font serta grafik. Gaya, posisi, karaoke, waktu, dan teks kembali.

Apakah keluaran JSON mempertahankan encoding file SSA saya?

Tidak — hasil selalu UTF-8, akhir baris Unix, tanpa byte-order mark. File SSA berencoding lama didekode saat dibaca, dan panel hasil menandai bila konversi encoding terjadi.

Alat terkait