Film altyazısını (SRT) yapay zekâya çevirtmek mantıklı mı?

Bu gece yaptığı çeviriyi izleyeceğim galiba. Kaldığı sahneyi hatırlayıp part şeklinde devam ediyor. Ben de SRT dosyasına ekliyorum:



Bitirsin bakalım. Eğer şimdi bunu bitirirse izleyeceğim ve yarın tecrübemi paylaşacağım. Birkaç çevirdiği sahneye de baktım, iyi çeviriyor gibi.
 
Aynen, Gemini şu an gayet iyi çeviriyor; ciddi anlamda çağ atladı. Muhtemelen Gemini 4 çıkarsa çeviri işi çok daha iyi bir noktaya gelir.
Bu filmi bitirdikten sonra Gemini’ye kısa bir geri bildirim verirsen, sonraki filmde bağlama daha iyi dikkat ediyor. İyi seyirler.
 
Hem orijinal İngilizce SRT dosyasını hem de DeepL API çevirisini de atmanızın nedeni yapay zekaya ekstra veri verip daha iyi bir sonuç almak mı?
 
İlk 30 dakikayı izledim. İnternette bulunan altyazıdan bile çok daha doğru ve uyumlu çevirdiğini not almak istiyorum. Bu altyazıyla bitireceğim. Memnun kalırsam belki SRT dosyalarını internete paylaşır ve serinin diğer filmlerine de Gemini çevirisi ile devam ederim.

Hikayeyle çok uyumlu gidiyor.

 
Selamlar herkese,

Valla konudaki muhabbeti görünce dayanamadım; normalde forumlarda pek aktif değilimdir, genelde "misafir" modunda takılır, okur geçerim ama bu sefer kendi kurduğum sistemi paylaşmadan edemedim. Belki bu işlere meraklı arkadaşlara bir fikir verir.

Altyazı işinde yapay zeka olayı artık bambaşka bir boyuta geçti; doğru ayarları yapınca cidden profesyonel çeviri gibi sonuç veriyor.




Ben Proxmox üzerinde 'eve sinema merkezi' kurdum diyebilirim. Fotoğrafta gördüğünüz gibi; Jellyfin, Jellyseerr, Radarr, Sonarr, Bazarr, hatta Prowlarr ve Flaresolverr'a kadar ne ararsanız LXC olarak tıkır tıkır çalışıyor. İşin en cafcaflı kısmı; sunucudaki ekran kartını konteynerlere GPU Passthrough ile bağladım. (sunucu dediğim de aslında kıyıda köşede kalmış, yüzüne bakılmayan eski bir Lenovo laptop

Süreç bende şöyle işliyor:
Jellyseerr üzerinden bir film isteği atıyorum, gerisine dokunmuyorum. Radarr/Sonarr uygun release'i buluyor, qBittorrent'e paslıyor ve indirme işini o hallediyor. Eğer indikten sonra Bazarr piyasada hazır Türkçe altyazı bulamazsa hemen benim 'gizli silah' devreye giriyor. Önce videoyu Whisper AI (Large-v3) ile GPU üzerinden dinletiyorum. Ekran kartının gücüyle koca film 1-2 dakikada hatasız İngilizce metne dönüşüyor.

Sonra bu metni Gemini 2.0 Flash API'sine yolluyorum. Gemini'nin olayı bağlamı çok iyi kavraması; filmin başındaki olayı sonunda unutmuyor. Karakterler arasındaki hitap şeklini (sen/siz) bile filmin havasına göre harika ayarlıyor. Google Translate gibi robotik değil; bildiğin argo kullanımına, yerel deyimlere kadar hakim, çok doğal bir Türkçe çıkıyor ortaya.

Bir de Tailscale olayı var ki büyük rahatlık. Dışarıdayken VPN falan uğraşmadan eve bağlanıyorum. GPU sağ olsun, 4K içeriği bile mobil cihazın gücüne göre anlık transcoding yapıp takılmadan izlettiriyor. Şu an sistem tamamen 'kur ve unut' modunda; ben sadece butona basıyorum, qBittorrent indiriyor, sistem altyazıyı halledip Jellyfin'e hazır ediyor. Gemini API şu an kuruş istemiyor kalite zirve ama maliyet sıfır.

Proxmox tarafında GPU'yu geçirmek ve bu kadar servisi ayağa kaldırmak biraz terletti ama şu anki konfor paha biçilemez.


 
Sonra bu metni Gemini 2.0 Flash API'sine yolluyorum. Gemini'nin olayı bağlamı çok iyi kavraması; filmin başındaki olayı sonunda unutmuyor.
Gemini 3 Pro kullanıyorum.
Google yapay zekâsının hiç süre saptırdığını gördünüz mü? Maalesef dün 1:36:04 itibariyle ses 22 saniye kaydırdı. Ama onun dışında söylediğiniz gibi çok kaliteli çeviri yaptı. Hikayeye de hâkim. (Belli ki yapay zekâ altyazı çevirmenlik mesleğini bitirdi.)

