BookTranslator
BookTranslator

ASS/SSA Altyazıları Stilleri, Konumları veya Karaokeyi Bozmadan Nasıl Çevirilir

Bir .ass dosyasında yalnızca görünen diyalogları çevirin, ardından zamanlamayı, etiketleri, karaokeyi ve yazı tiplerini kontrol edin. Örnek bir dosya, ücretsiz bir denetleyici ve 9 çalıştırmalık yerel bir LLM testiyle.

BookTranslator

BookTranslator Team

11 min read

Bir ASS veya SSA altyazı dosyası küçük bir programdır: bir başlık, bir stil tablosu ve son alanı diyalog ile biçimlendirme kodunu karıştıran zamanlanmış olaylar listesi. Çevirmek için yalnızca bu son alandaki okunabilir kelimeleri değiştirin, geri kalan her şeyi bayt bayt olduğu gibi bırakın ve ardından hiçbir çeviri aracının sizin için düzeltmediği üç şeyi kontrol edin: yazı tipleri, aralık kodları ve karaoke satırları.

14 olaylık bir örneği yerel bir modelle üç farklı istem kullanarak dokuz kez Basitleştirilmiş Çinceye çevirdik ve her sonucu yazdığımız bir betikle kontrol ettik. Zamanlama, konumlar, renkler, yorumlar ve çizimler dokuzunda da korundu. Bozulan şeyler, dosyanın İngilizceyi varsayan kısımlarıydı: dokuzunda da stil yazı tiplerinde Çince karakter yoktu, bu yüzden dosya bir yazı tipini değiştirmesi için oynatıcıya güvenmek zorunda kalacaktı ve İngilizce satırdan gelen sabit bir boşluk Çincede görünür bir boşluğa dönüştü. Karaoke satırı her çalıştırmada zamanlaması yanlış kelimelere yönlendirilmiş olarak geri geldi ve dört çalıştırmada bazı heceler hiçbir şeyi vurgulamadı.

Kısa Yanıt: Neyi Çevirmeli ve Neyi Olduğu Gibi Bırakmalı

Dosyanın bölümüÖrneğimizden alıntıÇevrilsin mi?
[Script Info] başlığıPlayResX: 1920, WrapStyle: 0Hayır. Konumlar bu değerlerden hesaplanır.
[V4+ Styles]Style: Default,Trebuchet MS,64,...Hayır, ancak bilerek değiştirmeniz gerekebilecek yazı tipi adı hariç
Olay alanları 1–90,0:00:01.00,0:00:03.20,Default,Jun,0,0,0,Hayır. Bunlar katman, zamanlama, stil, konuşmacı, kenar boşlukları ve efekt.
Geçersiz kılma blokları{\i1}, {\an8\pos(960,120)}, {\k25}Hayır
Çizimler{\p1}m 0 0 l 200 0 200 60 0 60{\p0}Hayır. Bu bir vektör şekli, metin değil.
Comment: olaylarıComment: ...,Earlier draft: Try the stacks.İsteğe bağlı. Yorumlar asla ekranda görünmez.
Süslü parantez notları{TL note: "stacks" means the closed shelves}İsteğe bağlı. Oynatıcılar bunları yok sayar.
Görünen diyalogDid you find the second volume?Evet
Satır kodları\N, \n, \h\N ifadesini koruyun. \n ve \h için duruma göre karar verin.

Bu kılavuzun geri kalanı, her satırın neden önemli olduğunu ve sonucu nasıl kontrol edeceğinizi açıklar.

Bir ASS Satırı Nasıl Oluşturulur

[Events] bölümündeki her satır, hemen üstünde bildirilen biçimi izler:

Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:03.40,0:00:06.10,Default,Mara,0,0,0,,{\i1}I thought it was{\i0} sold out.

