36f83ff72c
Introduced Python scripts for SRT subtitle checking and fixing, and added comprehensive documentation covering advanced features such as protocol detection, subtitle/audio/quality management, keyboard shortcuts, and touch gestures. Updated local settings to allow new build and Python commands, added TypeScript definitions for FLV, and implemented RTMP/FLV protocol support in the player. Removed CHANGELOG.md and made various improvements to styles and example app.
110 lines
3.9 KiB
Python
110 lines
3.9 KiB
Python
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")
|