コード例 #1
0
ファイル: gnomecast.py プロジェクト: e-ht/gnomecast
 def select_subtitles_file(self, fn):
   if not os.path.isfile(fn):
     def f():
       dialog = Gtk.MessageDialog(self.win, 0, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, "File Not Found")
       dialog.format_secondary_text("Could not find subtitles file: %s" % fn)
       dialog.run()
       dialog.destroy()
     GLib.idle_add(f)
     return
   fn = os.path.abspath(fn)
   ext = fn.split('.')[-1]
   display_name = os.path.basename(fn)
   if ext=='vtt':
     with open(fn) as f:
       self.subtitles = f.read()
   else:
     with open(fn,'rb') as f:
       caps = f.read()
       try: caps = caps.decode()
       except UnicodeDecodeError: caps = caps.decode('latin-1')
     if caps.startswith('\ufeff'): # BOM
       caps = caps[1:]
     converter = pycaption.CaptionConverter()
     converter.read(caps, pycaption.detect_format(caps)())
     self.subtitles = converter.write(pycaption.WebVTTWriter())
   pos = len(self.subtitle_store)
   self.subtitle_store.append([display_name, pos-2, self.subtitles])
   self.subtitle_combo.set_active(pos)
コード例 #2
0
def write_captions(content, options):
    writer_kwargs = {
        'video_width':
        int(options.video_width) if options.video_width else None,  # noqa
        'video_height':
        int(options.video_height) if options.video_height else None  # noqa
    }
    if options.sami:
        print(
            pycaption.SAMIWriter(
                **writer_kwargs).write(content).encode("utf-8"))  # noqa
    if options.dfxp:
        print(
            pycaption.DFXPWriter(
                **writer_kwargs).write(content).encode("utf-8"))  #noqa
    if options.srt:
        print(
            pycaption.SRTWriter(
                **writer_kwargs).write(content).encode("utf-8"))  # noqa
    if options.transcript:
        print(
            pycaption.TranscriptWriter(
                **writer_kwargs).write(content).encode("utf-8"))  # noqa
    if options.vtt:
        print(
            pycaption.WebVTTWriter(
                **writer_kwargs).write(content).encode("utf-8"))  # noqa
    if options.unpositioned_dfxp:
        print(
            pycaption.dfxp.SinglePositioningDFXPWriter(
                **writer_kwargs).write(content).encode("utf-8"))
コード例 #3
0
ファイル: gnomecast.py プロジェクト: nedrichards/gnomecast
    def gen_thumbnail(self):
        container = self.fn.lower().split(".")[-1]
        thumbnail_fn = None
        subtitle_ids = []
        if container in ('aac', 'mp3', 'wav'):
            cmd = ['ffmpeg', '-i', self.fn, '-f', 'ffmetadata', '-']
        else:
            thumbnail_fn = tempfile.mkstemp(suffix='.jpg',
                                            prefix='gnomecast_thumbnail_')[1]
            os.remove(thumbnail_fn)
            cmd = [
                'ffmpeg', '-y', '-i', self.fn, '-f', 'mjpeg', '-vframes', '1',
                '-ss', '27', '-vf', 'scale=600:-1', thumbnail_fn
            ]
        self.ffmpeg_desc = output = subprocess.check_output(
            cmd, stderr=subprocess.STDOUT)
        for line in output.decode().split('\n'):
            line = line.strip()
            if line.startswith('Duration:'):
                self.duration = parse_ffmpeg_time(line.split()[1].strip(','))
            if line.startswith('Stream') and 'Subtitle' in line:
                id = line.split()[1].strip('#').replace(':', '.')
                id = id[:id.index('(')]
                subtitle_ids.append(id)
        print('subtitle_ids', subtitle_ids)

        def f():
            if thumbnail_fn:
                self.thumbnail_image.set_from_file(thumbnail_fn)
                os.remove(thumbnail_fn)
                self.win.resize(1, 1)
            self.update_status()

        GLib.idle_add(f)
        new_subtitles = []
        for subtitle_id in subtitle_ids:
            srt_fn = tempfile.mkstemp(suffix='.srt',
                                      prefix='gnomecast_subtitles_')[1]
            output = subprocess.check_output([
                'ffmpeg', '-y', '-i', self.fn, '-vn', '-an',
                '-codec:s:%s' % subtitle_id, 'srt', srt_fn
            ],
                                             stderr=subprocess.STDOUT)
            with open(srt_fn) as f:
                caps = f.read()
            print('caps', caps)
            converter = pycaption.CaptionConverter()
            converter.read(caps, pycaption.detect_format(caps)())
            subtitles = converter.write(pycaption.WebVTTWriter())
            new_subtitles.append((subtitle_id, subtitles))
            os.remove(srt_fn)

        def f():
            pos = len(self.subtitle_store)
            for id, subs in new_subtitles:
                self.subtitle_store.append([id, pos - 2, subs])
                pos += 1

        GLib.idle_add(f)