İzleyicinin okuduğu her şey yalnızca onuncu alan olan Text içinde yer alır. libass projesinin ASS dosya biçimi kılavuzu, bu son alanın "virgül içermesine izin verildiğini" belirtir; bu nedenle her virgülden dikkatsizce bölmek, Well, if it's there, then, we go now. gibi bir satırı bozar. Güvenli bir araç yalnızca ilk dokuz virgülden böler.

Text içinde, süslü parantez içindeki her şey bir geçersiz kılma bloğudur. Aegisub'un geçersiz kılma etiketi başvurusu, en sık karşılaşacağınız kodları tanımlar:

  • \N her sarma modunda satır sonu zorlar. \n yalnızca sarma modu 2'de satırı böler, aksi halde boşluktur. \h bölünmez boşluktur.
  • \an8 hizalamayı sayısal tuş takımı düzenine göre ayarlar, yani 8 üst ortadır. \pos(960,120) satırı betik koordinatlarına yerleştirir.
  • \k25 bir karaoke hecesidir; süreler santisaniye cinsindendir, yani 25 çeyrek saniye anlamına gelir.
  • \p1 sonrasında metin "çizim talimatları olarak yorumlanacaktır", bu nedenle m 0 0 l 200 0 ifadesini "çeviren" bir çevirmen bir şekli yok eder.
  • Süslü parantez içindeki tanınmayan metin "sessizce yok sayılır", bu nedenle fansub dosyalarında sıklıkla süslü parantez içinde çevirmen notları bulunur.

Comment: ile başlayan satırlar aynı alanları kullanır, ancak libass kılavuzuna göre "ekranda hiçbir şey görüntülenmez."

Neyi Test Ettik

Bir kitapçıda geçen 14 olaylık bir sahne olan sample-source.ass dosyasını yazdık; yukarıdaki her özellikten birer örnek içeriyor: italik, zorunlu satır sonu, diyalogda virgüller, süslü parantez notu, yorum satırı, konumlandırılmış tabela, vektör kutusu, solma, zorunlu boşluk, \r ile renk değişimi, yumuşak satır sonu, kayan Banner efekti ve altı heceli karaoke satırı.

Ardından yerel bir modelden bunu Basitleştirilmiş Çinceye üç şekilde çevirmesini istedik:

  1. Tüm dosya. Tüm .ass dosyasını yapıştırın ve çevrilmiş dosyayı geri isteyin.
  2. Yalnızca metin. Her diyalog satırının yalnızca Text alanını JSON olarak, etiketler satır içinde olacak şekilde ve her {...} bloğunu ve her \N, \n ve \h ifadesini koruma talimatıyla gönderin.
  3. Korumalı. Aynısı, ancak önce her süslü parantez bloğunu ve satır kodunu numaralı bir yer tutucuyla değiştirin ve sonra orijinalleri geri koyun.

İkinci ve üçüncü koşullarda betik vektör çizimini veya yorum satırını modele hiç göndermez, bu nedenle bu satırlar yalnızca tüm dosya koşulunda zarar görebilirdi.

Model, 64 GB belleğe sahip bir Apple M4 Max üzerinde LM Studio 0.4.8'de Qwen 3.6 27B (Q4_K_M) idi; düşünme kapalı ve sıcaklık 0,3 olarak ayarlandı. Her koşulu üç kez, toplamda dokuz kez çalıştırdık. Üçüncü çalıştırmadaki ilk deneme, yerel sunucu bağlantıyı düşürdüğünde sona erdi, bu yüzden yeniden başlattık ve üçüncü turu tekrar çalıştırdık. Betik run_llm_ass_test.py ve dokuz çıktının tamamı düzenlenmeden onunla birlikte yayınlandı; README her dosyayı listeler. Daha önce hiç yerel model kurmadıysanız, yerel LLM çeviri kılavuzumuz ayarları kapsar.