Bozulduğu yer itibariyle orijinal İngilizce SRT'yi geri kopyaladım. IDE ile açıp sadece İngilizce kısımları tekrar vermeyi planlıyorum.

 
Hocam gemini bazen iki kısa satırı daha iyi olur diye tek satıra birleştiriyor. O bir satır eksilince, tüm süreler yukarı kaymaya başlıyor ve filmin sonunda o 22 saniyelik fark oluşuyor.
Çözümü Gemini'ye altyazı dosyasını komple vermeyerek çözdüm. Sadece metinleri yollayıp çevirtiyorum, timestamp orijinal dosyada sabit tutup sonra birleştiriyor.
Bu şekilde katı bir kural ekliyorum.

"Sadece metni çevir, zaman damgalarına ve satır sayılarına asla dokunma, formatı bozma"
 
Manus.ai yapay zekâ, istek işlerken bazen kullandığı scriptleri gösteriyor. Kendisinden çeviri yapmasını istedim. Arka planda OpenAI Pro API kullanan bir Python kodu yazıp ardından çalıştırdı. Sonucunda da bana çeviri verdi.



Python:
import os
import re
from openai import OpenAI

client = OpenAI()

def translate_text(text_list):
    prompt = "Aşağıdaki İngilizce altyazı metinlerini anlamı bozmadan, doğal bir Türkçe ile çevir. Her satırı ayrı bir satır olarak döndür. Sadece çeviriyi ver, başka açıklama yapma.\n\n"
    prompt += "\n".join(text_list)
   
    response = client.chat.completions.create(
        model="gpt-4.1-mini",
        messages=[
            {"role": "system", "content": "Sen profesyonel bir film altyazı çevirmenisin. Metinleri doğal ve akıcı bir Türkçeye çeviriyorsun."},
            {"role": "user", "content": prompt}
        ]
    )
    translated = response.choices[0].message.content.strip().split('\n')
    # Ensure we have the same number of lines
    if len(translated) != len(text_list):
        # Fallback or simple logging if mismatch occurs
        print(f"Warning: Mismatch in translation count. Expected {len(text_list)}, got {len(translated)}")
    return translated

def process_srt(input_path, output_path):
    with open(input_path, 'r', encoding='utf-8-sig') as f:
        content = f.read()

    # Split by double newline to get blocks
    blocks = re.split(r'\n\s*\n', content.strip())
   
    translated_blocks = []
    batch_size = 40
   
    all_texts = []
    block_structures = []

    for block in blocks:
        lines = block.split('\n')
        if len(lines) >= 3:
            index = lines[0]
            timestamp = lines[1]
            text = " ".join(lines[2:]) # Join multiple lines in one block
            block_structures.append((index, timestamp))
            all_texts.append(text)
        else:
            # Handle empty or malformed blocks
            block_structures.append(None)
            all_texts.append("")

    total = len(all_texts)
    print(f"Total blocks to translate: {total}")

    final_translations = []
    for i in range(0, total, batch_size):
        batch = all_texts[i:i+batch_size]
        print(f"Translating batch {i//batch_size + 1}/{(total//batch_size)+1}...")
        translated_batch = translate_text(batch)
       
        # If mismatch, try to fix or pad
        if len(translated_batch) < len(batch):
            translated_batch.extend([""] * (len(batch) - len(translated_batch)))
        elif len(translated_batch) > len(batch):
            translated_batch = translated_batch[:len(batch)]
           
        final_translations.extend(translated_batch)

    with open(output_path, 'w', encoding='utf-8') as f:
        for i in range(len(block_structures)):
            struct = block_structures[i]
            if struct:
                index, timestamp = struct
                text = final_translations[i]
                f.write(f"{index}\n{timestamp}\n{text}\n\n")

if __name__ == "__main__":
    process_srt('/home/ubuntu/upload/en.srt', '/home/ubuntu/tr.srt')


"Sadece metni çevir, zaman damgalarına ve satır sayılarına asla dokunma, formatı bozma"
Çok teşekkürler, Azkaban Tutsağı'nda deneyeceğim. Süreleri sürekli saptırıp duruyor.

Verdiğin ek notu Manus'a verdim. Python3 dosyasındaki ChatGPT isteğini değiştirdi.

 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…