Altyazı Dosyası Dönüştürme: Doğruluk, Uyumluluk ve Erişilebilirlik için En İyi Uygulamalar

Altyazı dosyaları, konuşulan içerik ile altyazı, çeviri ya da görsel ipuçları ihtiyacı duyan izleyiciler arasındaki görünmez köprüdür. Video ya da görüntü verilerinin aksine, bir altyazı zamanlama, diyalog ve bazen stilin düz‑metin temsili şeklindedir. Bu metni formatlar arasında dönüştürmek basit gibi görünebilir, ancak dikkatsiz bir dönüşüm zaman damgalarını kaydırabilir, karakter kodlamasını bozabilir, gerekli stili silebilir ya da erişilebilirlik standartlarıyla uyumu kırabilir. Aşağıdaki rehber, altyazı dönüşümünün teknik inceliklerini adım adım açıklar, güvenilir iş akışlarını gösterir ve altyazıların kullanılabilir ve yasal açıdan sağlam kalması için gerekli korumaları vurgular.

Neden Altyazı Dönüştürme Önemlidir

Video platformları, yayın sistemleri ve e‑öğrenme portalları her biri kendi altyazı spesifikasyonlarını uygular. Bir YouTube yüklemesi WebVTT (.vtt) beklerken, pek çok masaüstü medya oynatıcı hâlâ SubRip (.srt) kullanır. Yayın ortamları EBU‑STL (.stl) ya da TTML (.ttml) talep edebilir. Bir içerik kütüphanesi büyüdükçe—çok dilli bir dizi, kurumsal bir eğitim modülü ya da konferans konuşmalarının bir arşivi gibi—her dil için tek bir kaynak dosya tutmak kısa sürede sürdürülemez hâle gelir. Ana altyazıyı gerekli formatlara dönüştürmek, içeriği verimli bir şekilde yeniden kullanmanın tek yoludur.

Teknik uyumluluğun ötesinde, erişilebilirlik mevzuatı (Amerika Engelliler Yasası, Avrupa Erişilebilirlik Yasası veya WCAG 2.1 gibi) genellikle altyazıların bir saniyenin bir kesri içinde doğru olmasını ve uygun dil işaretlemesi içermesini şart koşar. Dönüşüm sırasında oluşan hatalar videoyu uyumsuz hâle getirebilir, bir kuruluşu yasal risk altına sokabilir ya da izleyicileri sadece rahatsız edebilir.

Yaygın Altyazı Formatlarına Genel Bakış

BiçimUzantıTipik KullanımAna Özellikler
SubRip (SRT).srtGeniş uyumluluk, basit düzenlemeDüz metin, ISO‑8859‑1 veya UTF‑8, sıralı sayısal cue kimlikleri
WebVTT.vttWeb akışı, HTML5 videoBaşlık ekler (WEBVTT), cue ayarlarını destekler (konum, hizalama), Unicode varsayılan
Advanced SubStation Alpha (ASS/SSA).ass / .ssaAnime hayran alt yazıları, özel stilZengin stil bloğu, cue bazlı geçersiz kılmalar, karaoke efektlerini destekler
EBU‑STL.stlYayın, DVD hazırlamaİkili dosya, sabit uzunluklu alanlar, sınırlı karakter seti (genellikle ISO‑6937)
TTML (Timed Text Markup Language).ttmlAkış hizmetleri, SMPTE‑uyumlu iş akışlarıXML‑tabanlı, kapsamlı meta veriler, birden fazla bölgeyi destekler
DFXP (Distribution Format Exchange Profile).dfxpNetflix, HuluXML, TTML türevi, genellikle bir cc ad alanı içinde

Her format farklı kısıtlamalar getirir. Dönüştürürken, kaynağın yeteneklerini hedefin sınırlamalarıyla eşleştirirken gerekli verileri kaybetmemeye özen göstermeniz gerekir.

Zamanlama Doğruluğunu Korumak

Kare‑Hızı Bilinci

Altyazılar zamanlamayı mutlak zaman damgaları (saat:dakika:saniye,milisaniye) ya da kare sayısı (özellikle yayın formatlarında) şeklinde ifade eder. Kare‑tabanlı bir kaynaktan (ör. EBU‑STL) zaman‑tabanlı bir formata (SRT, VTT) geçiş, orijinal videonun tam kare‑hızını gerektirir. 0,1 fps’lik bir uyumsuzluk, 30 dakikalık bir programda birkaç saniyelik sapmaya yol açabilir.