Bu, tek bir model, tek bir dil çifti ve tek bir örnekle yapılan küçük bir testti. Hangi sorunların oluştuğunu ve bunları nasıl yakalayacağınızı gösterir. Araçları veya istemleri sıralamaz.

Sonuç: Mekanizma Hayatta Kaldı; İngilizce Varsayımlar Kalmadı

Her çıktıyı check_ass_translation.py ile kontrol ettik. Tam çıktı check-results.txt dosyasında ve results.csv her çalıştırma için bir satır içeriyor, betiğin göremediği sorunlar dahil.

KontrolTüm dosyaYalnızca metinKorumalı
Zamanlama, stiller ve 1–9 arası alanlar değişmedi3 / 33 / 33 / 3
Geçersiz kılma etiketleri değişmedi3 / 32 / 33 / 3
Çizim ve yorum satırlarına dokunulmadı3 / 33 / 33 / 3
Stil yazı tipleri çeviriyi çizebiliyor0 / 30 / 30 / 3
\h ve \n Çince metinde boşluk olarak bırakıldı3 / 33 / 33 / 3
Tüm karaoke etiketleri korundu, her biri metinle birlikte3 / 30 / 31 / 3

İki sonuç bizi şaşırttı. Dosyanın tamamını yapıştırmak, üç denemenin hepsinde yapıyı korudu, ancak ikisinde başlıktaki Title satırını da çevirdi. Daha güvenli görünen yalnızca metin istemi ise tek bozuk etiketleri üretti. Bir denemede, altı karaoke etiketi içeren bir satır için {\k25}翻{\k30}页,{\k45}开{\k60}灯 döndürdü. Son iki etiket ve 1,20 saniyelik vurgulama süresi kayboldu, bu yüzden vurgulama satırdan çok önce sona erecekti. Aynı deneme Room\h12 is upstairs. ifadesini 12\h12号房间在楼上。 şeklinde çevirdi ve oda numarası iki kez yer aldı.

Yani işe yarar ders "X istemini kullanın" değil. Korktuğunuz yapısal hasarın tespit edilmesi kolay ve dokuz denemenin tamamında gerçekten içeri sızan hasar, ASS çevirisi için araç sayfalarının tartışmadığı üç yerde yatıyor.

1. Yazı tipleri yeni dili çizemiyor

Örnekteki stiller diyalog için Trebuchet MS, tabelalar için Georgia kullanıyor; bu bir İngilizce sürüm için normaldir. Hiçbir yazı tipi Çince karakterler içermiyor. Denetleyicinin glif testini iki yazı tipi dosyasına yönlendirdiğimizde, her denemede çevrilen 12 metin olayının tamamı başarısız oldu:

ERROR   event 1: font 'Trebuchet MS' has no glyph for 9 characters, e.g. 了二你到卷吗找第?
ERROR   event 7: font 'Georgia' has no glyph for 10 characters, e.g. 书人仅作员工库架闭限

Bir oynatıcı yüklü başka bir yazı tipini kullanabilir, bu yüzden altyazı yine de görünebilir, ancak sürüm artık nasıl göründüğünü kontrol etmez ve sisteminde uygun yazı tipi olmayan bir izleyici boş kutular görebilir. Çözüm, her stilin Fontname alanına bilinçli bir düzenleme yapmaktır. Bir çıktıdaki üç stilin tamamını macOS ile gelen bir Çince yazı tipi olan Hiragino Sans GB olarak değiştirip glif testini o yazı tipine karşı çalıştırdığımızda, glif hataları sıfıra düştü.

İzleyicilerinizin gerçekten sahip olacağı bir yazı tipi seçin veya videoyla birlikte gönderin. libass kılavuzu, sürümlerin kullandıkları her yazı tipini, tercihen MKV kapsayıcısına eklemeleri gerektiğini söyler. Hedef dilin yazı tipi yeni olduğu için, artık onu eklemek çeviri işinin bir parçasıdır.

2. Boşluk kodları İngilizce alışkanlıkları taşır

