def firstClipFileDialog(self): options = QFileDialog.Options() fileName, _ = QFileDialog.getOpenFileName(self,"Select The First Clip", f"{current_path}/FirstClips","All Files (*);;MP4 Files (*.mp4)", options=options) if fileName: # name = len(fileName.split("/")) # self.firstClipPath = (fileName.split("/")[name-1]) try: vid = cv2.VideoCapture(fileName) height = vid.get(cv2.CAP_PROP_FRAME_HEIGHT) width = vid.get(cv2.CAP_PROP_FRAME_WIDTH) if int(width) != 1920 or int(height) != 1080: self.uploadFail("Incorrect resolution for file %s.\n Resolution was %sx%s, required 1920x1080" % (fileName, width, height)) else: self.firstClipPath = fileName name = len(self.firstClipPath.split("/")) new_name = (self.firstClipPath.split("/")[name-1]).replace(".mp4", "") self.firstClipCred.setText(new_name) firstClip = scriptwrapper.DownloadedTwitchClipWrapper("", "", "", "", None) firstClip.streamer_name = new_name firstClip.mp4 = self.firstClipPath firstClip.upload = True media_info = MediaInfo.parse(self.firstClipPath) duration = media_info.tracks[0].duration / 1000 firstClip.vid_duration = float(duration) self.videoWrapper.scriptWrapper.addClipAtStart(firstClip) self.populateTreeWidget() self.chooseFirstClip.setText("Reselect First Clip") except Exception as e: self.uploadFail("Error occured uploading file \n %s" % (e))
def requestClipsWithoutClips(game, amount, clips, window): ids = [] for clip in clips: ids.append(str(clip.id)) r = requests.get(f'http://{httpaddress}/getclipswithoutids', json={ "game": game, "amount": int(amount), "ids": ids }, headers={'Accept-Encoding': None}) clips = r.json()["clips"] clipwrappers = [] for clip in clips: id = clip["id"] mp4 = clip["mp4"] streamer = clip["author_name"] duration = clip["duration"] clip_title = clip["clip_title"] diggCount = clip["diggCount"] shareCount = clip["shareCount"] playCount = clip["playCount"] commentCount = clip["commentCount"] clipwrappers.append( scriptwrapper.DownloadedTwitchClipWrapper(id, streamer, clip_title, mp4, duration, diggCount, shareCount, playCount, commentCount)) window.set_max_progres_bar.emit(len(clips)) ftp = ftplib.FTP() ftp.connect(settings.address, settings.FTP_PORT) ftp.login(settings.FTP_USER, settings.FTP_PASSWORD) ftp.cwd('/VideoFiles/') bad_indexes = [] for i, clip in enumerate(clipwrappers): try: mp4 = clip.mp4 print("Downloading %s/%s clips %s" % (i + 1, len(clipwrappers), mp4)) with open("TempClips/%s.mp4" % mp4, 'wb') as file: ftp.retrbinary('RETR %s.mp4' % mp4, file.write, blocksize=settings.block_size) window.update_progress_bar.emit(i + 1) except Exception as e: bad_indexes.append(i) print("Failed to download clip, will remove later.") print(e) for i in sorted(bad_indexes, reverse=True): del clipwrappers[i] vidwrapper = scriptwrapper.ScriptWrapper(clipwrappers) window.finished_downloading.emit(vidwrapper)
def exportVideo(self): intervalCheck = True if (self.intervalClipPath is not None and settings.enforceInterval ) or not settings.enforceInterval else False firstClipCheck = True if (self.firstClipPath is not None and settings.enforceFirstClip ) or not settings.enforceFirstClip else False introClipCheck = True if ( self.introClipPath is not None and settings.enforceIntro) or not settings.enforceIntro else False outroClipCheck = True if ( self.outroClipPath is not None and settings.enforceOutro) or not settings.enforceOutro else False if intervalCheck is True and firstClipCheck is True and introClipCheck is True and outroClipCheck is True: self.mediaPlayer.stop() final_clips = self.videoWrapper.scriptWrapper.getFinalClips() with_intro = [] if settings.enforceIntro: self.introClip = scriptwrapper.DownloadedTwitchClipWrapper( "", "", " ", "", None, 0, 0, 0, 0) self.introClip.author_name = None self.introClip.mp4 = self.introClipPath self.introClip.isIntro = True self.introClip.isInterval = False self.introClip.upload = True self.introClip.isUsed = True media_info_intro = MediaInfo.parse(self.introClipPath) duration_intro = media_info_intro.tracks[0].duration / 1000 self.introClip.vid_duration = float(duration_intro) if settings.enforceInterval: self.intervalClip = scriptwrapper.DownloadedTwitchClipWrapper( "", "", " ", "", None, 0, 0, 0, 0) self.intervalClip.author_name = None self.intervalClip.mp4 = self.intervalClipPath self.intervalClip.isInterval = True self.intervalClip.isIntro = False self.intervalClip.upload = True self.intervalClip.isUsed = True media_info_interval = MediaInfo.parse(self.intervalClipPath) duration_interval = media_info_interval.tracks[ 0].duration / 1000 self.intervalClip.vid_duration = float(duration_interval) if settings.enforceOutro: self.outroClip = scriptwrapper.DownloadedTwitchClipWrapper( "", "", " ", "", None, 0, 0, 0, 0) self.outroClip.author_name = None self.outroClip.mp4 = self.outroClipPath self.outroClip.isOutro = True self.outroClip.upload = True self.outroClip.isUsed = True media_info_outro = MediaInfo.parse(self.outroClipPath) duration_outro = media_info_outro.tracks[0].duration / 1000 self.outroClip.vid_duration = float(duration_outro) if self.defaultIntro.isChecked(): self.saveDefaultIntro() if self.defaultInterval.isChecked(): self.saveDefaultInterval() if self.defaultOutro.isChecked(): self.saveDefaultOutro() for i, clip in enumerate(final_clips): with_intro.append(clip) if i == 0: if settings.enforceInterval: with_intro.append(self.intervalClip) if settings.enforceIntro: with_intro.append(self.introClip) if settings.enforceOutro: with_intro.append(self.outroClip) self.videoWrapper.final_clips = with_intro self.clipupload = ClipUploadMenu(self.videoWrapper, self.videoName.text()) self.clipupload.show() else: print("Choose intro clip and first clip")