Esempio n. 1
0
def main():
    print('AutoCutter started @ ' + getTimeStr() + '!')
    args = parseArguments()
    print(args)
    while (checkSanityDir(args.directorySrc, args.directoryDst) == False):
        print('Failed sanity check, looping..')
        time.sleep(5)


#    concatenateVideos(args)
#    dumpExifInfo(args)
    segments = buildSegments(args)
    events = createEvents()
    for k, v in segments.items():
        scheduler = SegmentScheduler(args.directoryTmp, events)
        scheduler.set_date(v[0].getStartTime())

        cutter = SegmentCutter(args.directoryTmp)
        joiner = SegmentJoiner(args.directoryDst, args.directoryTmp)
        ret = scheduler.calculate(v)

        for team, cutList in ret.items():
            for cut in cutList:
                cutter.run(cut, args.dryRun)
            joiner.ffmpegJoin(team, cutList, args.dryRun)

            for cut in cutList:
                if shouldDelete(cut, events, args):
                    print("Would unlink: " + cut.cutFilePath)
                    os.unlink(cut.cutFilePath)
                else:
                    print("Would NOT unlink: " + cut.cutFilePath)
Esempio n. 2
0
 def test_set_date(self):
     dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
     dt_expected = datetime.strptime("2018:10:31_00:00:00",
                                     "%Y:%m:%d_%H:%M:%S")
     scheduler = SegmentScheduler('/tmp/', self.events)
     scheduler.set_date(dt)
     self.assertTrue(scheduler.m_dateAtMidnight == dt_expected)