Room\h12, "Room" ile "12"yi birbirine yapıştırır, böylece asla satırlar arasında bölünmezler. Çincede kelimeler boşluklarla ayrılmaz, ancak her deneme \hyi bir yerde tuttu: beş deneme onu 12号房间 ile 在楼上 arasına, üçü sayıdan önceye, biri de sayının iki kopyası arasına yerleştirdi. Her iki durumda da izleyici başıboş bir boşluk görür. Wait\nhere. de aynı sorunu yaşadı. WrapStyle: 0 ile \n bir boşluk olarak görüntülenir, bu yüzden 在\n这里等 üç kelimelik bir cümlenin ortasında bir boşluk gösterir.

Burada yapı sorunsuz; dil sorunlu. Kelimeler arasında boşluk olmayan bir hedef dil için, çevrilen metinden \h ve \nyi kaldırın. \Nyi yalnızca zorunlu bir satır sonu istediğiniz yerde tutun ve hedef cümlede doğal bir noktaya yerleştirin. Denetleyici bu nedenle değişen \h ve \n sayılarını hata yerine uyarı olarak bildirir ve biri Çince, Japonca veya Korece metin içinde hayatta kaldığında uyarır.

3. Karaoke zamanlaması orijinal kelimelere aittir

Karaoke satırı {\k25}Turn {\k30}the {\k45}page, {\k60}turn {\k40}the {\k80}light her İngilizce heceyi şarkıya göre zamanlar. Bir çeviri bu zamanlamayı anlamlı bir şekilde koruyamaz, çünkü Çince kelimeler aynı vuruşlara denk gelmez. Denemelerimiz yanlış gitmenin farklı yollarını gösteriyor:

  • Dört denemede altı etiketin tamamı korundu, her biri eskisinden farklı bir kelimeye yerleştirildi. Bunlardan biri {\k40}打{\k80}开, yani "aç" ile bitti ve "light" kelimesini satırdan tamamen çıkardı.
  • Dört denemede bir hece hiçbir şeyi vurgulamadı, örneğin 打开{\k40}{\k80}灯 (boş bir hecede 0,40 saniyelik vurgulama). Bunlardan ikisinde, 0,45 saniyelik bir hece yalnızca bir virgülü vurguladı.
  • Bir denemede, yukarıda açıklandığı gibi iki etiket kayboldu.

Denetleyici, yerinde çevrilmiş bir karaoke satırını ve metinsiz bırakılan herhangi bir heceyi işaretler. Daha iyi çözüm editoryaldir: karaokeyi yerinde çevirmeyin. Şarkıya eşlik etmek için orijinal zamanlanmış satırı koruyun ve çeviriyi ayrı bir olay olarak ekleyin: karaoke olayını kopyalayın, ona kendi stilini verin (örneğin daha küçük ve alta yerleştirilmiş), \k etiketlerini kaldırın ve metni çevirin. Yalnızca sesle kendiniz zamanlamaya hazırsanız, hece hece yeniden zamanlayın.

