Beispiel #1
0
def parse(edl_path, start_tc=None):
    if not os.path.exists(edl_path):
        raise IOError('Path does not exist: %s' % edl_path)

    edl_file = open(edl_path, 'rt')
    edl_lines = edl_file.readlines()
    edl_file.close()

    # check if we there is a TITLE specified
    search = re.search(r'TITLE:\s+(.*)', edl_lines[0])
    if not search:
        edl_name = 'edl'
    else:
        edl_name = search.groups(0)[0].strip()

    if start_tc:
        the_edl = EDL(edl_name, edl_path, start_timecode=TimeCode(start_tc))
    else:
        the_edl = EDL(edl_name, edl_path)

    edit_number_exp = re.compile(r'(\d{3})')
    edit_search_exp = re.compile(r'\d{3}.*[A-Z]\s(.*)')
    edit_name_exp = re.compile(r'\*\sFROM\sCLIP\sNAME:\s(.*)')

    for i in range(2, len(edl_lines), 2):
        tc_line = edl_lines[i]
        name_line = edl_lines[i + 1]
        edit_search = re.search(edit_search_exp, tc_line)
        if edit_search:
            edit_tc = edit_search.groups(0)[0].strip()
        else:
            continue

        edit_number_search = re.search(edit_number_exp, tc_line)
        if edit_number_search:
            edit_number = int(edit_number_search.groups(0)[0])
        else:
            edit_number = 1

        edit_name_search = re.search(edit_name_exp, name_line)
        if edit_name_search:
            edit_name = edit_name_search.groups(0)[0].strip()
        else:
            edit_name = 'edit'

        tc_parts = edit_tc.split(' ')

        media_in_out = (TimeCode(tc_parts[0]), TimeCode(tc_parts[1]))
        global_in_out = (TimeCode(tc_parts[2]), TimeCode(tc_parts[3]))

        current_edit = Edit(edit_number, edit_name, media_in_out,
                            global_in_out)
        the_edl.appendEdit(current_edit)

    return the_edl
Beispiel #2
0
 def test_defaults(self):
     tc = TimeCode()
     self.assertEquals(tc._base, 24)
     self.assertEquals(tc._frames, 0)
Beispiel #3
0
 def setUp(self):
     self.tc = TimeCode()
     self.tc30 = TimeCode(base=30)
Beispiel #4
0
 def test_frames_tc_empty(self):
     tc = TimeCode(tc='00:00:00:00', frames=0)
     self.assertEquals(tc._frames, 0)
Beispiel #5
0
 def setUp(self):
     self.tc1 = TimeCode(frames=4)
     self.tc2 = TimeCode(frames=3)
Beispiel #6
0
 def test_frames_tc_frames_empty(self):
     tc = TimeCode(tc='00:00:00:12', frames=0)
     self.assertEquals(tc._base, 24)
     self.assertEquals(tc._frames, 12)
Beispiel #7
0
 def test_frames_tc_tc_empty(self):
     tc = TimeCode(tc='00:00:00:00', frames=2)
     self.assertEquals(tc._base, 24)
     self.assertEquals(tc._frames, 2)
Beispiel #8
0
 def test_tc(self):
     tc = TimeCode(tc='00:00:01:00')
     self.assertEquals(tc._base, 24)
     self.assertEquals(tc._frames, 24)
Beispiel #9
0
 def test_frames(self):
     tc = TimeCode(frames=20)
     self.assertEquals(tc._base, 24)
     self.assertEquals(tc._frames, 20)
Beispiel #10
0
 def test_base(self):
     tc = TimeCode(base=30)
     self.assertEquals(tc._base, 30)
     self.assertEquals(tc._frames, 0)