コード例 #4
0
def write_captions(content, options):
    if options.sami:
        print pycaption.SAMIWriter().write(content).encode("utf-8")
    if options.dfxp:
        print pycaption.DFXPWriter().write(content).encode("utf-8")
    if options.srt:
        print pycaption.SRTWriter().write(content).encode("utf-8")
    if options.vtt:
        print pycaption.WebVTTWriter().write(content).encode("utf-8")
    if options.transcript:
        print pycaption.TranscriptWriter().write(content).encode("utf-8")
コード例 #5
0
def main(argv):
    inputfile = ''
    inputType = ''
    outputType = ''

    try:
        opts, args = getopt.getopt(argv, "h:i:f:t:")
    except getopt.GetoptError:
        print('test.py -i <inputfile> -f <intputType> -t <outputType>')
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print('test.py -i <inputfile> -f <intputType> -t <outputType>')
            sys.exit()
        elif opt in ("-i", "--ifile"):
            inputfile = arg
        elif opt in ("-f", "--sfile"):
            inputType = arg
        elif opt in ("-t", "--tfile"):
            outputType = arg

    if inputType == outputType:
        print('Error: input type and output type are same format')
        sys.exit(1)

    with io.open(inputfile) as f:
        str1 = f.read()
    inputValue = inputType.lower()

    if inputValue == 'scc':
        c = pycaption.SCCReader().read(str1)
    elif inputValue == 'srt':
        c = pycaption.SRTReader().read(str1)
    elif inputValue == 'dfxp':
        c = pycaption.DFXPReader().read(str1)
    elif inputValue == 'webvtt':
        c = pycaption.WebVTTReader().read(str1)
    else:
        print('Error: invalid input type. <srt/scc/webvtt/dfxp> allowed')
        sys.exit(1)

    outputValue = outputType.lower()
    if outputValue == 'scc':
        print(pycaption.SCCWriter().write(c))
    elif outputValue == 'srt':
        print(pycaption.SRTWriter().write(c))
    elif outputValue == 'dfxp':
        print(pycaption.DFXPWriter().write(c))
    elif outputValue == 'webvtt':
        print(pycaption.WebVTTWriter().write(c))
    else:
        print('Error: invalid output type. <srt/scc/webvtt/dfxp> allowed')
        sys.exit(1)
コード例 #6
0
ファイル: helper.py プロジェクト: Heavynest/transcript-editor
def test_captions():
	srt_caps = '''1
	00:00:09,209 --> 00:00:12,312
	This is an example SRT file,which, while extremely short,is still a valid SRT file.


	2
	00:00:19,209 --> 00:00:22,312
	This is an example SRT file,which, while extremely short,is still a valid SRT file.
	'''
	converter = pycaption.CaptionConverter()
	converter.read(srt_caps,pycaption.SRTReader())
	print(converter.write(pycaption.WebVTTWriter()))
コード例 #7
0
def write_captions(content, options):
    if options.scc:
        print(pycaption.SCCWriter().write(content))
    if options.sami:
        print(pycaption.SAMIWriter().write(content))
    if options.dfxp:
        print(pycaption.DFXPWriter().write(content))
    if options.srt:
        print(pycaption.SRTWriter().write(content))
    if options.vtt:
        print(pycaption.WebVTTWriter().write(content))
    if options.transcript:
        # import TranscriptWriter only if necessary, since it requires additional dependencies
        from pycaption.transcript import TranscriptWriter
        print(TranscriptWriter().write(content))
コード例 #8
0
def write_captions(content, options, lang='', filename=''):
    if options.sami:
        print pycaption.SAMIWriter().write(content).encode("utf-8")
    if options.dfxp:
        print pycaption.DFXPWriter().write(content).encode("utf-8")
    if options.webvtt:
        location = os.getcwd()
        f = open(location + '/captions/' + filename + '_' + lang + '.vtt',
                 'w')  #Save vtt files into captions folder
        f.write(pycaption.WebVTTWriter().write(content, lang).encode("utf-8"))
        # print pycaption.WebVTTWriter().write(content, lang).encode("utf-8")
    if options.srt:
        print pycaption.SRTWriter().write(content).encode("utf-8")
    if options.transcript:
        print pycaption.TranscriptWriter().write(content).encode("utf-8")
コード例 #9
0
 def select_subtitles_file(self, fn):
     ext = fn.split('.')[-1]
     display_name = os.path.basename(fn)
     if ext == 'vtt':
         with open(fn) as f:
             self.subtitles = f.read()
     else:
         with open(fn) as f:
             caps = f.read()
         if caps.startswith('\ufeff'):  # BOM
             caps = caps[1:]
         converter = pycaption.CaptionConverter()
         converter.read(caps, pycaption.detect_format(caps)())
         self.subtitles = converter.write(pycaption.WebVTTWriter())
     pos = len(self.subtitle_store)
     self.subtitle_store.append([display_name, pos - 2, self.subtitles])
     self.subtitle_combo.set_active(pos)
