Video & subtitle · Perangkat Subtitle
Apa yang dimaksud dengan 'membersihkan' file subtitle: tag, kode, dan format menyimpang
· Cara kerjanya
subtitle pemrosesan teks format file
File subtitle mengumpulkan sampah: tag mirip HTML, kode gaya dari format lain, BOM liar, dan akhiran baris campuran. Postingan ini menjelaskan apa saja jenis kekacauan itu, dari mana asalnya, dan bagaimana langkah bersih menghilangkannya tanpa menyentuh kata-katanya.
Teksnya menampilkan '{\an8}' dan '<i>' di layar — gejala yang terlihat dari file subtitle yang tidak bersih
Saat keterangan menampilkan karakter tag alih-alih mematuhinya, pemain memberi tahu Anda bahwa itu tidak menerapkan markup tersebut. SRT tidak memiliki spesifikasi pemformatan, jadi dukungannya bersifat konvensional: banyak pemain menggunakan sekumpulan kecil tag mirip HTML, dan apa pun di luar kumpulan itu akan digambarkan sebagai teks literal. File yang ditampilkan dengan benar di satu pemutar dan menunjukkan tanda kurung kurawal di pemutar lain tidak berubah; hanya kumpulan tag yang dihormati yang memilikinya.
Inilah sebabnya mengapa pembersihan adalah operasi nyata, bukan pembersihan kosmetik. Kekacauan bukanlah dekorasi yang jelek. Ini adalah instruksi yang ditulis untuk satu format yang dibaca oleh pemain berbeda sebagai dialog, dan cara mengatasinya adalah dengan menghapus instruksi sambil membiarkan setiap kata tetap utuh.
Dari mana kekacauan itu berasal — ekspor dari format yang banyak menata gaya, keluaran OCR, dan editor yang menambahkan markupnya sendiri
Kebanyakan kekacauan muncul melalui konversi. File yang dibuat dalam format yang banyak gaya seperti ASS atau SSA membawa arahan pemosisian dan tampilan sebaris, dan konverter yang memetakan pengaturan waktu dengan tepat akan sering meneruskan arahan tersebut sebagai teks. Editor teks menambahkan markup mereka sendiri untuk identifikasi dan penekanan pembicara, dan pengenalan karakter optik dari subtitle yang dibakar memperkenalkan tanda baca yang menyimpang dan spasi ganda yang tidak diketik oleh penulis.
Tak satu pun dari sumber-sumber ini memiliki format yang salah di dunianya sendiri. Blok penggantian ASS bermakna di ASS. Masalahnya adalah SRT tidak memiliki padanannya, sehingga konversi yang tampak lossless menghasilkan file yang instruksinya bertahan sebagai karakter dan bukan sebagai perilaku.
Tag pemformatan — tag miring, tebal, dan font, yang dihormati oleh pemain dan ditampilkan secara harfiah
Tag kurung siku ditangani terlebih dahulu, dengan ekspresi reguler yang menghapus segala sesuatu antara kurang dari dan lebih besar berikutnya. Itu mencakup tag miring dan tebal, tag kelas WebVTT seperti anotasi kelas isyarat, dan tag suara yang menyebutkan nama pembicara. Properti pentingnya adalah ini adalah substitusi teks, bukan parser HTML, dan tidak mencoba mencocokkan tag pembuka dengan tag penutup.
Kesederhanaan itu mempunyai konsekuensi yang perlu diketahui. Baris dialog yang benar-benar mengandung kurang dari dan lebih besar dari, misalnya ketidaksetaraan lisan, teks di antaranya akan dihilangkan beserta tanda kurung. Hal ini jarang terjadi dalam dialog dan umum dalam teks teknis, jadi ada baiknya memindai keluaran dari materi yang membahas kode atau matematika.
Kode posisi dan gaya — apa arti kode seperti {\an8} di ASS/SSA dan mengapa kode tersebut menimbulkan gangguan di SRT
Kode kurung kurawal dihilangkan dengan substitusi kedua yang mencakup segala sesuatu di antara kurung kurawal pembuka dan penutup. Dalam format SubStation, ini adalah blok override, dan yang paling sering terlihat adalah blok yang memindahkan garis ke atas frame sehingga tidak bertabrakan dengan teks yang terbakar. Lainnya mengatur font, warna, rotasi, atau waktu karaoke.
Dalam file SRT tidak ada satupun yang berarti apa pun, itulah sebabnya file tersebut dihapus daripada diterjemahkan. Petunjuk posisi tidak memiliki padanan SRT untuk diterjemahkan: formatnya tidak memuat penempatan. Menghapus kode akan menghilangkan maksud penulis bahwa garis harus berada di bagian atas bingkai, dan kehilangan itu nyata, tetapi lebih baik daripada mencetak kode ke pemirsa.
Kekacauan yang tak terlihat — tanda urutan byte, campuran akhiran baris CRLF dan LF serta spasi tambahan
Kekacauan yang tidak terlihat ditangani lebih awal, selama penguraian, dan sebaiknya dipisahkan karena itu bukan bagian dari teks sama sekali. Tanda urutan byte di awal file akan dihapus sebelum yang lainnya, karena jika tidak, tanda tersebut akan melekat pada nomor indeks pertama dan memerlukan isyarat pertama. Pengembalian pengangkutan dinormalisasi, baik pasangan Windows maupun pengembalian pengangkutan tunggal, sehingga file yang diedit pada dua platform dibagi menjadi beberapa blok dengan benar.
Spasi putih di dalam isyarat ditangani dengan tag. Jaringan dua atau lebih spasi atau tab diciutkan menjadi satu spasi, setiap baris dipangkas satu per satu, dan isyarat secara keseluruhan dipangkas setelah baris-baris tersebut digabungkan kembali. Entitas karakter sengaja dibiarkan saja: entitas ampersand adalah konten yang harus dilihat pemirsa, bukan markup, dan pembersih yang menerjemahkannya akan mengedit dialog, bukan menghapus instruksi.
Contoh praktis: membersihkan ekspor isyarat 200 — apa yang berubah, apa yang tersisa, dan bagaimana cara memeriksa hasilnya
Membersihkan ekspor yang besar tidak banyak berubah dari yang terlihat. Ambil dua ratus file isyarat di mana konverter telah mengawali kode bagian atas bingkai menjadi enam puluh isyarat dan membungkus tag penekanan di sekitar empat puluh isyarat lainnya. Kedua substitusi menghapus kode dan tag, spasi putih menciutkan spasi ganda yang ditinggalkan oleh penghapusan, dan dua ratus isyarat menjadi dua ratus isyarat dengan kata-kata yang sama dan pengaturan waktu yang sama.
Dua langkah selanjutnya penting. Isyarat yang seluruh isinya adalah kode liar menjadi kosong setelah kode tersebut hilang, dan isyarat kosong dihapus dalam lintasan terpisah, bukannya dipancarkan sebagai blok kosong, karena isyarat dengan stempel waktu dan tanpa teks adalah celah yang dirender oleh beberapa pemain sebagai flash. Menulis kembali file akan menomori ulang isyarat dari satu dan menjaganya tetap berdekatan, sehingga penghapusan tidak meninggalkan lubang pada urutannya. Periksa hasilnya dengan membandingkan jumlah isyarat dan memeriksa setiap baris yang awalnya berisi suatu entitas.
Apa yang tidak tercakup dalam hal ini — menulis ulang teks itu sendiri, ejaan atau terjemahannya; kata-kata itu milikmu
Pembersihan menghilangkan markup dan tidak menyentuh bahasa. Itu tidak memperbaiki ejaan, memperluas singkatan, memperbaiki kesalahan transkripsi, atau menerjemahkan. Jika keterangan menyebutkan kata yang salah, teks tersebut akan menyebutkan kata yang salah setelahnya, dengan format yang benar. Batasan tersebut disengaja: alat yang secara diam-diam menulis ulang dialog tidak mungkin dapat dipercaya berdasarkan materi yang tidak dipahaminya.
Itu juga tidak memperbaiki struktur. File yang bloknya tidak memiliki stempel waktu memiliki masalah penguraian, bukan masalah pemformatan, dan menghapus tag darinya tidak akan menghasilkan isyarat. Kesalahan pengkodean juga berada di luar cakupan. File yang didekodekan dengan jaringan karakter yang salah menghasilkan isyarat yang terbentuk dengan baik yang teksnya salah, dan tidak ada penghapusan tag yang mendeteksi hal itu, karena tidak ada struktur yang rusak.
Kesimpulan: hapus markup, pertahankan makna — bagaimana langkah bersih Perangkat Subtitle menangani kekacauan umum dan mendokumentasikan apa yang ditinggalkannya
Aturannya adalah hapus markup, pertahankan makna. Tag kurung sudut dan kode kurung kurawal digunakan karena merupakan instruksi yang diabaikan atau dicetak oleh pemain. Spasi ganda dan padding per baris digunakan karena merupakan artefak penghapusan atau ekspor asli. Entitas, tanda baca, dan setiap kata tetap ada, karena itulah yang dimaksudkan untuk dibaca oleh pemirsa.
Jalankan ekspor yang banyak tag melalui konverter Subtitle Toolkit dan bandingkan dengan yang asli daripada langsung mempercayai hasilnya. Pastikan jumlah isyarat tidak berubah kecuali jika isyarat benar-benar kosong, periksa apakah baris mana pun yang memuat entitas masih memuatnya, dan pindai baris yang membahas kode atau matematika untuk mencari teks yang hilang karena tanda kurung siku.