Konversi JSON ke SMI
Atau tempel teks subtitle
Apa yang berubah dalam konversi ini
2 hal dihapus atau memerlukan keputusan
- Pemformatan
seluruh pemformatan kecuali tebal dan miring (warna, garis tepi, bayangan, margin)
- Karaoke
timing karaoke (penyorotan per suku kata)
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.
Halaman ini mengubah JSON menjadi SMI. File bisa diseret ke jendela ini atau teksnya ditempel; hasilnya adalah versi SMI. Semua proses berjalan di peramban, tanpa unggahan dan tanpa akun.
Perbedaan kedua format ini bukan soal tampilan: gaya dan karaoke tidak punya tempat di SMI. 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. Karena daftar di atas berasal dari model kemampuan format, daftar itu sudah final bahkan sebelum Anda menyeret file.
Anda bisa memasukkan satu file atau satu musim penuh; antrean bekerja berurutan, dan semua hasil turun bersama dalam satu ZIP.
Contoh
File JSON umum, dikonversi ke SMI
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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>
</BODY>
</SAMI>
Yang hilang pada keluaran ini: gaya dan karaoke. 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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>
</BODY>
</SAMI>
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
Gaya apa yang bertahan dari JSON ke SMI?
Penekanan, ditulis ke dalam teks sebagai tag: tebal, miring, garis bawah, dan warna keluar sebagai `<b>`, `<i>`, `<u>`, dan `<font color="…">`, yang dijalankan peramban. Yang tidak dibawa file SMI adalah tabel gaya JSON yang diandalkan JSON — font, ukurannya, garis tepi, bayangan, dan margin semuanya hilang, dan halaman yang menyematkan subtitle menatanya lewat CSS-nya sendiri.
Apa yang terjadi pada timing karaoke dari JSON ke SMI?
Timingnya hilang; kata-katanya tetap. Karaoke hidup di span karaoke yang dibawa cue JSON, yang menandai kapan setiap suku kata menyala, dan SMI tidak punya cara mencatat momen di dalam satu baris — jadi tandanya dilepas dan suku katanya tiba sebagai teks SMI biasa.
Seperti apa keluarannya ketika JSON menjadi SMI?
Keluaran SMI disusun seperti SMI — tanpa nomor cue dan tanpa baris timecode: setiap cue adalah tag `<SYNC Start=…>` dengan teksnya di `<P>` di bawahnya, disusul blok `<P> ` yang mengosongkan layar. Cue yang di JSON ditulis `4126` menjadi cue yang di SMI ditulis `Start=4126`, dalam urutan yang sama, dan tidak ada teks yang berubah.
Apakah timing JSON akurat di file SMI?
Ya, hingga milidetik — serinci yang bisa dicapai kedua format. JSON menulis satu momen sebagai `4126` dan SMI menulis momen yang sama sebagai `Start=4126`; tidak ada yang dibulatkan atau digeser di antara keduanya, dan cue yang tampil selama 2,9 detik tetap begitu.
Bagaimana cue JSON dua baris keluar di SMI?
Dua baris JSON menjadi dua baris dengan `<br>` di antaranya, cara SAMI menulis pemisah baris keras. Pasangannya bertahan — keduanya tetap menjadi satu subtitle di keluaran SMI, dan pemutar menampilkannya bersama.
Apakah cue JSON mempertahankan urutannya di keluaran SMI?
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 SMI mengembalikannya ke urutan yang benar — perubahan struktur, bukan isi.
Bisakah SMI dikonversi balik ke JSON?
Ya, dan arah itu punya daftarnya sendiri: mengonversi SMI ke JSON menghilangkan konten khusus format. Daftar itu berbeda dari daftar di atas karena kedua format menyimpan hal yang berbeda.
Apakah keluaran SMI 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 SMI UTF-8 yang sama.