Esempio n. 3
0
    def test_calculation_segment_is_in_the_middle_of_event(self):
        cutter = SegmentCutter('/tmp/')
        scheduler = SegmentScheduler('/tmp/', self.events)
        scheduler.set_date(
            datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S"))
        segments = []
        segments.append(
            createVideoSegment('/tmp/middle_alegria', '2018:10:31 18:35:00',
                               1353.352))
        segments.append(
            createVideoSegment('/tmp/middle_footwork', '2018:10:31 20:35:00',
                               1353.352))
        segments.append(
            createVideoSegment('/tmp/middle_ritmo', '2018:10:31 21:15:00',
                               1353.352))

        ret = scheduler.calculate(segments)

        for k, value in ret.items():
            #            print (f"Key: {k}")
            for cut in ret[k]:
                pass
#                print ("Got command: " + cutter.run(cut))

        self.assertTrue(len(ret['Alegria']) == 1)
        self.assertTrue(
            ret['Alegria'][0].segment.filePath == '/tmp/middle_alegria')
        self.assertTrue(len(ret['Footwork']) == 1)
        self.assertTrue(
            ret['Footwork'][0].segment.filePath == '/tmp/middle_footwork')
        self.assertTrue(len(ret['Ritmo']) == 1)
        self.assertTrue(
            ret['Ritmo'][0].segment.filePath == '/tmp/middle_ritmo')
Esempio n. 4
0
 def test_calculation_and_cut(self):
     cutter = SegmentCutter('/tmp/')
     dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
     scheduler = SegmentScheduler('/tmp/', self.events)
     scheduler.set_date(dt)
     ret = scheduler.calculate(self.segments)
     for k, value in ret.items():
         #            print (f"Key: {k}")
         for cut in ret[k]:
             pass
Esempio n. 5
0
 def test_calculation_and_cut_and_join(self):
     cutter = SegmentCutter('/tmp/')
     joiner = SegmentJoiner('/tmp/out/', '/tmp/')
     dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
     scheduler = SegmentScheduler('/tmp/', self.events)
     scheduler.set_date(dt)
     runList = []
     ret = scheduler.calculate(self.segments)
     for k, value in ret.items():
         #            new_cuts = value
         for cutSegment in value:
             cutter.run(cutSegment, dryRun=True)
Esempio n. 6
0
 def test_calculation(self):
     dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
     scheduler = SegmentScheduler('/tmp/', self.events)
     scheduler.set_date(dt)
     ret = scheduler.calculate(self.segments)
     for k, value in ret.items():
         #            print (f"Key : {k}")
         cut_duration = timedelta(seconds=0)
         for cut in ret[k]:
             #                print (f"   File: {cut.segment.filePath}")
             #                print (f" Dura: {cut.segment.duration}")
             #                print (f" Dura: {cut.cutDuration}")
             cut_duration += cut.cutDuration
Esempio n. 7
0
    def test_calculation_segment_is_after_all_events(self):
        cutter = SegmentCutter('/tmp/')
        scheduler = SegmentScheduler('/tmp/', self.events)
        scheduler.set_date(
            datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S"))
        segments = []
        segments.append(
            createVideoSegment('/tmp/end_alegria_begin_footwork',
                               '2018:10:31 22:48:00', 1353.352))
        ret = scheduler.calculate(segments)

        self.assertTrue(len(ret['Alegria']) == 0)
        self.assertTrue(len(ret['Footwork']) == 0)
        self.assertTrue(len(ret['Ritmo']) == 0)
Esempio n. 8
0
    def test_get_event_date(self):
        dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
        expected_start = datetime.strptime("2018:10:31_18:30:00",
                                           "%Y:%m:%d_%H:%M:%S")
        expected_start = pytz.timezone('US/Eastern').localize(expected_start)
        expected_end = datetime.strptime("2018:10:31_20:05:00",
                                         "%Y:%m:%d_%H:%M:%S")
        expected_end = pytz.timezone('US/Eastern').localize(
            datetime.strptime("2018:10:31_20:05:00", "%Y:%m:%d_%H:%M:%S"))
        expected_dur = timedelta(hours=1, minutes=35)

        scheduler = SegmentScheduler('/tmp/', self.events)
        scheduler.set_date(dt)
        ev_date = scheduler.get_event_date(self.events[0])

        # print (f"Start : {ev_date.getStartTime()}")
        # print (f"Durat : {ev_date.getDuration()}")
        # print (f"End   : {ev_date.getEndTime()}")
        self.assertTrue(ev_date.getStartTime() == expected_start)
        self.assertTrue(ev_date.getEndTime() == expected_end)
        self.assertTrue(ev_date.getDuration() == expected_dur)
Esempio n. 9
0
    def test_calculation_segment_is_in_the_middle_of_two_events(self):
        cutter = SegmentCutter('/tmp/')
        scheduler = SegmentScheduler('/tmp/', self.events)
        scheduler.set_date(
            datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S"))
        segments = []
        segments.append(
            createVideoSegment('/tmp/end_alegria_begin_footwork',
                               '2018:10:31 19:55:00', 1353.352))
        ret = scheduler.calculate(segments)

        self.assertTrue(len(ret['Alegria']) == 1)
        self.assertTrue(ret['Alegria'][0].segment.filePath ==
                        '/tmp/end_alegria_begin_footwork')
        #        print("here: " + str(ret['Alegria'][0].segment.getDuration()))
        self.assertTrue(ret['Alegria'][0].cutDuration == timedelta(
            seconds=600))

        self.assertTrue(len(ret['Footwork']) == 1)
        self.assertTrue(ret['Footwork'][0].segment.filePath ==
                        '/tmp/end_alegria_begin_footwork')
        self.assertTrue(ret['Footwork'][0].cutDuration == timedelta(
            seconds=300))
        self.assertTrue(len(ret['Ritmo']) == 0)
Esempio n. 10
0
    def test_should_delete(self):
        ParsedArgs = namedtuple(
            'ParsedArgs',
            ['directorySrc', 'directoryDst', 'directoryTmp', 'dryRun'])
        args = ParsedArgs(directorySrc=self.dirSrc,
                          directoryDst=self.dirDst,
                          directoryTmp=self.dirTmp,
                          dryRun=True)
        events = []
        events.append(
            ScheduledEvent(name='Alegria',
                           hour=6,
                           minute=30,
                           second=0,
                           PM=True,
                           duration='1:35:00'))
        events.append(
            ScheduledEvent(name='Footwork',
                           hour=8,
                           minute=00,
                           second=0,
                           PM=True,
                           duration='1:05:00'))
        events.append(
            ScheduledEvent(name='Ritmo',
                           hour=9,
                           minute=00,
                           second=0,
                           PM=True,
                           duration='1:35:00'))

        segments = []

        segments.append(
            createVideoSegment('/mnt/tmp/Footwork_2', '2018:10:31 20:06:00',
                               1353.352))
        segments.append(
            createVideoSegment('/mnt/tmp/Footwork_3', '2018:10:31 20:28:00',
                               1353.352))
        clippedForRitmo = createVideoSegment('/mnt/tmp/Footwork_1',
                                             '2018:10:31 20:55:00', 1353.352)
        segments.append(clippedForRitmo)

        for s in segments:
            self.fs.create_file(s.filePath)

        scheduler = SegmentScheduler(args.directoryTmp, events)
        dt = datetime.strptime("2018:10:31_07:03:27", "%Y:%m:%d_%H:%M:%S")
        scheduler.set_date(dt)
        ret = scheduler.calculate(segments)

        for team, cutList in ret.items():
            for cut in cutList:
                ret = shouldDelete(cut, events, args)
                if cut.segment == clippedForRitmo:
                    print("asserting: Segment must be deleted:" +
                          cut.cutFilePath + " vs " + str(ret))
                    self.assertTrue(ret)
                else:
                    print("asserting: Segment must not be deleted:" +
                          cut.cutFilePath)
                    self.assertFalse(ret)