AzLearn

تمرين إعادة البناء

مزحزح توقيت 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()
اكتب هنا