def split(self, video_id: str, crop_start: float = 0, crop_end: float = 0): input_file_path = Path( self.input_path, "{vid}.{ext}".format(vid=video_id, ext=self.extension)) cropped_path = self.output_path / "{vid}.{ext}".format( vid=video_id, ext=self.extension) if input_file_path.exists(): # Audio if self.extension == "mp3" and self.should_crop(cropped_path): clip = AudioFileClip(str(input_file_path.absolute())) if crop_start is not 0 or crop_end is not 0: clip = clip.subclip(crop_start, crop_end) if clip.audio: clip.audio.write_audiofile(str(cropped_path.absolute())) clip.close() elif self.extension == "mp4" and self.should_crop(cropped_path): clip = VideoFileClip(str(input_file_path.absolute())) if crop_start is not 0 or crop_end is not 0: clip = clip.subclip(crop_start, crop_end) if clip: clip.write_videofile(str(cropped_path.absolute())) clip.close() else: # logger.warning('Failed to find file from: %s', input_file_path) pass
def download(self, directory): bitrate = str(int(self.stream.bitrate / 1000)) + "k" url = self.stream.url extension = ".mp3" if self.onlyAudio else ".mp4" finalPath = os.path.join(directory, sanitizeFilename(self.name) + extension) clip = AudioFileClip(url) if self.onlyAudio else VideoFileClip(url) if self.stream.mediaType == "V": audioClip = AudioFileClip(self.audioStream.url) clip = clip.set_audio(audioClip) if self.volumeMultiplier != 0: newVolume = ( 1 + self.volumeMultiplier / 100 )**2 if self.volumeMultiplier < 0 else self.volumeMultiplier / 5 clip = clip.volumex(newVolume) if self.cut: # Clip the video low = self.lowCut high = self.highCut if low < 0: low = 0 if high > clip.end: high = clip.end clip = clip.subclip(low, high) # Save as final path name if self.onlyAudio: clip.write_audiofile(finalPath, bitrate=bitrate) self.applyID3Tags(finalPath) else: clip.write_videofile(finalPath, threads=NUM_THREADS) clip.close() elif self.onlyAudio: clip.write_audiofile(finalPath, bitrate=bitrate) clip.close() self.applyID3Tags(finalPath) else: clip.write_videofile(finalPath, threads=NUM_THREADS) clip.close() try: clip.close() except: pass return finalPath