Pratik ipucu: Dönüştürmeden önce videonun kare‑hızını meta verilerinden (ffprobe ya da MediaInfo) kaydedin. Bir kare‑hızı argümanını kabul eden bir araç (ör. ffmpeg -i input.stl -f srt output.srt -r 29.97) kullanıyorsanız, tam değeri iletin.

Drop‑Frame vs. Non‑Drop‑Frame

NTSC video (≈29.97 fps) gerçek zamanla senkronizasyonu sağlamak için zaman zaman drop‑frame zaman kodu kullanır. Bu zaman kodlarını drop‑frame varsaymayan bir düz‑metin formatına dönüştürmek, saat başına yaklaşık 3,6 saniyelik sistematik bir sapma yaratır.

Çözüm: Kaynağın drop‑frame notasyonu (SMPTE zaman kodunda noktalı virgül ; ayırıcı) kullanıp kullanmadığını belirleyin. Kullanıyorsa, önce zaman damgalarını mutlak saniyelere çevirin, ardından hedef formatın virgül‑ayırmalı stilinde yeniden oluşturun.

Doğrulama Araçları

Dönüştürmeden sonra, altyazı diffi çalıştırarak cue başlangıç/bitiş zamanlarını bir tolerans içinde (ör. ±0.02 s) karşılaştırın. pysrt kütüphanesini kullanan basit Python betikleri, iki dosyayı yükleyip cue’ları döngüye alarak uyumsuzlukları işaretleyebilir. Büyük toplular için, bu diff’i bir CI adımına entegre ederek sapmaları erken yakalayın.

Karakter Kodlaması ve Dil Yönüyle Baş Etmek

Modern altyazı formatlarının çoğu UTF‑8 varsayar, ancak EBU‑STL gibi eski formatlar ISO‑6937 ya da ISO‑8859‑15 içerebilir. Dönüştürürken kodlayıcı, kaynak kodlamasını algılayıp doğru olarak yeniden kodlamalıdır.

Kodlama tespiti: Dönüştürmeden önce kaynağın karakter setini tahmin etmek için chardet ya da enca kullanın. Yanlış tespit edilen kodlamalar “é” gibi bozuk karakterlere yol açar (“é” yerine).

Sağ‑dan‑sol diller: Arapça, İbranice ve Farsça yalnızca doğru kodlamayı değil, aynı zamanda uygun bidi işleme de gerektirir. WebVTT direction: rtl; cue ayarını, ASS \R2 geçersiz kılmasını destekler. Dönüştürürken, varsa kaynak işaretlemesinden bu yönergeleri hedefe taşıyın.

Unicode Normalizasyonu: Bazı platformlar NFC, bazıları NFD kabul eder. Dönüştürmeden sonra kayıp aksan görürseniz, hedef dosyaya yazmadan önce unicodedata.normalize('NFC', text) uygulayın.

Stil ve Konumlandırmayı Korumak

