コード例 #1
0
ファイル: flvaddmp3.py プロジェクト: ASPP/vnc2flv
def mp3add(srcfile, mp3files, outfile, force=False, debug=0):
    if not force and os.path.exists(outfile):
        raise IOError('file already exists: %r' % outfile)
    fout = file(outfile, 'wb')
    writer = FLVWriter(fout, debug=debug, has_video=True, has_audio=True)
    fin = file(srcfile, 'rb')
    parser = FLVParser(fin, debug=debug)
    for (i, (tag, _, timestamp, _, _)) in enumerate(parser):
        if tag == 8:
            pass
        elif tag == 9:
            writer.write_video_frame(timestamp, parser.get_data(i))
        elif tag == 18:
            (k,v) = parser.parse_metadata(parser.get_data(i))
            if k == 'onMetaData':
                writer.set_screen_size(v.get('width',0), v.get('height',0))
            else:
                writer.write_other_data(tag, parser.get_data(i))
    parser.close()
    fin.close()
    for fname in mp3files:
        m = re.match(r'([^:]+):(.+)$', fname)
        ranges = None
        if m:
            fname = m.group(1)
            ranges = MultipleRange(m.group(2))
        audio = AudioSink()
        fp = file(fname, 'rb')
        audio.load(fp)
        fp.close()
        if ranges:
            for (_,s,e) in ranges:
                audio.put(writer, s, e, s)
        else:
            audio.put(writer)
    writer.close()
    fout.close()
    return
コード例 #2
0
def mp3add(srcfile, mp3files, outfile, force=False, debug=0):
    if not force and os.path.exists(outfile):
        raise IOError('file already exists: %r' % outfile)
    fout = open(outfile, 'wb')
    writer = FLVWriter(fout, debug=debug, has_video=True, has_audio=True)
    fin = open(srcfile, 'rb')
    parser = FLVParser(fin, debug=debug)
    for (i, (tag, _, timestamp, _, _)) in enumerate(parser):
        if tag == 8:
            pass
        elif tag == 9:
            writer.write_video_frame(timestamp, parser.get_data(i))
        elif tag == 18:
            (k, v) = parser.parse_metadata(parser.get_data(i))
            if k == 'onMetaData':
                writer.set_screen_size(v.get('width', 0), v.get('height', 0))
            else:
                writer.write_other_data(tag, parser.get_data(i))
    parser.close()
    fin.close()
    for fname in mp3files:
        m = re.match(r'([^:]+):(.+)$', fname)
        ranges = None
        if m:
            fname = m.group(1)
            ranges = MultipleRange(m.group(2))
        audio = AudioSink()
        fp = open(fname, 'rb')
        audio.load(fp)
        fp.close()
        if ranges:
            for (_, s, e) in ranges:
                audio.put(writer, s, e, s)
        else:
            audio.put(writer)
    writer.close()
    fout.close()
    return