Sağlam Bir İş Akışı

  1. Önce kaynağı okunabilir hale getirin. Dosya bozuk karakterler gösteriyorsa, her şeyden önce kodlamayı düzeltin. Kodlama kılavuzumuz SRT örnekleri kullanır, ancak aynı bayt düzeyindeki adımlar bir .ass dosyası için de çalışır ve orijinal baytları güvende tutar. Denetleyici yalnızca UTF-8 ve UTF-16 okur.

  2. Kapsamı belirleyin. Stilleri listeleyin ve hangilerinin diyalog, hangilerinin ekran tabelaları, hangilerinin karaoke olduğuna karar verin. Tabelalar genellikle çeviri gerektirir; karaoke genellikle ayrı bir satır gerektirir; yorumlar ve süslü parantez notları sizin kararınıza kalmıştır.

  3. Yalnızca Text alanını çevirin. ASS'yi düz metin olarak ele almak yerine ayrıştıran bir araç kullanın veya üçüncü koşulumuzdaki gibi etiketleri kendiniz koruyun. Kaynak dosyayı çıktının yanında tutun.

  4. Yapısal kontrolü çalıştırın.

    python3 check_ass_translation.py source.ass translated.ass
    

    Olay sayısını, olay türlerini, 1–9 alanlarını, stil değerlerini, geçersiz kılma bloklarını, çizimleri, yorum satırlarını, \Nyi, karaoke hecelerini ve sürelerini ve boş veya değişmeden dönen satırları karşılaştırır. Çeviri kalitesini yargılamaz.

  5. Yazı tiplerini bilinçli olarak düzeltin. Artık hedef dil metni taşıyan her stildeki Fontname değerini değiştirin, ardından dağıtacağınız yazı tipi dosyasına karşı glif testini çalıştırın:

    pip install fonttools
    python3 check_ass_translation.py source.ass translated.ass --font "Noto Sans SC=/path/to/NotoSansSC-Regular.otf"
    

    Değiştirilen bir yazı tipi adı uyarı olarak görünür, böylece her değişikliğin amaçlandığı gibi olduğunu doğrulayabilirsiniz.

  6. Aralık kodlarını ve karaokeyi yukarıda açıklandığı gibi temizleyin.

  7. Videoyla birlikte izleyin. Dosyayı Aegisub'da veya oynatıcınızda açın. Tabelaların arkalarında çizilen şekillere hâlâ uyduğunu kontrol edin, çünkü bir \p kutusu İngilizce boyutunu korurken çevrilmiş bir tabela çok daha uzun veya kısa olabilir. Satırların ekranda kalma süreleri için çok uzun olmadığını kontrol edin. Bu sorunların ikisi de dosyanın kendisinde görünmez.

BookTranslator Nerede Devreye Girer

BookTranslator'ın Altyazı Çevirmeni SRT, VTT, ASS ve SSA dosyalarını kabul eder. Ürün sayfasına göre zaman damgalarını ve altyazı sırasını korur, desteklenen ASS ve SSA stillerini her altyazı girdisine bağlı tutar, böylece metni kendiniz çıkarıp yeniden eklemek zorunda kalmazsınız. Diyalogları çevreleyen satırlarla birlikte bağlam olarak çevirir; bu da bir bölüm boyunca isimler ve tekrar eden espriler konusunda yardımcı olur.

Bu makale için bu örneği BookTranslator üzerinden çalıştırmadık. Hangi aracı kullanırsanız kullanın, sonuç üzerinde 4. ila 7. adımları uygulayın. İngilizce yazı tipini koruyan bir stil hâlâ Çince çizemeyen bir stildir ve yerinde çevrilen karaoke hâlâ editoryal bir karar gerektirir. Altyazı iş akışının geri kalanı için AI altyazı çeviri rehberimize, altyazı çeviri yazılımları karşılaştırmamıza ve çeviriniz YouTube'a gidecekse YouTube altyazı iş akışına bakın.

Bunun Yerine SRT'ye Ne Zaman Dönüştürmeli

Çevirmeden önce ASS'yi SRT'ye dönüştürmek stilleri, konumları, çizimleri ve karaokeyi ortadan kaldırır; bu da yukarıdaki sorunların çoğunu giderir. Hedefiniz yalnızca düz altyazı gösteriyorsa veya stil sürüm için hiç önemli değilse bu makul bir takastır. Tabelaların ve karaokenin işin parçası olduğu anime ve müzik sürümleri için yanlış bir takastır. Hangi biçimin çevrilmesi daha kolay olduğuna göre değil, dosyanın nerede gösterileceğine göre karar verin.

Test Dosyalarını Edinin

Bu testteki her şey ücretsiz olarak yeniden kullanılabilir:

İlgili Yazılar