.
This commit is contained in:
Binary file not shown.
Binary file not shown.
-109
@@ -1,109 +0,0 @@
|
||||
import re
|
||||
|
||||
def check_srt_format(file_path):
|
||||
"""SRT dosyasını kontrol eder ve hataları bulur."""
|
||||
|
||||
errors = []
|
||||
warnings = []
|
||||
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
i = 0
|
||||
subtitle_count = 0
|
||||
|
||||
while i < len(lines):
|
||||
# Boş satırları atla
|
||||
while i < len(lines) and lines[i].strip() == '':
|
||||
i += 1
|
||||
|
||||
if i >= len(lines):
|
||||
break
|
||||
|
||||
subtitle_count += 1
|
||||
expected_number = subtitle_count
|
||||
|
||||
# Satır 1: Altyazı numarası
|
||||
line_num = i + 1
|
||||
if not lines[i].strip().isdigit():
|
||||
errors.append(f"Satır {line_num}: Altyazı numarası bekleniyor, bulunan: '{lines[i].strip()}'")
|
||||
else:
|
||||
actual_number = int(lines[i].strip())
|
||||
if actual_number != expected_number:
|
||||
warnings.append(f"Satır {line_num}: Altyazı numarası {expected_number} olmalı, {actual_number} bulundu")
|
||||
|
||||
i += 1
|
||||
|
||||
if i >= len(lines):
|
||||
errors.append(f"Altyazı {subtitle_count}: Zaman damgası eksik")
|
||||
break
|
||||
|
||||
# Satır 2: Zaman damgası
|
||||
line_num = i + 1
|
||||
timestamp_pattern = r'^\d{2}:\d{2}:\d{2},\d{3}\s*-->\s*\d{2}:\d{2}:\d{2},\d{3}$'
|
||||
|
||||
if not re.match(timestamp_pattern, lines[i].strip()):
|
||||
# Hatalı formatları tespit et
|
||||
timestamp_line = lines[i].strip()
|
||||
|
||||
# Yaygın hatalar
|
||||
if '-->' in timestamp_line:
|
||||
# Virgül yerine nokta kullanımı
|
||||
if '.' in timestamp_line and ',' not in timestamp_line:
|
||||
errors.append(f"Satır {line_num}: Milisaniye ayırıcı virgül (,) olmalı, nokta (.) değil: '{timestamp_line}'")
|
||||
# Eksik sıfırlar
|
||||
elif re.search(r'\d{1}:\d{2}:\d{2}', timestamp_line):
|
||||
errors.append(f"Satır {line_num}: Saat/dakika/saniye 2 haneli olmalı: '{timestamp_line}'")
|
||||
# Eksik/fazla milisaniye basamağı
|
||||
elif re.search(r',\d{1,2}[^\d]|,\d{1,2}$', timestamp_line):
|
||||
errors.append(f"Satır {line_num}: Milisaniye 3 haneli olmalı: '{timestamp_line}'")
|
||||
elif re.search(r',\d{4,}', timestamp_line):
|
||||
errors.append(f"Satır {line_num}: Milisaniye 3 haneli olmalı (fazla basamak): '{timestamp_line}'")
|
||||
else:
|
||||
errors.append(f"Satır {line_num}: Geçersiz zaman damgası formatı: '{timestamp_line}'")
|
||||
else:
|
||||
errors.append(f"Satır {line_num}: Zaman damgası bekleniyor (-->), bulunan: '{timestamp_line}'")
|
||||
|
||||
i += 1
|
||||
|
||||
# Satır 3+: Altyazı metni
|
||||
text_lines = []
|
||||
while i < len(lines) and lines[i].strip() != '':
|
||||
text_lines.append(lines[i])
|
||||
i += 1
|
||||
|
||||
if not text_lines:
|
||||
warnings.append(f"Altyazı {subtitle_count} (satır {line_num}): Metin içeriği boş")
|
||||
|
||||
print(f"Toplam altyazı sayısı: {subtitle_count}")
|
||||
print(f"\n{'='*60}")
|
||||
|
||||
if errors:
|
||||
print(f"\nHATALAR ({len(errors)} adet):")
|
||||
print("="*60)
|
||||
for error in errors[:50]: # İlk 50 hatayı göster
|
||||
print(f" - {error}")
|
||||
if len(errors) > 50:
|
||||
print(f"\n ... ve {len(errors) - 50} hata daha")
|
||||
else:
|
||||
print("\nKritik hata bulunamadi!")
|
||||
|
||||
if warnings:
|
||||
print(f"\nUYARILAR ({len(warnings)} adet):")
|
||||
print("="*60)
|
||||
for warning in warnings[:20]: # İlk 20 uyarıyı göster
|
||||
print(f" - {warning}")
|
||||
if len(warnings) > 20:
|
||||
print(f"\n ... ve {len(warnings) - 20} uyari daha")
|
||||
|
||||
return errors, warnings
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
file_path = sys.argv[1] if len(sys.argv) > 1 else "public/ses.srt"
|
||||
errors, warnings = check_srt_format(file_path)
|
||||
|
||||
if not errors and not warnings:
|
||||
print("\nSRT dosyasi tamamen dogru formatta!")
|
||||
else:
|
||||
print(f"\nOzet: {len(errors)} hata, {len(warnings)} uyari")
|
||||
@@ -1,281 +0,0 @@
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def comprehensive_srt_check(file_path):
|
||||
"""Kapsamlı SRT format kontrolü - tüm olası hataları yakalar."""
|
||||
|
||||
errors = []
|
||||
warnings = []
|
||||
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
i = 0
|
||||
subtitle_count = 0
|
||||
prev_end_time = None
|
||||
|
||||
while i < len(lines):
|
||||
# Boş satırları atla
|
||||
while i < len(lines) and lines[i].strip() == '':
|
||||
i += 1
|
||||
|
||||
if i >= len(lines):
|
||||
break
|
||||
|
||||
subtitle_count += 1
|
||||
start_line = i + 1
|
||||
|
||||
# ===== 1. ALTYAZI NUMARASI KONTROLÜ =====
|
||||
line_num = i + 1
|
||||
line_content = lines[i].strip()
|
||||
|
||||
if not line_content:
|
||||
errors.append(f"Satir {line_num}: Bos satir, altyazi numarasi bekleniyor")
|
||||
i += 1
|
||||
continue
|
||||
|
||||
if not line_content.isdigit():
|
||||
errors.append(f"Satir {line_num}: Altyazi numarasi olmali, bulunan: '{line_content[:50]}'")
|
||||
# Sonraki geçerli numarayı bulmaya çalış
|
||||
while i < len(lines) and not lines[i].strip().isdigit():
|
||||
i += 1
|
||||
if i >= len(lines):
|
||||
break
|
||||
else:
|
||||
actual_number = int(line_content)
|
||||
if actual_number != subtitle_count:
|
||||
warnings.append(f"Satir {line_num}: Numara sırası bozuk - beklenen: {subtitle_count}, bulunan: {actual_number}")
|
||||
|
||||
i += 1
|
||||
|
||||
# ===== 2. ZAMAN DAMGASI KONTROLÜ =====
|
||||
if i >= len(lines):
|
||||
errors.append(f"Altyazi {subtitle_count}: Zaman damgasi eksik (dosya sonu)")
|
||||
break
|
||||
|
||||
line_num = i + 1
|
||||
timestamp_line = lines[i].strip()
|
||||
|
||||
if not timestamp_line:
|
||||
errors.append(f"Satir {line_num}: Bos satir, zaman damgasi bekleniyor")
|
||||
i += 1
|
||||
continue
|
||||
|
||||
# Zaman damgası formatını detaylı kontrol et
|
||||
if '-->' not in timestamp_line:
|
||||
errors.append(f"Satir {line_num}: '-->' ayirici bulunamadi: '{timestamp_line[:50]}'")
|
||||
i += 1
|
||||
continue
|
||||
|
||||
parts = timestamp_line.split('-->')
|
||||
if len(parts) != 2:
|
||||
errors.append(f"Satir {line_num}: Gecersiz zaman damgasi formati: '{timestamp_line[:50]}'")
|
||||
i += 1
|
||||
continue
|
||||
|
||||
start_time_str = parts[0].strip()
|
||||
end_time_str = parts[1].strip()
|
||||
|
||||
# Başlangıç zamanı kontrolü
|
||||
start_errors = validate_timestamp(start_time_str, "baslangic")
|
||||
if start_errors:
|
||||
for err in start_errors:
|
||||
errors.append(f"Satir {line_num} {err}: '{start_time_str}'")
|
||||
|
||||
# Bitiş zamanı kontrolü
|
||||
end_errors = validate_timestamp(end_time_str, "bitis")
|
||||
if end_errors:
|
||||
for err in end_errors:
|
||||
errors.append(f"Satir {line_num} {err}: '{end_time_str}'")
|
||||
|
||||
# Zamanları parse et ve mantıksal kontroller yap
|
||||
if not start_errors and not end_errors:
|
||||
start_ms = parse_timestamp_to_ms(start_time_str)
|
||||
end_ms = parse_timestamp_to_ms(end_time_str)
|
||||
|
||||
if start_ms is None or end_ms is None:
|
||||
errors.append(f"Satir {line_num}: Zaman parse edilemedi: '{timestamp_line}'")
|
||||
else:
|
||||
# Başlangıç >= Bitiş kontrolü
|
||||
if start_ms >= end_ms:
|
||||
errors.append(f"Satir {line_num}: Baslangic zamani bitis zamanindan buyuk/esit: {start_time_str} >= {end_time_str}")
|
||||
|
||||
# Negatif zaman kontrolü
|
||||
if start_ms < 0 or end_ms < 0:
|
||||
errors.append(f"Satir {line_num}: Negatif zaman degeri: '{timestamp_line}'")
|
||||
|
||||
# Çok uzun altyazı kontrolü (>10 saniye)
|
||||
duration_ms = end_ms - start_ms
|
||||
if duration_ms > 10000:
|
||||
warnings.append(f"Satir {line_num}: Cok uzun altyazi suresi ({duration_ms/1000:.1f} saniye): {start_time_str} --> {end_time_str}")
|
||||
|
||||
# Çok kısa altyazı kontrolü (<0.1 saniye)
|
||||
if duration_ms < 100:
|
||||
warnings.append(f"Satir {line_num}: Cok kisa altyazi suresi ({duration_ms}ms): {start_time_str} --> {end_time_str}")
|
||||
|
||||
# Önceki altyazı ile çakışma kontrolü
|
||||
if prev_end_time is not None and start_ms < prev_end_time:
|
||||
time_overlap = prev_end_time - start_ms
|
||||
warnings.append(f"Satir {line_num}: Onceki altyazi ile cakisma ({time_overlap}ms): {start_time_str}")
|
||||
|
||||
prev_end_time = end_ms
|
||||
|
||||
i += 1
|
||||
|
||||
# ===== 3. METİN İÇERİĞİ KONTROLÜ =====
|
||||
text_lines = []
|
||||
text_start_line = i + 1
|
||||
|
||||
while i < len(lines) and lines[i].strip() != '':
|
||||
# Bir sonraki satır numara mı kontrol et (yeni altyazı başlangıcı)
|
||||
if (i + 1 < len(lines) and
|
||||
lines[i].strip().isdigit() and
|
||||
'-->' in lines[i + 1]):
|
||||
break
|
||||
|
||||
text_lines.append(lines[i].rstrip())
|
||||
i += 1
|
||||
|
||||
if not text_lines:
|
||||
warnings.append(f"Altyazi {subtitle_count} (satir {start_line}): Metin icerigi bos")
|
||||
else:
|
||||
# Metin kontrolü
|
||||
full_text = ' '.join([t.strip() for t in text_lines])
|
||||
|
||||
# Çok uzun metin kontrolü
|
||||
if len(full_text) > 200:
|
||||
warnings.append(f"Altyazi {subtitle_count}: Cok uzun metin ({len(full_text)} karakter)")
|
||||
|
||||
# HTML tag kontrolü
|
||||
if re.search(r'<[^>]+>', full_text):
|
||||
warnings.append(f"Altyazi {subtitle_count}: HTML/XML tag iceriyor (bazi oynaticilar desteklemeyebilir)")
|
||||
|
||||
# Garip karakterler
|
||||
if re.search(r'[\x00-\x08\x0B-\x0C\x0E-\x1F]', full_text):
|
||||
warnings.append(f"Altyazi {subtitle_count}: Kontrol karakterleri iceriyor")
|
||||
|
||||
return errors, warnings, subtitle_count
|
||||
|
||||
|
||||
def validate_timestamp(time_str, time_type):
|
||||
"""Tek bir zaman damgasını (HH:MM:SS,mmm) doğrular."""
|
||||
errors = []
|
||||
|
||||
# Format: HH:MM:SS,mmm
|
||||
pattern = r'^(\d{2}):(\d{2}):(\d{2}),(\d{3})$'
|
||||
match = re.match(pattern, time_str)
|
||||
|
||||
if not match:
|
||||
# Hangi kısım hatalı bul
|
||||
if ',' not in time_str and '.' not in time_str:
|
||||
errors.append(f"({time_type}): Milisaniye ayirici eksik (virgul)")
|
||||
elif '.' in time_str:
|
||||
errors.append(f"({time_type}): Milisaniye ayirici nokta olmamali, virgul olmali")
|
||||
elif time_str.count(':') != 2:
|
||||
errors.append(f"({time_type}): ':' ayirici sayisi yanlis (2 olmali)")
|
||||
else:
|
||||
# Rakam sayısı kontrolü
|
||||
parts = time_str.replace(',', ':').replace('.', ':').split(':')
|
||||
if len(parts) == 4:
|
||||
hours, mins, secs, ms = parts
|
||||
if len(hours) != 2:
|
||||
errors.append(f"({time_type}): Saat 2 haneli olmali")
|
||||
if len(mins) != 2:
|
||||
errors.append(f"({time_type}): Dakika 2 haneli olmali")
|
||||
if len(secs) != 2:
|
||||
errors.append(f"({time_type}): Saniye 2 haneli olmali")
|
||||
if len(ms) != 3:
|
||||
errors.append(f"({time_type}): Milisaniye 3 haneli olmali")
|
||||
else:
|
||||
errors.append(f"({time_type}): Format hatasi (HH:MM:SS,mmm olmali)")
|
||||
return errors
|
||||
|
||||
# Değer aralığı kontrolü
|
||||
hours, mins, secs, ms = match.groups()
|
||||
hours, mins, secs, ms = int(hours), int(mins), int(secs), int(ms)
|
||||
|
||||
if hours > 23:
|
||||
warnings = [] # Videolar 24 saatten uzun olabilir, warning olarak işaretle
|
||||
if mins > 59:
|
||||
errors.append(f"({time_type}): Dakika 59'dan buyuk olamaz ({mins})")
|
||||
if secs > 59:
|
||||
errors.append(f"({time_type}): Saniye 59'dan buyuk olamaz ({secs})")
|
||||
if ms > 999:
|
||||
errors.append(f"({time_type}): Milisaniye 999'dan buyuk olamaz ({ms})")
|
||||
|
||||
return errors
|
||||
|
||||
|
||||
def parse_timestamp_to_ms(time_str):
|
||||
"""Zaman damgasını milisaniyeye çevirir."""
|
||||
try:
|
||||
# Format: HH:MM:SS,mmm
|
||||
pattern = r'^(\d{2}):(\d{2}):(\d{2}),(\d{3})$'
|
||||
match = re.match(pattern, time_str)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
|
||||
hours, mins, secs, ms = match.groups()
|
||||
total_ms = (int(hours) * 3600 + int(mins) * 60 + int(secs)) * 1000 + int(ms)
|
||||
return total_ms
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
def print_results(errors, warnings, subtitle_count, file_path):
|
||||
"""Sonuçları yazdır."""
|
||||
print(f"Dosya: {file_path}")
|
||||
print(f"Toplam altyazi sayisi: {subtitle_count}")
|
||||
print(f"\n{'='*70}")
|
||||
|
||||
if errors:
|
||||
print(f"\nHATALAR ({len(errors)} adet):")
|
||||
print("="*70)
|
||||
for i, error in enumerate(errors[:100], 1):
|
||||
print(f" {i}. {error}")
|
||||
if len(errors) > 100:
|
||||
print(f"\n ... ve {len(errors) - 100} hata daha")
|
||||
else:
|
||||
print("\nKritik hata bulunamadi!")
|
||||
|
||||
if warnings:
|
||||
print(f"\nUYARILAR ({len(warnings)} adet):")
|
||||
print("="*70)
|
||||
for i, warning in enumerate(warnings[:50], 1):
|
||||
print(f" {i}. {warning}")
|
||||
if len(warnings) > 50:
|
||||
print(f"\n ... ve {len(warnings) - 50} uyari daha")
|
||||
else:
|
||||
print("\nUyari bulunamadi!")
|
||||
|
||||
print(f"\n{'='*70}")
|
||||
|
||||
if not errors and not warnings:
|
||||
print("\nSonuc: SRT dosyasi MUKEMMEL durumda!")
|
||||
elif not errors:
|
||||
print(f"\nSonuc: Format dogru ama {len(warnings)} uyari var")
|
||||
else:
|
||||
print(f"\nSonuc: {len(errors)} HATA, {len(warnings)} uyari")
|
||||
|
||||
return errors, warnings
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
file_path = sys.argv[1] if len(sys.argv) > 1 else "public/ses.srt"
|
||||
|
||||
print("\nKAPSAMLI SRT FORMAT KONTROLU")
|
||||
print("="*70)
|
||||
print("\nKontrol edilen hususlar:")
|
||||
print(" - Altyazi numara sirasi")
|
||||
print(" - Zaman damgasi formati (HH:MM:SS,mmm)")
|
||||
print(" - Baslangic/bitis zaman mantigi")
|
||||
print(" - Altyazi cakismalari")
|
||||
print(" - Altyazi sureleri")
|
||||
print(" - Metin icerigi")
|
||||
print("="*70)
|
||||
|
||||
errors, warnings, subtitle_count = comprehensive_srt_check(file_path)
|
||||
print_results(errors, warnings, subtitle_count, file_path)
|
||||
-187
@@ -1,187 +0,0 @@
|
||||
import re
|
||||
|
||||
def fix_srt_file(input_path, output_path):
|
||||
"""SRT dosyasındaki format hatalarını düzeltir."""
|
||||
|
||||
with open(input_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
lines = content.split('\n')
|
||||
fixed_lines = []
|
||||
i = 0
|
||||
subtitle_number = 1
|
||||
errors_fixed = []
|
||||
|
||||
while i < len(lines):
|
||||
# Boş satırları atla
|
||||
while i < len(lines) and lines[i].strip() == '':
|
||||
i += 1
|
||||
|
||||
if i >= len(lines):
|
||||
break
|
||||
|
||||
# Altyazı numarasını ekle/düzelt
|
||||
fixed_lines.append(str(subtitle_number))
|
||||
|
||||
# Eğer mevcut satır numara değilse, bu satırı kaybetme
|
||||
if not lines[i].strip().isdigit():
|
||||
# Bu satır muhtemelen yanlış yerleştirilmiş metin, geri al
|
||||
pass
|
||||
else:
|
||||
i += 1
|
||||
|
||||
if i >= len(lines):
|
||||
errors_fixed.append(f"Altyazı {subtitle_number}: Zaman damgası eksik (dosya sonu)")
|
||||
break
|
||||
|
||||
# Zaman damgasını bul ve düzelt
|
||||
timestamp_line = lines[i].strip()
|
||||
|
||||
if '-->' in timestamp_line:
|
||||
# Zaman damgasını düzelt
|
||||
fixed_timestamp = fix_timestamp(timestamp_line, subtitle_number)
|
||||
if fixed_timestamp != timestamp_line:
|
||||
errors_fixed.append(f"Altyazı {subtitle_number}: Zaman damgası düzeltildi")
|
||||
errors_fixed.append(f" Eski: {timestamp_line}")
|
||||
errors_fixed.append(f" Yeni: {fixed_timestamp}")
|
||||
fixed_lines.append(fixed_timestamp)
|
||||
i += 1
|
||||
else:
|
||||
# Zaman damgası bulunamadı, bu bir format hatası
|
||||
# Bu durumda bu satırı metin olarak kabul et
|
||||
errors_fixed.append(f"Altyazı {subtitle_number}: Zaman damgası bulunamadı, atlanıyor")
|
||||
# Sonraki geçerli zaman damgasını bul
|
||||
found_timestamp = False
|
||||
while i < len(lines) and not found_timestamp:
|
||||
if '-->' in lines[i]:
|
||||
fixed_timestamp = fix_timestamp(lines[i].strip(), subtitle_number)
|
||||
fixed_lines.append(fixed_timestamp)
|
||||
i += 1
|
||||
found_timestamp = True
|
||||
else:
|
||||
i += 1
|
||||
|
||||
if not found_timestamp:
|
||||
errors_fixed.append(f"Altyazı {subtitle_number}: Hiç zaman damgası bulunamadı, atlanıyor")
|
||||
break
|
||||
|
||||
# Metin satırlarını topla
|
||||
text_lines = []
|
||||
while i < len(lines) and lines[i].strip() != '' and '-->' not in lines[i]:
|
||||
# Bir sonraki satır numara mı kontrol et
|
||||
if i + 1 < len(lines) and lines[i + 1].strip() != '' and '-->' in lines[i + 1]:
|
||||
# Bu muhtemelen metin
|
||||
text_lines.append(lines[i])
|
||||
i += 1
|
||||
elif lines[i].strip().isdigit() and i + 1 < len(lines) and '-->' in lines[i + 1]:
|
||||
# Bu bir sonraki altyazının numarası, dur
|
||||
break
|
||||
else:
|
||||
text_lines.append(lines[i])
|
||||
i += 1
|
||||
|
||||
# Metni ekle
|
||||
for text_line in text_lines:
|
||||
fixed_lines.append(text_line.rstrip())
|
||||
|
||||
# Boş satır ekle
|
||||
fixed_lines.append('')
|
||||
|
||||
subtitle_number += 1
|
||||
|
||||
# Dosyayı kaydet
|
||||
with open(output_path, 'w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(fixed_lines))
|
||||
|
||||
return errors_fixed, subtitle_number - 1
|
||||
|
||||
|
||||
def fix_timestamp(timestamp, subtitle_num):
|
||||
"""Zaman damgası formatını düzeltir."""
|
||||
|
||||
# Boşlukları temizle
|
||||
parts = timestamp.split('-->')
|
||||
if len(parts) != 2:
|
||||
return timestamp
|
||||
|
||||
start = parts[0].strip()
|
||||
end = parts[1].strip()
|
||||
|
||||
# Her iki tarafı da düzelt
|
||||
start_fixed = fix_time_part(start)
|
||||
end_fixed = fix_time_part(end)
|
||||
|
||||
return f"{start_fixed} --> {end_fixed}"
|
||||
|
||||
|
||||
def fix_time_part(time_str):
|
||||
"""Tek bir zaman bölümünü düzeltir (HH:MM:SS,mmm)."""
|
||||
|
||||
# Virgül ve noktayı ayır
|
||||
if ',' in time_str:
|
||||
main_part, ms_part = time_str.rsplit(',', 1)
|
||||
elif '.' in time_str:
|
||||
main_part, ms_part = time_str.rsplit('.', 1)
|
||||
# Noktayı virgüle çevir
|
||||
else:
|
||||
# Milisaniye yok, sonuna ekle
|
||||
main_part = time_str
|
||||
ms_part = '000'
|
||||
|
||||
# HH:MM:SS kısmını düzelt
|
||||
time_parts = main_part.split(':')
|
||||
|
||||
# Eksik bölümleri tamamla
|
||||
while len(time_parts) < 3:
|
||||
time_parts.insert(0, '00')
|
||||
|
||||
# Her bölümü 2 haneli yap
|
||||
fixed_parts = []
|
||||
for part in time_parts:
|
||||
# Sadece sayıları al
|
||||
digits = ''.join(filter(str.isdigit, part))
|
||||
if not digits:
|
||||
digits = '0'
|
||||
# 2 haneli yap
|
||||
fixed_parts.append(digits.zfill(2))
|
||||
|
||||
# Milisaniyeyi 3 haneli yap
|
||||
ms_digits = ''.join(filter(str.isdigit, ms_part))
|
||||
if not ms_digits:
|
||||
ms_digits = '000'
|
||||
elif len(ms_digits) > 3:
|
||||
ms_digits = ms_digits[:3]
|
||||
else:
|
||||
ms_digits = ms_digits.ljust(3, '0')
|
||||
|
||||
return f"{':'.join(fixed_parts)},{ms_digits}"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("SRT dosyası düzeltiliyor...")
|
||||
print("="*60)
|
||||
|
||||
errors_fixed, total_subtitles = fix_srt_file("public/ses.srt", "public/ses_fixed.srt")
|
||||
|
||||
print(f"\nToplam {total_subtitles} altyazı işlendi")
|
||||
|
||||
if errors_fixed:
|
||||
print(f"\nDüzeltilen hatalar ({len([e for e in errors_fixed if not e.startswith(' ')])} adet):")
|
||||
print("="*60)
|
||||
for error in errors_fixed[:30]:
|
||||
print(f" {error}")
|
||||
if len(errors_fixed) > 30:
|
||||
print(f"\n ... ve daha fazlası")
|
||||
|
||||
print(f"\nDüzeltilmiş dosya kaydedildi: public/ses_fixed.srt")
|
||||
print("\nŞimdi kontrol ediliyor...")
|
||||
print("="*60)
|
||||
|
||||
# Kontrol et
|
||||
import check_srt
|
||||
errors, warnings = check_srt.check_srt_format("public/ses_fixed.srt")
|
||||
|
||||
if not errors:
|
||||
print("\n✓ Tüm hatalar düzeltildi!")
|
||||
else:
|
||||
print(f"\nHala {len(errors)} hata var. Manuel düzeltme gerekebilir.")
|
||||
Reference in New Issue
Block a user