تمرين إعادة البناء
مزحزح توقيت SRT
عدّل توقيت ترجمة SRT بمقدار ثوان محدد واكتب الناتج إلى ملف جديد.
python
~25 دقيقة
متوسط
أعد بناء الكود
Rebuild
هذا هو الكود. اكتبه بنفسك.
الكود المرجعي
import argparse
import re
from pathlib import Path
STAMP_RE = re.compile(r"(\d\d):(\d\d):(\d\d),(\d\d\d)")
def to_millis(match: re.Match[str]) -> int:
hours, minutes, seconds, millis = (int(part) for part in match.groups())
return (((hours * 60) + minutes) * 60 + seconds) * 1000 + millis
def format_millis(value: int) -> str:
value = max(0, value)
seconds, millis = divmod(value, 1000)
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
return f"{hours:02}:{minutes:02}:{seconds:02},{millis:03}"
def shift_text(text: str, offset_ms: int) -> str:
return STAMP_RE.sub(lambda match: format_millis(to_millis(match) + offset_ms), text)
def main() -> None:
parser = argparse.ArgumentParser(description="Shift SRT timestamps into a new file.")
parser.add_argument("input", type=Path)
parser.add_argument("output", type=Path)
parser.add_argument("--seconds", type=float, required=True)
args = parser.parse_args()
shifted = shift_text(args.input.read_text(encoding="utf-8"), int(args.seconds * 1000))
args.output.write_text(shifted, encoding="utf-8")
print(f"Wrote {args.output}")
if __name__ == "__main__":
main()اكتب هنا