started refactoring wrath of Satan from coub_dl.__call__()
This commit is contained in:
		
							
								
								
									
										44
									
								
								coub-dl.py
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								coub-dl.py
									
									
									
									
									
								
							@@ -16,6 +16,7 @@ from argparse import ArgumentParser
 | 
			
		||||
from signal import signal, SIGINT
 | 
			
		||||
from sys import exit
 | 
			
		||||
from copy import deepcopy
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
import utility
 | 
			
		||||
from utility import call_verbose, print_opt, get_output, temporary_directory, yes_no_question, check_dependencies
 | 
			
		||||
 | 
			
		||||
@@ -46,6 +47,7 @@ class coub_dl:
 | 
			
		||||
        self._url = url
 | 
			
		||||
        self._files_dict = files_dict
 | 
			
		||||
        self._directory = directory
 | 
			
		||||
        self._loopdata = namedtuple('loopdata', ('base', 'fraction', 'time', 'file'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def __call__(self):
 | 
			
		||||
@@ -56,30 +58,16 @@ class coub_dl:
 | 
			
		||||
        self.check_downloads()
 | 
			
		||||
        self.fix_video_stream()
 | 
			
		||||
 | 
			
		||||
        # get stream lengths via ffprobe
 | 
			
		||||
        audioLen = coub_dl.get_length(self._files_dict[Stream.AUDIO])
 | 
			
		||||
        videoLen = coub_dl.get_length(self._files_dict[Stream.VIDEO])
 | 
			
		||||
 | 
			
		||||
        # decide which stream needs some looping
 | 
			
		||||
        longer = audioLen if audioLen > videoLen else videoLen
 | 
			
		||||
        shorter = audioLen if audioLen < videoLen else videoLen
 | 
			
		||||
        shorterFile = self._files_dict[Stream.AUDIO] if audioLen < videoLen else self._files_dict[Stream.VIDEO]
 | 
			
		||||
        self._files_dict[File.LOOP] += splitext(shorterFile)[1]
 | 
			
		||||
        self._files_dict[File.FRACTION] += splitext(shorterFile)[1]
 | 
			
		||||
 | 
			
		||||
        # calculate how many times to loop
 | 
			
		||||
        times = longer.total_seconds() / shorter.total_seconds()
 | 
			
		||||
        timesLoop_base = int(floor(times))
 | 
			
		||||
        timesLoop_fraction = times % 1
 | 
			
		||||
        self.calculate_loops()
 | 
			
		||||
 | 
			
		||||
        # write concat helper file for ffmpeg
 | 
			
		||||
        with open(self._files_dict[File.LIST], 'w') as f:
 | 
			
		||||
            for i in range(timesLoop_base):
 | 
			
		||||
                print("file '{}'".format(shorterFile), file=f)
 | 
			
		||||
            for i in range(self._loopdata.base):
 | 
			
		||||
                print("file '{}'".format(self._loopdata.file), file=f)
 | 
			
		||||
            print("file '{}'".format(self._files_dict[File.FRACTION]), file=f)
 | 
			
		||||
 | 
			
		||||
        # loop & mux streams
 | 
			
		||||
        self.loop_shorter_stream(shorter, shorterFile, timesLoop_fraction)
 | 
			
		||||
        self.loop_shorter_stream()
 | 
			
		||||
        self.mux_streams()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -119,9 +107,25 @@ class coub_dl:
 | 
			
		||||
            f.write(bytes(2))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def loop_shorter_stream(self, shorter, shorter_file, loop_fraction):
 | 
			
		||||
    def calculate_loops(self):
 | 
			
		||||
        audioLen = coub_dl.get_length(self._files_dict[Stream.AUDIO])
 | 
			
		||||
        videoLen = coub_dl.get_length(self._files_dict[Stream.VIDEO])
 | 
			
		||||
 | 
			
		||||
        longer = audioLen if audioLen > videoLen else videoLen
 | 
			
		||||
        self._loopdata.time = audioLen if audioLen < videoLen else videoLen
 | 
			
		||||
        self._loopdata.file = self._files_dict[Stream.AUDIO] if audioLen < videoLen else self._files_dict[Stream.VIDEO]
 | 
			
		||||
        self._files_dict[File.LOOP] += splitext(self._loopdata.file)[1]
 | 
			
		||||
        self._files_dict[File.FRACTION] += splitext(self._loopdata.file)[1]
 | 
			
		||||
 | 
			
		||||
        times = longer.total_seconds() / self._loopdata.time.total_seconds()
 | 
			
		||||
        self._loopdata.base = int(floor(times))
 | 
			
		||||
        self._loopdata.fraction = times % 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def loop_shorter_stream(self):
 | 
			
		||||
        # prepare last fractional loop
 | 
			
		||||
        call(('ffmpeg', '-i', shorter_file, '-t', str(loop_fraction * shorter.total_seconds()),
 | 
			
		||||
        call(('ffmpeg', '-i', self._loopdata.file, '-t', str(self._loopdata.fraction *
 | 
			
		||||
                                                             self._loopdata.time.total_seconds()),
 | 
			
		||||
              self._files_dict[File.FRACTION]),
 | 
			
		||||
             stdout=DEVNULL, stderr=DEVNULL)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user