Bir transkript, kullanılabilir bir altyazı dosyasının sadece başlangıcıdır.

İyi bir SRT için hâlâ doğru zamanlama, okunabilir satır kırılımları, kalite kontrolleri ve teslimden önce hataları yakalayacak bir insan gerekir.

Ben de bu süreci tekrar edilebilir tek bir audio-to-SRT akışına dönüştürmek için SRT Subtitle Pipeline projesini geliştirdim.

Proje; röportaj, bölüm, eğitim, ders veya başka konuşma ağırlıklı ses dosyalarını düzenli şekilde işleyen ve ham bir transkript dökümü yerine kontrol edilebilir, teslim edilebilir bir SRT isteyenler için tasarlandı.

Ses dosyasından kontrol edilebilir altyazıya

Pipeline, dosyaları farklı aşamalar için ayrı klasörlerde düzenliyor:

  • inbox

  • processing

  • review

  • delivery

  • archive

Ses dosyası önce yazıya çevriliyor.

Ardından altyazılar en fazla iki satır olacak şekilde biçimlendiriliyor ve SRT dosyasının yanında ayrıca bir QC raporu oluşturuluyor.

Sonuç doğrudan teslim edilmiyor.

Dosya önce review klasörüne geliyor. Bir kişi SRT'yi ve kalite raporunu kontrol ediyor, ardından teslim için açıkça onaylıyor.

Bu son adım bence oldukça önemli.

Konuşma tanıma sistemleri kişi isimlerini, üst üste binen konuşmaları, düşük sesli kelimeleri veya noktalama işaretlerini yanlış anlayabilir.

Araç; tekrar eden formatlama ve dosya yönetimi işlerini otomatikleştiriyor ama otomatik oluşturulan transkripti hiçbir zaman doğrudan nihai sonuç olarak kabul etmiyor.

Transkripsiyon yöntemini seçmek

Varsayılan akış, kelime bazlı zamanlama için faster-whisper kullanıyor.

Eğer bir OpenAI API anahtarı tanımlarsanız pipeline, yazım hataları, büyük-küçük harf kullanımı ve noktalama işaretlerini düzeltmek için OpenAI'dan yardım alabiliyor.

Burada önemli bir güvenlik mekanizması var.

Sistem düzeltilmiş metin ile orijinal metin arasında lexical karşılaştırma yapıyor.

Eğer model:

  • kelime eklerse

  • kelime çıkarırsa

  • kelimeyi değiştirirse

  • veya kelime sırasını değiştirirse

pipeline düzeltilmiş cevabı kullanmak yerine orijinal transkript satırını koruyor.

Yani dil modeli burada serbestçe metni yeniden yazmıyor.

Görevi daha çok yazım ve noktalama temizliği yapmak.

Projede iki farklı Gemini modu da bulunuyor.

hybrid-gemini, Whisper'ın zamanlama yapısını koruyor ve Gemini'dan yalnızca bu zaman aralıklarındaki metni iyileştirmesini istiyor.

gemini-only ise hem transkripti hem de zamanlamayı Gemini'ın oluşturmasına izin veriyor.

Bu modda farklı model seçenekleri için kalite ve ekonomi odaklı preset'ler kullanılabiliyor.

Kurulum ve çalıştırma

Hazır kurulum akışı Windows için tasarlandı.

Gerekenler:

  • Python 3.11 veya üzeri

  • PATH içinde erişilebilir FFmpeg

Önce repository'yi klonlayın:

git clone https://github.com/alesmcgregor/srt-subtitle-pipeline.git
cd srt-subtitle-pipeline

Ardından sanal ortamı oluşturup bağımlılıkları yükleyin:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env

Kullanacağınız servis ve moda ait API anahtarını .env dosyasına ekleyin.

NVIDIA GPU ile inference kullanmak isteyenler için repository içinde ayrıca bir PowerShell kurulum script'i ve doctor komutu bulunuyor.

GPU şart değil.

CPU üzerinden de transkripsiyon yapılabiliyor.

Ses dosyanızı 01_INBOX klasörüne koyduktan sonra örneğin şu komutu çalıştırabilirsiniz:

python -m srt_pipeline.cli process --input "01_INBOX\example.mp3" --project "SeriesName" --episode "S01E01" --language "en" --device auto --model medium

İşlem tamamlandığında sonuçlar 03_REVIEW klasörüne gelir.

Burada SRT dosyasını ve oluşturulan QC raporunu kontrol ettikten sonra dosyayı teslim için onaylayabilirsiniz:

python -m srt_pipeline.cli approve --review-file "03_REVIEW\...srt"

Başarıyla işlenen inbox dosyaları otomatik olarak:

01_INBOX\PROCESSED

klasörüne taşınır.

Böylece bir sonraki batch çalışmasında aynı dosya tekrar işlenmez.

Makinenizden hangi verilerin çıktığını bilin

Bu kısım önemli.

Whisper ile yapılan transkripsiyon yerel olarak çalışıyor.

Yani varsayılan Whisper aşamasında ses dosyanız başka bir servise gönderilmiyor.

Ancak OpenAI cleanup özelliğini aktif ederseniz transkript metni OpenAI API'ye gönderiliyor.

Gemini modlarında ise kaynak ses dosyası Google Gemini API'ye gönderiliyor.

Bu uygulamadaki mevcut implementasyon, 20 MB üzerindeki inline ses dosyalarını kabul etmiyor.

Bu nedenle hangi modu kullanacağınıza sadece kalite açısından değil;

  • gizlilik

  • dil doğruluğu

  • maliyet

  • işlem süresi

gibi faktörleri de düşünerek karar vermek gerekiyor.

API kullanımı seçtiğiniz sağlayıcıya bağlı olarak ücretli olabilir.

Bu proje kimler için faydalı?

Bu pipeline özellikle düzenli olarak konuşma ağırlıklı ses dosyaları işleyen kişiler için kullanışlı.

Örneğin:

  • podcast ve bölüm arşivleri

  • röportajlar

  • eğitim içerikleri

  • ders kayıtları

  • video altyazıları

  • seri halinde yayınlanan içerikler

Her dosyada aynı klasör yapısını, isimlendirmeyi, kısa altyazı satırlarını, QC raporlarını ve açık bir insan onay adımını kullanmak işleri ciddi şekilde düzenli hâle getiriyor.

Ama benim için en önemli taraf şu:

Bu sistemin amacı insanı süreçten çıkarmak değil.

Tam tersine, makinenin iyi olduğu tekrar eden işleri otomatikleştirip nihai kontrolü insanda bırakmak.

Kodları, kurulum detaylarını ve proje yapısını GitHub'daki açık kaynak repository üzerinden inceleyebilirsiniz.