movie.py 1.62 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pathlib import Path  # TODO wie kann ich third-party module nach außen verstecken

# TODO Ist der import aus dem selben Pakte so korrekt?
from . import helpers
from . import contrasts


11
# zum Problem mit privaten und öffentlichen Eigenschaften http://www.python-course.eu/python3_properties.php
12
13
14
class Movie(object):
    """main class to interact with the colorspace of movieframes"""
    def __init__(self, prefix, folder='./'):  # TODO platform independent
15
16
        self._frames = Frames(folder, prefix)
        self.fsize = self._frames.frm_cnt
17

18
19
20
21
    def light_dark(self):
        """compute the light/dark contrast of the movie """
        light_dark_ctrst = contrasts.LightDark(self._frames)
        return light_dark_ctrst.hist_vstack()
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


class Frames(object):
    # TODO wie ist das bei Python mit getters und setters, gibt es eine elegantere Lösung
    """Parses movie frames properties"""
    def __init__(self, folder, prefix, start=1, end=0):
        self.folder = folder
        self.prefix = prefix
        self.frames = self.get_frame_list()
        self.frm_length = self.count_total_frames()
        self.start = start
        self.end = self._get_end_frame(end)
        self.frm_cnt = self.count_frames()

    def get_frame_list(self):
        frm_path = Path(self.folder)
        return list(frm_path.glob('*.png'))

    def count_total_frames(self):
        return len(self.frames)

    def count_frames(self):
        return self.end - (self.start - 1)

    def _get_end_frame(self, end):
        if end == 0:
            return self.frm_length
        else:
            return end