Spaces:
No application file
No application file
File size: 1,881 Bytes
6755a2d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
from typing import List, Union, Callable
from copy import deepcopy
from .clip import ClipSeq
from .clip_process import reset_clipseq_id
import logging
logger = logging.getLogger(__name__) # pylint: disable=invalid-name
# TODO: 不同类型的clip需要不同的融合方式
def fuse_clips(s1: ClipSeq, s2: ClipSeq) -> ClipSeq:
"""合并2个clip
Args:
s1 (Clip):
s2 (Clip):
Returns:
Clip: 合并后Clip
"""
if not isinstance(s2, list):
s2 = [s2]
s1 = deepcopy(s1)
for other_clip in s2:
s1.duration += other_clip.duration
if s1.stage is not None and other_clip.stage is not None:
# TODO:如何保留融合的clip信息
s1.stage = "{}_{}".format(s1.stage, other_clip.stage)
s1.origin_clipid.extend(other_clip.origin_clipid)
if s1.timepoint_type is not None and other_clip.timepoint_type is not None:
s1.timepoint_type = "{}_{}".format(
s1.timepoint_type, other_clip.timepoint_type
)
return s1
# TODO: 不同的filter和fusion函数不适用同一种流程,待优化
class ClipSeqFusion(object):
"""_summary_
Args:
object (_type_): _description_
"""
def __init__(self, filter: Callable, fuse_func: Callable = None) -> None:
self.filter = filter
self.fuse_func = fuse_func
def __call__(self, clipseq: ClipSeq) -> ClipSeq:
new_clipseq = []
n_clipseq = len(clipseq)
for i in range(n_clipseq):
clip = clipseq[i]
if self.filter(clip):
new_clipseq.append(clip)
new_clipseq = reset_clipseq_id(new_clipseq)
logger.debug(
"ClipSeqFilter: clipseq length before={}, after={}".format(
n_clipseq, len(new_clipseq)
)
)
return new_clipseq
|