JSON subtitles and transcripts
Tek bir biçim değil, birçoğu: JSON, konuşmadan metne motorlarının, video sitelerinin ve altyazı sitelerinin altyazıları ve dökümleri teslim ettiği yoldur; her birinin kendi şekli var. Subtitld kendi dosyalarını, OpenAI'ın Whisper'ının yazdığı şekilde, bir altyazının tuttuğu her şeyle birlikte kaydeder; ve bir düzine başka aracın yazdıklarını açar.
Kısaca
| Uzantı | .json |
|---|---|
| Ortam türü | application/json |
| Belirtim | JSON'un kendisi: RFC 8259 ve ECMA-404. Her aracın şekli kendine ait. |
| Zaman hassasiyeti | Subtitld'nin: saniye, milisaniyeye kadar. Diğerlerinde: milisaniye, saniye, 100 nanosaniyelik tikler ya da "1.400s" gibi metin. |
| Metin kodlaması | UTF-8 |
| Biçimlendirme | Subtitld'nin: metnin tuttuğu etiketler. YouTube'un: kalın, italik, altı çizili ve renkler. Diğerleri: yok. |
| Konumlandırma | Subtitld'nin: metnin içinde, {\an8} olarak. YouTube'un: pencereler. Bilibili'nin: bir konum. |
| Konuşmacılar | Subtitld'nin speaker'ı; konuşmadan metne servisleri kendilerininkini etiketler |
| Kapsayıcılarda | Yok |
Subtitld'nin JSON'unun yapısı
Subtitld'nin kaydettiği, bir altyazı için:
{
"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."
}
| Parça | Ne anlama gelir |
|---|---|
"language" |
Projenin dili, Subtitld'nin adlandırdığı gibi (en-us) |
"segments" |
Altyazılar, sıralı |
"id" |
Numarası, 0'dan başlayarak; Whisper'ın numaraladığı gibi |
"start", "end" |
Saniye |
"text" |
Etiketleriyle (<i>, {\an8}) ve satır sonlarıyla (\n) metni |
"speaker", "translations" … |
Altyazının tuttuğu diğer her şey: konuşmacısı, dillere göre çevirileri, dublajları |
En sondaki "text" |
Tüm metin tek satırda, yalnızca bunu isteyen araçlar için. Geri okunmaz. |
Whisper'ın şekli, bilerek. OpenAI'ın Whisper'ının yazdığı şekil; bu yüzden Whisper'ın segmentlerini okuyan araçlar Subtitld'nin dosyalarını okur, ve Subtitld Whisper'ınkileri açar; kod çözmesinin istatistiklerini ve her kelimenin zamanlarını dışarıda bırakarak.
Subtitld hangi dosyaları açar
Her aracın JSON'u, anahtarlarıyla hangisi olduğunu söyler. Subtitld şunları açar:
| Araç | Subtitld'nin ondan aldıkları |
|---|---|
| Subtitld, OpenAI'ın Whisper'ı | Her alan (Subtitld'nin); metin ve dil (Whisper'ın) |
| whisper.cpp | Segmentleri ve iki kanalı ayırt edebildiğinde konuşmacıları |
| WhisperX | Segmentleri ve konuşmacıları |
YouTube (.json3, yt-dlp'nin kaydettiği gibi) |
Metin, kalın, italik, altı çizili, renkler ve yer |
Bilibili (.bcc) |
Metin ve yer |
| AssemblyAI, Deepgram, AWS Transcribe, Rev.ai, Google Speech-to-Text, Azure Speech, Speechmatics | Kelimeler, konuşmacılar ve dil; altyazıya dönüştürülmüş |
| Amara | Metin, italik, kalın, altı çizili ve üstte gösterilen altyazılar |
Hangi aracın olduğunu anlamayan bir JSON dosyası bunu söyler. Geçerli JSON olmayan bir dosya ise hatanın satır ve sütununu gösterir.
Dökümleri altyazıya dönüştürmek
Konuşmadan metne servisleri, kelimeleri zamanlarıyla ya da uzun konuşma turlarını teslim eder. Subtitld bunlardan, Kalite denetimi panelinin izin verdiği ölçüde altyazılar yapar: satır başına karakter, satır sayısı ve saniye. Bir altyazı şu noktalarda biter:
- konuşmacı değiştiğinde ya da konuşma bir saniyeden uzun durakladığında;
- bir cümlenin sonunda, bir sonrakisi onu bir satırdan fazlaya taşıyacaksa;
- dolduğunda: makul ölçüde dolu bırakan son noktalama işaretinde, yoksa iki kelime arasında.
Kelime zamanı olmayan bir tur da, parçalarının uzunluğuna göre zamanı paylaştırılarak aynı şekilde bölünür.
Önce sınırları ayarlayın. Altyazılar dosya açılırken yapılır: daha uzun ya da kısa altyazılar istiyorsanız bir dökümü açmadan önce Kalite denetimi sınırlarını değiştirin.
Konuşmacılar ve diller
Servisler konuşmacılarını numaralandırır: 0, spk_1, SPEAKER_02, S3. Subtitld bunlara, ilk konuştukları sıraya göre A, B, C … adını verir; kendi konuşmacılarını adlandırdığı gibi. Bir dosyanın adlandırdığı bir konuşmacı (Rev.ai'nin yapabildiği gibi) adını korur.
Projenin dili dosyadan gelir: bir kod olarak (en_us, pt) ya da bir ad olarak (English, Whisper'ın istendiğinde tuttuğu gibi); ya da dosya adından: video.en.json3. Projenin kendi dilindeki bir dosya, projenin ülkesini korur: pt-br projesinde pt, pt-br olarak kalır.
YouTube'un json3'ü
YouTube'un oynatıcısının okuduğu ve yt-dlp'nin .json3 olarak kaydettiği: milisaniye cinsinden metin olayları; kalın, italik, altı çizili ve renkler için kalemler; nerede durduklarını söyleyen pencereler. Otomatik altyazılar, bir satırın altına bir satır kayarak ilerler; her biri bir sonraki görünene kadar gösterilir. Subtitld her satırı, bir sonrakinin başlayışına kadar bir altyazı yapar.
Bilibili'nin BCC'si
Bilibili'nin oynatıcısının okuduğu ve Subtitld'nin kaydettiği diğer tek JSON.
{
"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."
}
]
}
Zamanlar saniye cinsindendir; content düz metindir, satırları \n ile kırılmıştır. Üstteki görünüm, Bilibili'nin kendi dosyalarının taşıdığıdır; Subtitle Edit de yazar.
Bir seferde bir altyazı. Aynı anda gösterilen altyazılar tek bir girişe dönüşür; metinleri her biri bir satırda olur; zaman çizelgesinde çakışma olmaz. location her zaman 2'dir, alt orta: Bilibili'nin oynatıcısının altyazıları başka bir yere yerleştirmek için bunu kullandığı bilinmiyor.
Subtitld'de JSON
- Her altyazının metni, biçimlendirmesi ve yeri
- Konuşmacılar, çeviriler ve dublajlar
- Başlangıç ve bitiş, milisaniyesine kadar
- Projenin dili
- Kelime zamanları ve bir servisin her birinden ne kadar emin olduğu
- Whisper'ın kod çözme istatistikleri
- YouTube'un yazı tipleri, boyutları, kenarları ve arka planları
- BCC'de: biçimlendirme, yer ve orijinalin yanındaki çeviriler
Subtitld'nin olanları korumak için bir .usfx projesi kaydedin.
Dışa aktarmak
Dışa aktar, ardından Altyazılar, ikisini de sunar:
- JSONSubtitld'nin: proje olduğu gibi, her altyazı ve her alan.
- BCCBilibili'nin: orijinal, bir çeviri ya da ikisi; çeviri altta; konuşmacı adları yazılmaz ya da metinden önce yazılır; isterseniz zamanlar kaydırılır.
Bilgi kırıntıları
JSON'un standardı, 2017 tarihli RFC 8259, sistemler arasında gönderilen JSON'un UTF-8 olması gerektiğini söyler.
Azure'un dökümlerinde saniyedeki tik sayısı: zamanı yüzlerce nanosaniye cinsinden sayar.
YouTube'un oynatıcısının, ne kadar süreceğini söylemeyen bir json3 altyazısını gösterdiği saniye.
İlgili biçimler
Videoyla birlikte Subtitld'de açın ve dalga biçimi üzerinde yeniden zamanlayın.