{"library":"pysubs2","title":"pysubs2","description":"pysubs2 is an actively maintained Python library (current version 1.8.1) for editing subtitle files. It supports various formats including SubStation Alpha (ASS/SSA), SubRip (SRT), MicroDVD, MPL2, TMP, WebVTT, TTML, SAMI, and OpenAI Whisper captions. It offers both an API for programmatic manipulation and a small CLI tool for batch conversion and retiming. The library is typically released as new features are added or bugs are fixed, without a strict time-based cadence.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install pysubs2"],"cli":{"name":"pysubs2","version":"pysubs2 1.8.1"}},"imports":["from pysubs2 import SSAFile","from pysubs2 import SSAEvent","from pysubs2 import make_time","from pysubs2 import load","import pysubs2"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import pysubs2\nimport os\n\n# Create a dummy SRT file for demonstration\ndummy_srt_content = \"\"\"\n1\n00:00:01,000 --> 00:00:03,000\nHello, world!\n\n2\n00:00:04,000 --> 00:00:06,000\nThis is a test subtitle.\n\"\"\"\nwith open(\"input.srt\", \"w\", encoding=\"utf-8\") as f:\n    f.write(dummy_srt_content)\n\n# Load the subtitle file\nsubs = pysubs2.load(\"input.srt\", encoding=\"utf-8\")\nprint(f\"Loaded {len(subs)} subtitles.\")\n\n# Add a new subtitle event\nsubs.append(pysubs2.SSAEvent(\n    start=pysubs2.make_time(s=7),\n    end=pysubs2.make_time(s=9, ms=500),\n    text=\"A new subtitle added via pysubs2.\"\n))\n\n# Shift all subtitles by 1.5 seconds forward\nsubs.shift(s=1, ms=500)\n\n# Modify an existing subtitle\nif len(subs) > 0:\n    subs[0].text = \"(Modified) \" + subs[0].text\n\n# Save the modified subtitles to a new ASS file\noutput_filename = \"output_modified.ass\"\nsubs.save(output_filename, format_=\"ass\", encoding=\"utf-8\")\nprint(f\"Modified subtitles saved to {output_filename}.\")\n\n# Clean up dummy files\nos.remove(\"input.srt\")\nos.remove(output_filename)\n","lang":"python","description":"This quickstart demonstrates how to load a subtitle file, add a new event, shift all event timings, modify an existing event's text, and save the result in a different format (ASS). It highlights the use of `pysubs2.load`, `pysubs2.SSAEvent`, `pysubs2.make_time`, and `subs.save` methods.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.8.1","pypi_latest":"1.8.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.6,"avg_import_s":0.17,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":6.3,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.15,"mem_mb":6.3,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.22,"mem_mb":6.7,"disk_size":"20.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.2,"mem_mb":6.7,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.2,"mem_mb":6.8,"disk_size":"11.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.2,"mem_mb":6.8,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.19,"mem_mb":6.8,"disk_size":"11.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.18,"mem_mb":6.6,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":6.1,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pysubs2","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.1,"mem_mb":6.1,"disk_size":"18M"}]}}