Yalnızca bir alt küme altyazı formatı görsel stil desteği sunar. Zengin stil içeren bir kaynaktan (ör. ASS) düz‑metin bir formata (SRT) geçmek kaçınılmaz olarak bu bilgiyi kaybeder. Yine de mümkün olduğunca çok şeyi korumak için stratejiler vardır:

  1. Temel stilleri eşleştir – renk, yazı tipi boyutu ve hizalama WebVTT’nin cue ayarları (color:#ff0000, line:90%) ile ifade edilebilir. ASS’e geçişte, orijinal VTT cue ayarlarını yansıtan bir stil bloğu oluşturun.
  2. Stil meta verisini dışa aktar – Hedef format stil temsil edemiyorsa, bir yorum satırı (NOTE VTT’de) ekleyerek istenen görünümü açıklayın. Bu, sonraki editörler için faydalıdır.
  3. Konumlandırmayı koru – Bazı formatlar mutlak piksel konumlandırmasını (position:10%) destekler. Bu sayıları dönüştürürken koruyun; alt‑ekran grafikleri üzerini kapatabilecek varsayılan alt‑ortalanmış konuma geri dönmekten kaçının.

Dönüşüm yönü basit bir formattan karmaşığa (ör. SRT → ASS) ise, varsayılan stil profili ekleyerek okunabilir bir yazı tipi, yarı saydam arka plan ve makul bir kenar boşluğu oluşturabilirsiniz. Böylece yeni oluşturulan altyazılar manuel ayar yapmadan kullanılabilir hâle gelir.

Büyük Kütüphaneler İçin Toplu Dönüştürme İş Akışı

Tek bir altyazı dosyasını işlemek basittir; çok dilli varlıkların tüm kataloğunu işlemek otomasyon gerektirir. Aşağıda Python ve FFmpeg üzerine inşa edilmiş minimalist, çapraz‑platform bir pipeline örneği verilmiştir:

import os, subprocess, json, pathlib
from pathlib import Path

# Configuration ---------------------------------------------------
SOURCE_DIR = Path('raw_subtitles')   # .ass, .stl, .ttml, vs.
TARGET_DIR = Path('converted')
TARGET_FORMAT = 'vtt'                # İstenen çıktı formatı
FRAME_RATE = 23.976                 # Kare‑tabanlı kaynaklar için gerekli

# Helper: run a command and capture output ----------------------
def run_cmd(cmd):
    result = subprocess.run(cmd, capture_output=True, text=True)
    if result.returncode != 0:
        raise RuntimeError(f"Command failed: {' '.join(cmd)}\n{result.stderr}")
    return result.stdout

# Main loop ------------------------------------------------------
for src_file in SOURCE_DIR.rglob('*.*'):
    rel = src_file.relative_to(SOURCE_DIR)
    dest = TARGET_DIR / rel.with_suffix('.' + TARGET_FORMAT)
    dest.parent.mkdir(parents=True, exist_ok=True)
    cmd = [
        'ffmpeg', '-y', '-i', str(src_file),
        '-c:s', TARGET_FORMAT, '-r', str(FRAME_RATE),
        str(dest)
    ]
    print(f"Converting {src_file} → {dest}")
    run_cmd(cmd)

Neden işe yarar: FFmpeg, çoğu altyazı konteynerini anlar ve zaman damgası dönüşümü, karakter seti işleme ve temel stil çevirisini otomatik yapar. Betik, kaynak ağacını dolaşarak dizin hiyerarşisini korur; bu, dil kodlarının yol içinde (en/episode01.srt) yer aldığı çok dilli kurulumlarda kritiktir.

FFmpeg’in ihtiyacınız olan bir codec’i (ör. EBU‑STL → ASS) desteklemediği durumlarda, subtitleedit (GUI) ya da stl2srt (CLI) gibi altyazıya özgü araçları Python betiğine subprocess çağrılarıyla ekleyerek iş akışını tamamlayın.

Kalite Güvencesi: Dönüştürülmüş Altyazıların Testi

Disiplinli bir QA süreci, altyazı‑kaynaklı hataların izleyiciye ulaşmasını engeller.

  1. Checksum Karşılaştırması – Kaynağın metinsel içeriğinin (zaman damgaları hariç) MD5 karmasını üretin ve hedefteki metni biçimleme etiketlerini temizleyerek karşılaştırın. Aynı hash, diyalog kaybı olmadığını gösterir.
  2. Oynatma Doğrulamasıffprobe ile son video konteynerindeki altyazı akışlarını çıkarın ve beklenen cue ve dil sayısının mevcut olduğunu teyit edin.
  3. Görsel Spot‑Check – Videoyu yeni altyazı iziyle (VLC, bir web tarayıcısı vb.) oynatıp hızlı diyalog, çakışan konuşmalar gibi kritik anların senkronizasyonunu kontrol edin.
  4. Erişilebilirlik Denetimi – Web sayfasında WebVTT altyazılarını gömülü bir video için otomatik bir WCAG kontrolü (ör. axe‑core) çalıştırın. Araç, <track> öğesinde eksik dil niteliği (lang="en") ve zamanlama ihlallerini işaretler.

Otomatik bir pipeline’da adımlar 1‑3 betiklenebilir; adım 4 ise sürüm öncesi manuel bir kontrol olarak tutulur.

Çevrimiçi Dönüştürücüler Kullanılırken Gizlilik Düşünceleri

Birçok kuruluş, kaynak dosyalarda telif hakkı içeren diyalog, gizli toplantı kayıtları ya da kişisel veri bulunabileceği için bulut‑tabanlı altyazı dönüşümünden kaçınır. Çevrimiçi bir hizmet bu metni işlerse, potansiyel bir veri sızıntı vektörü oluşur.

Gizlilik‑öncelikli bir yaklaşım üç ilkeyi izler:

  • Kalıcı depolama yok – Hizmet, dönüşüm sonrası dosyayı anında silmelidir.
  • Taşıma şifrelemesi – HTTPS (TLS 1.2+) kullanılmalı; sertifika parmak izleri doğrulanmalıdır.
  • Sıfır‑bilgi işleme – Sunucu, altyazı içeriğinin okunabilir bir kopyasını tutmamalıdır.

Araç gereksinimi duyup yazılım kurmak istemeyen takımlar için convertise.app adresindeki web‑tabanlı araç, dosyaları tamamen bellek içinde işler ve içerik kaydı tutmaz; bu da gizlilik‑öncelikli bir iş akışıyla uyumludur.

Yaygın Tuzaklar ve Kaçınma Yöntemleri

BelirtiTemel NedenÇözüm
Çakışan cue’lar dönüştürmeden sonra kaybolurHedef format aynı zaman damgasında birden fazla cue’u desteklemiyor (ör. SRT)Çakışan cue’ları bir ayırıcı ile tek bir satıra birleştirin ya da çakışmayı destekleyen bir formata (ASS, VTT) geçin.
Aksan karakterleri eksikYanlış kaynak karakter seti tespitiDönüştürme aracında -charset parametresini açıkça belirtin ya da UTF‑8 BOM ekleyin (gerekli ise).
30 dakikalık bir videoda 5 s+ zaman sapmasıFrame‑tabanlı kaynaktan dönüşürken yanlış frame‑hızı uygulanmasıOrijinal videodan frame‑hızı alın ve dönüştürücüye geçirin; kısa bir test klibiyle doğrulayın.
ASS → SRT geçişinde stil kaybıSRT stil meta verisini temsil edemezÖnemli stili bir yorum bloğunda (NOTE VTT’de) saklayın ya da son teslimat için stilli bir formatta kalın.
Sağ‑dan‑sol dil soldan‑sağ olarak gösterilirRTL işaretlemesi dönüşüm sırasında atıldıRTL cue’ları hedefin yön ayarına (direction: rtl; VTT) eşleyin ve oynatıcıların bunu desteklediğini teyit edin.

Bu belirtileri bir kontrol listesi olarak ele alarak hataları sistematik bir şekilde ortadan kaldırabilirsiniz.

Altyazı Dönüştürmeyi Video İş Akışlarına Entegre Etmek

Günümüz video üretim hatları sıkça FFmpeg, GStreamer ya da özelleştirilmiş transkod motorları kullanır. Altyazı dönüşümünü ayrı bir adım olarak eklemek, iş akışını modüler tutar:

[Kaynak Medya] --> [Ses Çıkarma] --> [Konuşmadan Metne] --> [Ana SRT Oluştur]
                     |
                     v
                [Altyazı Dönüştürücü] --> [Altyazılı Video Kodlama]

Ses Çıkarma aşaması bir konuşma‑metin servisine besleyerek bir ana SRT üretir. Altyazı Dönüştürücü bu SRT’yi WebVTT (web dağıtımı), ASS (yayın) ve DFXP (streaming hizmetleri) gibi gereken formatlara çevirir. Tek bir kaynak SRT tutmak, tüm türev formatların senkronize kalmasını sağlar.

GStreamer kullanıyorsanız, subparse elemanı çok sayıda altyazı formatını okuyup ham metin akışı olarak sunar; subtitleoverlay elemanı ise videoya gömmeden önce altyazıyı işleyebilir. Toplu işlem için bir çalma listesi üzerinden dönen bir launch pipeline yazabilirsiniz.

Güvenilir Altyazı Dönüştürme İçin Son Kontrol Listesi

  • Kaynak format ve sınırlamaları (kare‑hızı, charset, stil) tanımlandı.
  • Hedef platformun istenen formatı ve zorunlu meta verileri (dil kodu, bölge) belirlendi.
  • Dönüştürmeden önce karakter kodlaması doğrulandı; gerekirse UTF‑8’e çevrildi.
  • Zamanlama hassasiyeti korundu: tam video kare‑hızı kullanıldı, drop‑frame doğru işledi.
  • Stil mümkün olduğunca eşlendi; kaybedilen stiller yorum satırı olarak belgelendi.
  • Zaman damgaları ve metin içeriği üzerinde otomatik diff çalıştırıldı.
  • Temsilci cihazlarda (masaüstü, mobil, yardımcı teknoloji ekran okuyucuları) oynatma testi yapıldı.
  • Dil niteliği ve cue zamanlaması için erişilebilirlik denetimi gerçekleştirildi.
  • Gizlilik sağlandı: bellekte işleme, HTTPS, ve ham altyazı metni loglanmadı.
  • Herhangi bir geri dönüş (çakışan cue’ların birleştirilmesi gibi) için fallback belgelenmiş.

Bu uygulamaları izlerseniz, altyazıları ölçekli bir şekilde dönüştürürken senkronizasyon, okunabilirlik ve yasal uyumluluğu koruyabilirsiniz. İster çok dilli bir kurumsal web semineri, ister bir konferans serisi arşivi, ister bir streaming hizmeti için altyazı sunumu olsun, disiplinli bir dönüşüm iş akışı ham metni evrensel olarak erişilebilir bir izleme deneyimine dönüştürür.