Spaces:
Sleeping
Sleeping
| """ | |
| Defines subtitle formatters used by autosub. | |
| """ | |
| # -*- coding: utf-8 -*- | |
| from __future__ import unicode_literals | |
| import json | |
| import pysrt | |
| import six | |
| def srt_formatter(subtitles, padding_before=0, padding_after=0): | |
| """ | |
| Serialize a list of subtitles according to the SRT format, with optional time padding. | |
| """ | |
| sub_rip_file = pysrt.SubRipFile() | |
| for i, ((start, end), text) in enumerate(subtitles, start=1): | |
| item = pysrt.SubRipItem() | |
| item.index = i | |
| item.text = six.text_type(text) | |
| item.start.seconds = max(0, start - padding_before) | |
| item.end.seconds = end + padding_after | |
| sub_rip_file.append(item) | |
| return '\n'.join(six.text_type(item) for item in sub_rip_file) | |
| def vtt_formatter(subtitles, padding_before=0, padding_after=0): | |
| """ | |
| Serialize a list of subtitles according to the VTT format, with optional time padding. | |
| """ | |
| text = srt_formatter(subtitles, padding_before, padding_after) | |
| text = 'WEBVTT\n\n' + text.replace(',', '.') | |
| return text | |
| def json_formatter(subtitles): | |
| """ | |
| Serialize a list of subtitles as a JSON blob. | |
| """ | |
| subtitle_dicts = [ | |
| { | |
| 'start': start, | |
| 'end': end, | |
| 'content': text, | |
| } | |
| for ((start, end), text) | |
| in subtitles | |
| ] | |
| return json.dumps(subtitle_dicts) | |
| def raw_formatter(subtitles): | |
| """ | |
| Serialize a list of subtitles as a newline-delimited string. | |
| """ | |
| return ' '.join(text for (_rng, text) in subtitles) | |
| FORMATTERS = { | |
| 'srt': srt_formatter, | |
| 'vtt': vtt_formatter, | |
| 'json': json_formatter, | |
| 'raw': raw_formatter, | |
| } | |