コード例 #10
0
ファイル: subtitles.py プロジェクト: oplarshad/fun-apps
def convert_to_vtt(caps):
    """Convert subtitles to WebVTT format

    Note that if the subtitles are already in VTT format, nothing is done.

    Args:
        caps (str or unicode)
    Returns:
    caps (unicode): None if the format could not be detected.
    """
    if isinstance(caps, str):
        caps = caps.decode('utf-8')
    caps = caps.strip(u"\ufeff").strip(u"\n").strip(u"\r")
    sub_reader = pycaption.detect_format(caps)
    if sub_reader is None:
        return None
    if sub_reader != pycaption.WebVTTReader:
        caps = pycaption.WebVTTWriter().write(sub_reader().read(caps))
    return caps
コード例 #11
0
ファイル: braingeyser.py プロジェクト: regisb/braingeyser
def convert_to_vtt(path):
    """
    Convert a subtitles file from any format (e.g: srt) to vtt. This is
    necessary for use with videojs, which supports only vtt subtitles.
    """
    caps = open(path, 'rb').read()
    try:
        caps = caps.decode('utf8')
    except UnicodeDecodeError:
        # Attempt to read with custom encoding
        detected = chardet.detect(caps)
        caps = caps.decode(detected['encoding'])

    caps = caps.strip("\ufeff").strip("\n").strip("\r")
    sub_reader = pycaption.detect_format(caps)
    if sub_reader is None:
        return None
    if sub_reader != pycaption.WebVTTReader:
        read_caps = sub_reader().read(caps)
        caps = pycaption.WebVTTWriter().write(read_caps)
    return caps
コード例 #12
0
 def update_subtitles(self):
   subtitle_ids = []
   cmd = ['ffprobe', '-i', self.fn]
   output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
   for line in output.decode().split('\n'):
     line = line.strip()
     if line.startswith('Stream') and 'Subtitle' in line:
       id = line.split()[1].strip('#').replace(':','.')
       id = id[:id.index('(')]
       subtitle_ids.append(id)
   print('subtitle_ids', subtitle_ids)
   new_subtitles = []
   for subtitle_id in subtitle_ids:
     srt_fn = tempfile.mkstemp(suffix='.srt', prefix='gnomecast_subtitles_')[1]
     output = subprocess.check_output(['ffmpeg', '-y', '-i', self.fn, '-vn', '-an', '-codec:s:%s' % subtitle_id, 'srt', srt_fn], stderr=subprocess.STDOUT)
     with open(srt_fn) as f:
       caps = f.read()
     #print('caps', caps)
     converter = pycaption.CaptionConverter()
     converter.read(caps, pycaption.detect_format(caps)())
     subtitles = converter.write(pycaption.WebVTTWriter())
     new_subtitles.append((subtitle_id, subtitles))
     os.remove(srt_fn)
   def f():
     self.subtitle_store.clear()
     self.subtitle_store.append(["No subtitles.", -1, None])
     self.subtitle_store.append(["Add subtitle file...", -2, None])
     self.subtitle_combo.set_active(0)
     pos = len(self.subtitle_store)
     for id, subs in new_subtitles:
       self.subtitle_store.append([id, pos-2, subs])
       pos += 1
   GLib.idle_add(f)
   ext = self.fn.split('.')[-1]
   sexts = ['vtt', 'srt']
   for sext in sexts:
     if os.path.isfile(self.fn[:-len(ext)] + sext):
       self.select_subtitles_file(self.fn[:-len(ext)] + sext) 
       break
コード例 #13
0
def upload_subtitle(public_video_id, subtitle_public_id, language_code,
                    content):
    """
    Convert subtitle to VTT and upload it.

    Args:
        public_video_id (str)
        subtitle_id (str)
        language_code (str)
        content (bytes)
    """
    # Note: if this ever raises an exception, we should convert it to SubtitleInvalid
    content = content.decode('utf-8')

    # Convert to VTT, whatever the initial format
    content = content.strip("\ufeff\n\r")
    sub_reader = pycaption.detect_format(content)
    if sub_reader is None:
        raise exceptions.SubtitleInvalid("Could not detect subtitle format")
    if sub_reader != pycaption.WebVTTReader:
        content = pycaption.WebVTTWriter().write(sub_reader().read(content))

    backend.get().upload_subtitle(public_video_id, subtitle_public_id,
                                  language_code, content)
コード例 #14
0
def write_captions(content, output_filename):
    with open(output_filename, 'w') as output_file:
        output_file.write(
            pycaption.WebVTTWriter().write(content).encode("utf-8"))
        print("Generate " + output_filename)