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