File size: 2,626 Bytes
bb46cbe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from __future__ import annotations
from typing import Dict, List

from ...data.clip import Clip, ClipSeq


class MusicClip(Clip):
    def __init__(self, time_start: float, duration: float, clipid: int = None, media_type: str = None, mediaid: str = None, timepoint_type: str = None, text: str = None, stage: str = None, path: str = None, duration_num: int = None, similar_clipseq: MatchedClipIds = None, dynamic: float = None, **kwargs):
        super().__init__(time_start, duration, clipid, media_type, mediaid, timepoint_type, text, stage, path, duration_num, similar_clipseq, dynamic, **kwargs)

    @property
    def text_num(self):
        return self._cal_text_num()

    @property
    def original_text_num(self):
        return self._cal_text_num(text_mode=1)

    def _cal_text_num(self, text_mode: int = 0) -> int:
        """计算 文本 字的数量

        Args:
            text_mode (int, optional): 0选text, 其他选original_text. Defaults to 0.

        Returns:
            int: _description_
        """
        if text_mode == 0:
            text = self.text
        else:
            text = self.original_text
        if text is None:
            n_text = 0
        else:
            text = text.strip().split(" ")
            n_text = len(text)
        return n_text

    @property
    def text_num_per_second(self):
        """单位时间内的text数量"""
        return self._cal_text_num_per_second(mode=0)

    @property
    def original_text_num_per_second(self):
        """单位时间内的original_text数量"""
        return self._cal_text_num_per_second(mode=1)

    @property
    def tnps(self):
        """单位时间内的text数量"""
        return self.text_num_per_second

    @property
    def original_tnps(self):
        """单位时间内的original_text数量"""
        return self.original_text_num_per_second

    def _cal_text_num_per_second(self, mode=0):
        """计算单位时间内的文本数量"""
        text_num = self.text_num if mode == 0 else self.original_text_num
        return text_num / self.duration

    @classmethod
    def from_data(cls, data: Dict):
        return MusicClip(**data)


class MusicClipSeq(ClipSeq):

    def __init__(self, items: List[Clip] = None):
        super().__init__(items)
        self.clipseq = self.data

    @classmethod
    def from_data(cls, clipseq: List[Dict]) -> MusicClipSeq:
        new_clipseq = []
        for clip in clipseq:
            video_clip = MusicClip.from_data(clip)
            new_clipseq.append(video_clip)
        video_clipseq = MusicClipSeq(new_clipseq)
        return video_clipseq