mirror of
https://github.com/iluvcapra/pycmx.git
synced 2025-12-31 08:50:54 +00:00
FRMT implementation
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# pycmx
|
||||
# (c) 2018 Jamie Hardt
|
||||
|
||||
from pycmx.statements import StmtCdlSat, StmtCdlSop
|
||||
from pycmx.statements import StmtCdlSat, StmtCdlSop, StmtFrmc
|
||||
from .transition import Transition
|
||||
from .channel_map import ChannelMap
|
||||
|
||||
@@ -26,7 +26,7 @@ class Edit:
|
||||
self.trans_name_statement = trans_name_statement
|
||||
self.asc_sop_statement: Optional[StmtCdlSop] = asc_sop_statement
|
||||
self.asc_sat_statement: Optional[StmtCdlSat] = asc_sat_statement
|
||||
self.frmc_statement = frmc_statement
|
||||
self.frmc_statement: Optional[StmtFrmc] = frmc_statement
|
||||
|
||||
@property
|
||||
def line_number(self) -> int:
|
||||
@@ -150,3 +150,10 @@ class Edit:
|
||||
Get ASC CDL saturation value for clip, if present
|
||||
"""
|
||||
return self.asc_sat_statement
|
||||
|
||||
@property
|
||||
def frmc(self) -> Optional[StmtFrmc]:
|
||||
"""
|
||||
Get FRMC data
|
||||
"""
|
||||
return self.frmc_statement
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# pycmx
|
||||
# (c) 2023 Jamie Hardt
|
||||
|
||||
from pycmx.statements import StmtFrmc
|
||||
from .parse_cmx_statements import (
|
||||
StmtEvent, StmtClipName, StmtSourceFile, StmtAudioExt, StmtUnrecognized,
|
||||
StmtEffectsName, StmtCdlSop, StmtCdlSat)
|
||||
@@ -76,7 +77,8 @@ class Event:
|
||||
source_file_statement=s1,
|
||||
trans_name_statement=u1,
|
||||
asc_sop_statement=self._asc_sop_statement(),
|
||||
asc_sat_statement=self._asc_sat_statement())
|
||||
asc_sat_statement=self._asc_sat_statement(),
|
||||
frmc_statement=self._frmc_statement())
|
||||
for (e1, n1, s1, u1) in zip(*the_zip)]
|
||||
|
||||
@property
|
||||
@@ -116,3 +118,6 @@ class Event:
|
||||
def _asc_sat_statement(self) -> Optional[StmtCdlSat]:
|
||||
return next((s for s in self.statements if type(s) is StmtCdlSat),
|
||||
None)
|
||||
|
||||
def _frmc_statement(self) -> Optional[StmtFrmc]:
|
||||
return next((s for s in self.statements if type(s) is StmtFrmc), None)
|
||||
|
||||
@@ -136,8 +136,7 @@ def _parse_remark(line, line_number) -> object:
|
||||
elif line.startswith("FRMC"):
|
||||
match = re.match(
|
||||
r'^FRMC START:\s*(\d+)\s+FRMC END:\s*(\d+)'
|
||||
r'\s+FRMC DURATION:\s*(\d+)',
|
||||
line)
|
||||
r'\s+FRMC DURATION:\s*(\d+)', line, re.IGNORECASE)
|
||||
|
||||
if match is None:
|
||||
return StmtRemark(line, line_number)
|
||||
|
||||
@@ -159,4 +159,20 @@ class TestParse(TestCase):
|
||||
edl = pycmx.parse_cmx3600(f)
|
||||
for event in edl.events:
|
||||
if event.number == 1:
|
||||
...
|
||||
frmc = event.edits[0].frmc_statement
|
||||
self.assertIsNotNone(frmc)
|
||||
assert frmc
|
||||
self.assertEqual(frmc.start, "1001")
|
||||
self.assertEqual(frmc.end, "1102")
|
||||
self.assertEqual(frmc.duration, "102")
|
||||
|
||||
with open("tests/edls/cdl_frmc_example02.edl", "r") as f:
|
||||
edl = pycmx.parse_cmx3600(f)
|
||||
for event in edl.events:
|
||||
if event.number == 6:
|
||||
frmc = event.edits[0].frmc_statement
|
||||
self.assertIsNotNone(frmc)
|
||||
assert frmc
|
||||
self.assertEqual(frmc.start, "1001")
|
||||
self.assertEqual(frmc.end, "1486")
|
||||
self.assertEqual(frmc.duration, "486")
|
||||
|
||||
Reference in New Issue
Block a user