Bahasa Melayu

Video & sari kata · Kit Alat Sari kata

Cara pelayar menghuraikan fail SRT: blok, indeks, kod masa dan teks

· Bagaimana ia berfungsi

sari kata srt format fail

Dua SRT blok kiu dipisahkan oleh baris kosong, setiap satu dengan baris indeks, baris kod masa dan baris teks
Ilustrasi vektor ToolAcre asal

SRT kelihatan remeh sehingga anda menemui fail sebenar. Siaran ini membincangkan cara penghurai membahagikan blok, membaca indeks dan kod masa, mengendalikan teks berbilang baris dan pulih daripada blok cacat yang terkandung dalam fail dunia sebenar.

Fail 'nampak baik' tetapi separuh isyarat hilang — bagaimana format yang kelihatan lembut menyembunyikan jangkaan yang ketat

SRT tidak mempunyai badan spesifikasi, tiada pendaftaran MIME dan tiada pengesah yang dihantar bersama pemain. Apa yang wujud sebaliknya ialah bentuk yang dipersetujui oleh kebanyakan perisian: nombor, baris kod masa, satu atau lebih baris teks, kemudian baris kosong. Oleh kerana bentuknya adalah konvensional dan bukannya ditentukan, dua fail boleh kelihatan betul dalam editor teks manakala sahaja satu daripadanya dimuatkan, dan kegagalan biasanya senyap. Pemain yang tidak boleh membaca isyarat cenderung untuk melangkaunya daripada melaporkannya, jadi fail dengan blok yang pecah bermain dengan jurang dan bukannya ralat.

Oleh itu, penghurai mempunyai dua kerja yang menarik ke arah yang bertentangan. Ia perlu menerima variasi yang terkandung dalam fail sebenar, kerana fail dihasilkan oleh perkhidmatan transkripsi, penyuntingan tangan dan penukar format yang masing-masing membuat andaian berbeza. Ia juga perlu menolak bacaan yang akan memberi isyarat pada masa yang salah, kerana cap masa yang salah secara senyap adalah lebih teruk daripada kegagalan yang dilaporkan.

Membahagi kepada blok — garisan kosong sebagai pemisah dan masalah dengan ruang kosong sesat dan CRLF

Pemisahan berlaku pada baris kosong, bukan pada nombor indeks. Penghurai menormalkan pengakhiran baris terlebih dahulu, menggantikan kedua-dua pasangan CRLF dan CR tunggal dengan satu baris baharu, kerana fail yang dikarang pada Windows dan diedit pada Unix boleh mengandungi kedua-duanya. Ia kemudian berpecah pada larian dua atau lebih baris baharu, memangkas setiap blok yang terhasil dan membuang yang kosong. Pesanan itu penting: pemisahan sebelum menormalkan akan meninggalkan pemulangan pengangkutan yang sesat pada penghujung baris kod masa dan kod masa kemudiannya akan gagal dipadankan.

Tanda pesanan bait dilucutkan sebelum mana-mana ini. UTF-8 BOM pada permulaan fail ialah tiga bait yang dilihat oleh penghurai naif sebagai sebahagian daripada nombor indeks pertama, yang cukup untuk membuat isyarat pertama tidak boleh dibaca sementara setiap penghuraian kemudiannya. Ruang mengekor pada garis pemisah kosong dikendalikan oleh trim, jadi fail yang garisan kosongnya mengandungi ruang masih terbelah dengan betul.

Baris indeks — mengapa nombor sering salah, diduakan atau tiada dan mengapa penghurai tidak seharusnya mempercayainya

Nombor indeks dibaca dan kemudian diabaikan. Petunjuk nombor fail sebenar daripada sifar, mulakan semula penomboran selepas gabungan, salin nombor selepas suntingan manual, atau tinggalkan baris sepenuhnya apabila penukar menulis fail. Mempercayai nombor tersebut bermakna mewarisi setiap kesilapan tersebut, jadi penghurai menetapkan nombor jujukannya sendiri, mengira isyarat yang telah berjaya dibina setakat ini.

Pilihan itu juga menjelaskan mengapa penghurai tidak memerlukan baris indeks untuk hadir. Ia mencari baris kod masa dengan mencari blok untuk baris pertama yang mengandungi anak panah, dan bukannya menganggap kod masa ialah baris kedua. Blok tanpa baris indeks menghuraikan secara normal, dan blok dengan dua baris sesat sebelum kod masa masih dihuraikan, kerana kedudukan bukanlah apa yang mengenal pasti kod masa.

Baris kod masa — HH:MM:SS,mmm --> HH:MM:SS,mmm, variasi yang boleh diterima dan yang merosakkan pemain

Baris kod masa dipadankan dengan ungkapan biasa tunggal, dan toleransi di dalamnya adalah sengaja. Waktu adalah pilihan, kerana WebVTT membenarkan bacaan dua medan dan penukar memancarkannya. Sama ada koma atau noktah diterima sebagai pemisah milisaat tanpa mengira format yang dituntut oleh fail, kerana pemisah bercampur adalah perkara biasa yang menolaknya akan menyebabkan fail lebih baik daripada yang buruk. Digit pecahan berlapik di sebelah kanan, jadi kiu yang berakhir dengan satu digit dibaca sebagai ratusan milisaat dan bukannya unit.

