| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | """Defines subtitle formatters used by autosub."""# -*- coding: utf-8 -*-from __future__ import unicode_literalsimport jsonimport pysrtimport sixdef 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 textdef 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,}
 |