Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added support for Adobe Premiere EDLs > 999 events #12

Merged
merged 5 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@

# pycmx

The `pycmx` package provides a basic interface for parsing a CMX 3600 EDL and its most most common variations.
The `pycmx` package provides a basic interface for parsing a CMX 3600 EDL and
its most most common variations.

## Features

* The major variations of the CMX 3600: the standard, "File32" and "File128"
formats are automatically detected and properly read.
* The major variations of the CMX 3600: the standard, "File32", "File128" and
long Adobe Premiere formats are automatically detected and properly read.
* Preserves relationship between events and individual edits/clips.
* Remark or comment fields with common recognized forms are read and
available to the client, including clip name and source file data.
Expand Down Expand Up @@ -83,5 +84,3 @@ Audio channel 7 is present
>>> events[2].edits[0].channels.video
False
```


6 changes: 6 additions & 0 deletions pycmx/parse_cmx_statements.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ def _parse_cmx3600_line(line: str, line_number: int) -> object:
"""
long_event_num_p = re.compile("^[0-9]{6} ")
short_event_num_p = re.compile("^[0-9]{3} ")
x_event_form_p = re.compile("^([0-9]{4,5}) ")

if line.startswith("TITLE:"):
return _parse_title(line, line_number)
Expand All @@ -71,6 +72,11 @@ def _parse_cmx3600_line(line: str, line_number: int) -> object:
return _parse_long_standard_form(line, 32, line_number)
else:
return _parse_long_standard_form(line, 128, line_number)
elif (m := x_event_form_p.match(line)) is not None:
assert m is not None
event_field_length = len(m[1])
return _parse_columns_for_standard_form(line, event_field_length,
8, line_number)
elif short_event_num_p.match(line) is not None:
return _parse_standard_form(line, line_number)
elif line.startswith("AUD"):
Expand Down
7 changes: 7 additions & 0 deletions tests/test_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,10 @@ def test_transition_name(self):
events = list(edl.events)
self.assertEqual(
events[4].edits[1].transition.name, "CROSS DISSOLVE")

def test_adobe_wide(self):
with open("tests/edls/adobe_dai109_test.txt", 'r',
encoding='ISO-8859-1') as f:
edl = pycmx.parse_cmx3600(f)
events = list(edl.events)
self.assertEqual(len(events), 2839)
Loading