Dua bacaan ditolak. Medan minit atau saat di atas lima puluh sembilan ditolak dan bukannya dibawa, kerana sembilan puluh saat bukan bacaan jam dan biasanya menunjukkan fail yang rosak atau salah tukar; menormalkannya secara senyap akan menggerakkan isyarat. Baris yang permulaan atau penghujungnya gagal dihuraikan menghasilkan isu yang direkodkan yang menamakan teks yang menyinggung perasaan dan bentuk yang dijangkakan, dan blok itu dilangkau dan bukannya meneka.

Baris teks — isyarat berbilang baris, teg pemformatan dan tempat sesuatu blok benar-benar berakhir

Segala-galanya selepas baris kod masa ialah teks isyarat, dicantumkan semula bersama-sama dengan baris baharu. Tiada had baris dan tiada percubaan untuk mengalir semula, jadi isyarat tiga baris kekal sebagai tiga baris. Inilah sebabnya baris kosong menanggung beban: ia adalah satu-satunya perkara yang memberitahu penghurai bahawa teks telah tamat, itulah sebabnya isyarat yang teksnya sendiri mengandungi baris kosong akan dibaca sebagai dua blok dan separuh kedua akan dilaporkan sebagai tidak mempunyai kod masa.

Tetapan kiu dipisahkan daripada cap waktu akhir dengan larian dua atau lebih ruang. WebVTT membenarkan arahan penentududukan seperti penjajaran dan peletakan baris mengikuti masa tamat pada baris yang sama, jadi penghurai memisahkannya sebelum cap masa dihuraikan dan menyimpannya di sebelah isyarat. Ruang tunggal bukan pemisah, yang mengekalkan baris kod masa yang tidak kemas daripada kehilangan masa tamatnya.

Contoh yang berjaya: menghuraikan fail lima-kiu dengan dua kesilapan yang disengajakan — perkara yang dipulihkan oleh penghurai yang teguh dan perkara yang dibenderakannya

Ambil fail lima blok di mana blok tiga telah rosak baris kod masanya untuk dibaca 00:01:75,000 --> 00:01:78,000 dan blok empat telah kehilangan baris kod masa sepenuhnya semasa salinan dan tampal. Penghurai membaca blok satu dan dua secara normal dan menomborkannya satu dan dua. Sekat tiga sepadan dengan bentuk kod masa tetapi membawa medan saat tujuh puluh lima, jadi ia ditolak dan direkodkan sebagai cap masa buruk menamakan baris yang tidak dapat dibaca.

Blok empat tidak mengandungi anak panah sama sekali, jadi ia direkodkan sebagai tidak mempunyai cap masa, memetik empat puluh aksara pertama blok supaya baris itu boleh ditemui dalam fail asal. Sekat lima penghuraian dan menjadi kiu tiga, bukan kiu lima, kerana penomboran mengira isyarat yang berjaya. Hasilnya ialah tiga petunjuk yang boleh digunakan dan dua aduan khusus yang terletak, bukannya pengecualian pada kesilapan pertama dan tiada maklumat tentang yang kedua.

Perkara ini tidak meliputi — ASS/SSA penggayaan, kod kedudukan dan teks bukan sari kata yang dibuang ke dalam SRT

Ini menerangkan SRT dan bahagian WebVTT yang berkongsi bentuk kiunya. Ia tidak meliputi ASS dan SSA, yang membawa pengepala skrip, takrif gaya dan rujukan gaya setiap peristiwa, dan yang tidak boleh dibaca dengan membelah pada baris kosong. Masa karaoke, arahan lukisan dan teg penggantian sebaris yang digunakan oleh format tersebut adalah di luar model penghurai kod-dan-masa.

Ia juga tidak membaiki teks. Transkrip yang ditampal ke dalam fail tanpa kod masa menghasilkan senarai blok yang tidak mempunyai cap masa, yang dilaporkan dengan tepat tetapi tidak boleh ditukar menjadi sari kata tanpa maklumat masa yang tidak ada. Kesilapan pengekodan adalah kebimbangan yang berasingan: fail yang dinyahkodkan dengan set aksara yang salah menghuraikan kepada isyarat yang sah dengan teks yang salah dan tiada jumlah semakan struktur akan mengesannya.

Bawa pulang: hurai dengan lembut, tulis dengan ketat — cara Kit Sari kata membaca kemas SRT dan menulis semula yang bersih

Peraturan kerja adalah untuk menghuraikan dengan lembut dan menulis dengan ketat. Dalam perjalanan masuk, terima waktu operasi pilihan, sama ada pemisah, baris indeks yang hilang, pengakhiran baris bercampur dan tanda pesanan bait utama dan rekod setiap kesilapan sebagai isu terletak dan bukannya membuang pada yang pertama, supaya fail boleh diperbaiki dalam satu laluan. Semasa keluar, keluarkan satu bentuk kanonik.

Itulah yang dilakukan oleh Kit Alat Sari kata apabila ia menukar. Isyarat dinomborkan semula daripada satu dan dikekalkan bersebelahan, cap masa dipancarkan semula dengan koma untuk SRT dan noktah untuk WebVTT, dan fail yang kembali adalah bentuk yang diharapkan pemain tanpa mengira betapa tidak sekata input itu. Tampalkan fail yang ditolak pemain ke dalam penukar dan baca isu yang dilaporkan dahulu; mereka menamakan isyarat dan memetik baris, yang biasanya cukup untuk mencari kesilapan dalam asal.