Python ile SRT altyazı zamanını kaydırma: metni bozmadan senkron düzeltme
Altyazının tamamı aynı miktarda erken veya geç geliyorsa zaman damgalarını Python ile kaydırın; kaymanın türünü önce doğru teşhis edin.

Python ile SRT altyazı zamanını kaydırma — uygulama akışı
Farkı ölç
Baş, orta ve sonda aynı kayma olduğunu doğrula.
Zamanı dönüştür
SRT zamanlarını milisaniyeye çevir.
Yeni kopya yaz
Metne dokunmadan zaman farkını uygula.
Videoda doğrula
Üç bölümde sesi ve yazıyı birlikte kontrol et.
Bu şema rehber için hazırlanmış özgün bir iş akışıdır; uygulama ekran görüntüsü değildir.
Kısa özet
Altyazının tamamı aynı miktarda erken veya geç geliyorsa zaman damgalarını Python ile kaydırın; kaymanın türünü önce doğru teşhis edin.
Teknoloji ve Yazılım topluluğuna gitVideonun başına kısa bir logo eklediğinizde daha önce düzgün çalışan altyazı erken görünmeye başlayabilir. Bütün altyazılar aynı miktarda kayıyorsa zaman damgalarını topluca değiştirmek işe yarar. Ancak videonun başında doğru, sonunda yanlış olan altyazı farklı bir problem olabilir. Bu rehber yalnızca sabit zaman farkını düzeltir; konuşmayı tanımaz, cümleleri yeniden yazmaz ve kare hızı kaynaklı giderek artan kaymayı çözmez.
1. Farkı milisaniye olarak ölçün
Videoda anlaşılır bir kelimenin başladığı anı seçin. Örneğin ses 4,5 saniyede başlıyor, altyazı 3 saniyede görünüyorsa altyazıyı 1500 milisaniye geciktirmek gerekir. Başta, ortada ve sonda üç nokta kontrol edin. Fark her noktada yaklaşık aynıysa bu yöntem uygundur. Fark değişiyorsa tek sayı kullanmak bir bölümü düzeltirken diğerini bozabilir. Önce doğru video sürümüyle çalıştığınızdan emin olun.
2. Kaynak dosyayı koruyun
Örnekte girdi.srt okunur, kaydirilmis.srt oluşturulur. Çıktı varsa üzerine yazmak yerine hata verir. Bir sonraki denemede farklı bir çıktı adı seçin. SRT dosyasını düz metin düzenleyicide açın; zaman satırlarının 00:00:01,000 --> 00:00:03,000 biçiminde olduğunu görün. Konuşma metni Türkçe karakter içeriyorsa UTF-8 kullanmak dosyanın farklı uygulamalarda doğru okunmasını kolaylaştırır.
3. Çalışan kaydırma betiği
Kodu srt_kaydir.py olarak kaydedin. Terminalde python srt_kaydir.py girdi.srt kaydirilmis.srt 1500 komutunu çalıştırın. Son sayı pozitifse altyazı gecikir, negatifse daha erken gelir. Bir zamanın sıfırın altına düşmesi durumunda betik durur; ilk satırları sessizce silmez.
from pathlib import Path
import re
import sys
if len(sys.argv) != 4:
raise SystemExit('Kullanım: python srt_kaydir.py girdi.srt cikti.srt milisaniye')
source, target = map(Path, sys.argv[1:3])
offset = int(sys.argv[3])
pattern = re.compile(r'^(\d{2,}:[0-5]\d:[0-5]\d,\d{3})( --> )(\d{2,}:[0-5]\d:[0-5]\d,\d{3})(.*)$', re.M)
def milliseconds(value):
h, m, tail = value.split(':')
s, ms = tail.split(',')
return ((int(h)*60+int(m))*60+int(s))*1000+int(ms)
def timestamp(value):
if value < 0:
raise ValueError('Kaydırma, bir zamanı sıfırın altına indiriyor.')
seconds, ms = divmod(value, 1000)
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
return f'{hours:02}:{minutes:02}:{seconds:02},{ms:03}'
def shift(match):
start, end = milliseconds(match[1]), milliseconds(match[3])
if end <= start:
raise ValueError('Bitiş zamanı başlangıçtan sonra olmalı.')
return timestamp(start+offset)+match[2]+timestamp(end+offset)+match[4]
text = source.read_text(encoding='utf-8-sig')
result, count = pattern.subn(shift, text)
if count == 0:
raise SystemExit('Geçerli SRT zaman satırı bulunamadı.')
with target.open('x', encoding='utf-8', newline='') as file:
file.write(result)
print(count, 'zaman satırı kaydırıldı:', target)4. Beklenen sonucu anlayın
Bir satırın başlangıcı 1 saniye, bitişi 3 saniyeyse 1500 milisaniyelik kaydırma sonrası 2,5 ve 4,5 saniye olur. Satırın ekranda kalma süresi değişmez. Düzenli ifade yalnızca zaman satırlarına uygulanır; diyalog içindeki rakamlar değiştirilmez. Bununla birlikte sıra dışı biçimlendirme kullanan dosyalar için bu örnek kapsamlı bir SRT ayrıştırıcısı değildir. Eşleşen satır sayısını beklenen altyazı sayısıyla karşılaştırın.
5. Videoda üç aşamalı doğrulama
Yeni SRT dosyasını video oynatıcısına ekleyin. Önce başta ölçtüğünüz kelimeye bakın, sonra orta bölümdeki belirgin bir cümleyi ve son konuşmayı inceleyin. Sesle birlikte kelimelerin doğru anlarda görünmesi gerekir. Otomatik üretilmiş metinde yazım yanlışları varsa zaman kaydırmak bunları düzeltmez. Kişi adları, olumsuzluk ekleri ve ürün ölçülerini ayrıca kontrol edin.
6. Sık hataları ayırın
UnicodeDecodeError alırsanız dosyanın kodlamasını inceleyip bir kopyasını UTF-8 olarak kaydedin. “Geçerli zaman satırı bulunamadı” mesajı WebVTT dosyasını SRT sanmanızdan veya farklı zaman biçiminden kaynaklanabilir. Sıfır altı zaman hatasında seçtiğiniz farkı yeniden ölçün. Dosyada yalnızca bazı bölümler kayıksa bütün satırları aynı miktarda taşımayın; kurgu değişikliklerine göre bölümlü düzenleme gerekir.
7. Teslim notu bırakın
Kaydırma miktarını ve kullanılan video sürümünü not edin. Eski dosya, yeni dosya ve son video birlikte saklanırsa geri dönüş kolaylaşır. Yayın platformuna yükledikten sonra altyazıyı oradaki oynatıcıda da deneyin. Yerel dosyanın doğru olması, yanlış video sürümüne yüklenmediğini garanti etmez. Son kontrolde konuşma dışı önemli seslerin açıklamalarını da okuyun; altyazı yalnızca sözcükleri değil, sahnenin anlaşılması için gereken bilgiyi taşımalıdır.


