JSON subtitles and transcripts
Bukan satu format melainkan banyak: JSON adalah cara mesin speech-to-text, situs video, dan situs subtitle menyerahkan subtitle serta transkrip, masing-masing dengan bentuknya sendiri. Subtitld menyimpan dengan bentuk yang ditulis Whisper, lengkap dengan semua yang dimiliki sebuah subtitle, dan membuka apa yang ditulis lusinan alat lain.
Sekilas
| Ekstensi | .json |
|---|---|
| Tipe media | application/json |
| Spesifikasi | JSON itu sendiri: RFC 8259 dan ECMA-404. Bentuk tiap alat berbeda-beda. |
| Presisi waktu | Milik Subtitld: detik, hingga milidetik. Lainnya: milidetik, detik, tick 100 nanodetik, atau teks seperti "1.400s". |
| Encoding teks | UTF-8 |
| Gaya | Milik Subtitld: tag yang dipertahankan teksnya. YouTube: tebal, miring, garis bawah, dan warna. Lainnya: tidak ada. |
| Posisi | Milik Subtitld: di dalam teks, sebagai {\an8}. YouTube: jendela. Bilibili: sebuah lokasi. |
| Pembicara | Milik Subtitld speaker; layanan speech-to-text memberi label pada miliknya |
| Dalam kontainer | Tidak ada |
Anatomi JSON Subtitld
Yang disimpan Subtitld untuk satu subtitle:
{
"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."
}
| Bagian | Isinya |
|---|---|
"language" |
Bahasa proyek, seperti dinamai Subtitld (en-us) |
"segments" |
Subtitle-subtitle, berurutan |
"id" |
Nomornya, dari 0, seperti Whisper memberi nomor |
"start", "end" |
Detik |
"text" |
Teksnya, dengan tag (<i>, {\an8}) dan pemisah baris (\n) |
"speaker", "translations" … |
Apa pun yang lain dimiliki subtitle: pembicaranya, terjemahannya per bahasa, dan dubbing-nya |
"text", di akhir |
Seluruh teks dalam satu baris, untuk alat yang hanya menginginkannya. Tidak dibaca kembali. |
Bentuk Whisper, dengan sengaja. Itu yang ditulis OpenAI Whisper, sehingga alat yang membaca segmen Whisper juga membaca berkas Subtitld. Subtitld juga membuka milik Whisper, dengan membiarkan statistik dekodingnya dan waktu setiap kata.
Yang dibuka Subtitld
Setiap JSON dari alat menyatakan jenisnya lewat kuncinya. Subtitld membuka ini:
| Alat | Yang diambil Subtitld darinya |
|---|---|
| Subtitld, Whisper dari OpenAI | Setiap bidang (milik Subtitld); teks dan bahasa (milik Whisper) |
| whisper.cpp | Segmennya, dan pembicaranya bila ia membedakan kedua saluran |
| WhisperX | Segmen dan pembicaranya |
YouTube (.json3, seperti yang disimpan yt-dlp) |
Teks, tebal, miring, garis bawah, warna, dan tempat |
Bilibili (.bcc) |
Teks dan tempat |
| AssemblyAI, Deepgram, AWS Transcribe, Rev.ai, Google Speech-to-Text, Azure Speech, Speechmatics | Kata, pembicara, dan bahasa, dijadikan subtitle |
| Amara | Teks, miring, tebal, garis bawah, dan subtitle di bagian atas |
JSON yang bukan salah satunya akan diberi tahu. JSON yang tidak valid akan menunjukkan di mana kesalahannya, berdasarkan baris dan kolom.
Transkrip menjadi subtitle
Layanan speech-to-text menyerahkan kata beserta waktunya, atau giliran bicara yang panjang. Subtitld membuat subtitle darinya, selama sesuai batas di panel Pemeriksaan kualitas: karakter per baris, baris, dan detik. Sebuah subtitle berakhir:
- di tempat pembicara berganti, atau ucapan berhenti lebih dari satu detik;
- di akhir kalimat, ketika subtitle berikutnya akan melewati satu baris;
- ketika penuh: pada tanda baca terakhir yang membuatnya cukup penuh, jika tidak, di antara dua kata.
Giliran tanpa waktu kata dibagi dengan cara yang sama, waktunya menurut panjang bagiannya.
Atur batasnya dahulu. Subtitle dibuat saat berkas dibuka: ubah batas di panel Pemeriksaan kualitas sebelum membuka transkrip untuk mendapatkan subtitle yang lebih panjang atau lebih pendek.
Pembicara dan bahasa
Layanan memberi nomor pada pembicaranya: 0, spk_1, SPEAKER_02, S3. Subtitld menamai mereka A, B, C … menurut urutan mereka pertama kali berbicara, seperti ia menamai pembicara sendiri. Pembicara yang dinamai oleh berkas, seperti yang dapat dilakukan Rev.ai, tetap mempertahankan namanya.
Bahasa proyek berasal dari berkas, sebagai kode (en_us, pt) atau nama (English, seperti yang disimpan Whisper bila diminta), atau dari nama berkasnya: video.en.json3. Berkas dalam bahasa proyek mempertahankan negara proyek: pt dalam proyek pt-br tetap pt-br.
JSON YouTube
Yang dibaca pemutar YouTube, dan disimpan yt-dlp sebagai .json3: peristiwa berupa teks dalam milidetik, dengan pena untuk tebal, miring, garis bawah, dan warna, serta jendela untuk tempat tampilnya. Caption otomatis bergulir, baris demi baris, masing-masing tampil sampai baris berikutnya muncul; Subtitld menjadikan setiap baris sebagai subtitle sampai baris berikutnya dimulai.
BCC Bilibili
Yang dibaca pemutar Bilibili, dan satu-satunya JSON lain yang disimpan Subtitld.
{
"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."
}
]
}
Waktunya dalam detik; content adalah teks polos, dengan barisnya dipisah oleh \n. Tampilan di bagian atas adalah yang dibawa berkas Bilibili sendiri, dan juga ditulis Subtitle Edit.
Satu subtitle dalam satu waktu. Subtitle yang tampil pada saat yang sama menjadi satu entri, dengan teksnya satu baris masing-masing, sehingga linimasa tidak memiliki tumpang tindih. location selalu 2, yaitu tengah bawah: pemutar Bilibili tidak diketahui menggunakannya untuk menempatkan subtitle di tempat lain.
JSON di Subtitld
- Teks, pemformatan, dan tempat setiap subtitle
- Pembicara, terjemahan, dan dubbing
- Awal dan akhir, hingga milidetik
- Bahasa proyek
- Waktu kata, dan seberapa yakin layanan terhadap setiap kata
- Statistik dekoding Whisper
- Font, ukuran, tepi, dan latar YouTube
- Pada BCC: pemformatan, tempat, dan terjemahan di samping aslinya
Simpan proyek .usfx untuk menyimpan yang menjadi milik Subtitld.
Mengekspor
Ekspor, lalu Subtitle, menawarkan keduanya:
- JSONMilik Subtitld: proyek apa adanya, setiap subtitle dan setiap bidang.
- BCCMilik Bilibili: asli, terjemahan, atau keduanya, dengan terjemahan di bawah; nama pembicara dihilangkan atau di depan teks; waktu digeser bila Anda memilih.
Trivia
Standar JSON, RFC 8259 tahun 2017, menyatakan bahwa JSON yang dikirim antarsistem harus UTF-8.
Tick per detik pada transkrip Azure: ia menghitung waktu dalam satuan 100 nanodetik.
Detik yang ditampilkan pemutar YouTube untuk caption json3 yang tidak menyatakan berapa lama ia bertahan.
Format terkait
Buka di Subtitld bersama videonya, lalu atur waktunya pada bentuk gelombang.