def cut_file_by_cutlist(self, filename, cutlist, program_config_value): """ Returns: cut_video, ac3file, error """ program, program_config_value, ac3file = self.get_program(filename) if program < 0: return None, None, program_config_value # get list of cuts error = cutlist.read_cuts() if error: return None, None, error if not cutlist.cuts_frames: fps, dar, sar, max_frames, ac3_stream, error = self.analyse_mediafile( filename) if not error: cutlist.fps = fps else: return None, None, "Konnte FPS nicht bestimmen: " + error self.log.info("Calculate frame values from seconds.") for start, duration in cutlist.cuts_seconds: cutlist.cuts_frames.append( (start * cutlist.fps, duration * cutlist.fps)) if program == Program.AVIDEMUX: cutter = CutAvidemux(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist( filename, cutlist, program_config_value) if not error and ac3file is not None and self.config.get( 'general', 'merge_ac3s'): return self.mux_ac3(filename, cut_video, ac3file, cutlist) elif program == Program.SMART_MKVMERGE: cutter = CutSmartMkvmerge(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist(filename, cutlist) if not error and ac3file is not None: return cut_video, ac3file, None elif program == Program.VIRTUALDUB: # VIRTUALDUB cutter = CutVirtualdub(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist( filename, cutlist, program_config_value) if not error and ac3file is not None and self.config.get( 'general', 'merge_ac3s'): return self.mux_ac3(filename, cut_video, ac3file, cutlist) else: return None, None, "Schnittprogramm wird nicht unterstützt" if error: return None, None, error else: return cut_video, "", None
def cut_file_by_cutlist(self, filename, cutlist): """ Returns: cut_video, ac3file, error """ program, program_config_value, ac3file = self.get_program(filename) if program < 0: return None, None, program_config_value # get list of cuts error = cutlist.read_cuts() if error: return None, None, error if not cutlist.cuts_frames: fps, dar, sar, max_frames, ac3_stream, error = self.analyse_mediafile(filename) if not error: cutlist.fps = fps else: return None, None, "Konnte FPS nicht bestimmen: " + error print "Calculate frame values from seconds." for start, duration in cutlist.cuts_seconds: cutlist.cuts_frames.append((start * cutlist.fps, duration * cutlist.fps)) if program == Program.AVIDEMUX: cutter = CutAvidemux(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist(filename, cutlist, program_config_value) if not error and ac3file != None and self.config.get('general', 'merge_ac3s'): return self.mux_ac3(filename, cut_video, ac3file, cutlist) elif program == Program.SMART_MKVMERGE: cutter = CutSmartMkvmerge(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist(filename, cutlist) if not error and ac3file != None: return cut_video, ac3file, None elif program == Program.VIRTUALDUB: # VIRTUALDUB cutter = CutVirtualdub(self.app, self.gui) cut_video, error = cutter.cut_file_by_cutlist(filename, cutlist, program_config_value) if not error and ac3file != None and self.config.get('general', 'merge_ac3s'): return self.mux_ac3(filename, cut_video, ac3file, cutlist) else: return None, None, "Schnittprogramm wird nicht unterstützt" if error: return None, None, error else: return cut_video, "", None
def cut_file_manually(self, filename): """ Cuts a file manually with Avidemux or VirtualDub or the CutInterface and gets cuts from possibly created project files (VD) or from output (AD). returns: error_message, cutlist """ global cutlist_error, cuts_frames program, config_value, ac3file = self.get_program(filename, manually=True) format, ac3_file, bframe_delay = self.get_format(filename) fps, dar, sar, max_frames, ac3_stream, error = self.analyse_mediafile( filename) if error: if exists(filename + '.mkv'): fileoperations.remove_file(filename + '.mkv') return "Konnte FPS nicht bestimmen: " + error, None if program < 0: return config_value, None cutlist = cutlists_management.Cutlist() if program == Program.AVIDEMUX: cutter = CutAvidemux(self.app, self.gui) cuts_frames, cutlist_error = cutter.create_cutlist( filename, config_value) elif program == Program.VIRTUALDUB: # VIRTUALDUB cutter = CutVirtualdub(self.app, self.gui) cuts_frames, cutlist_error = cutter.create_cutlist( filename, config_value) if program == Program.CUT_INTERFACE: # looking for latest cutlist, if any p, video_file = os.path.split(filename) cutregex = re.compile("^" + video_file + "\.?(.*).cutlist$") files = os.listdir(p) number = -1 local_cutlist = None # use fallback name in conclusions if there are no local cutlists for f in files: match = cutregex.match(f) if match: self.log.debug("Found local cutlist {}".format( match.group())) if match.group(1) == '' or match.group(1) == 'mkv': res_num = 0 elif "." in match.group(1): res_num = int(match.group(1).split('.')[1]) elif type(eval( match.group(1))) == type(1): # It's a number res_num = int(match.group(1)) else: res_num = 0 self.log.debug("local cutlist res_num: {}".format( match.group(1))) if res_num > number: res_num = number local_cutlist = p + "/" + match.group() ci = CutinterfaceDialog.NewCutinterfaceDialog(self.gui) ci.set_transient_for(self.gui.main_window) ci.set_modal(True) cutlist = ci._run(filename, local_cutlist, self.app) ci.destroy() if cutlist.cuts_frames is None or len(cutlist.cuts_frames) == 0: cutlist_error = "Keine Schnitte angegeben" else: cutlist_error = None else: # complete cutlist for Avidemux & VirtualDub # create cutlist data if cutlist_error is None: cutlist.cuts_frames = cuts_frames cutlist.intended_app = basename(config_value) cutlist.usercomment = 'Mit %s geschnitten' % self.app.app_name cutlist.fps = fps # calculate seconds for start_frame, duration_frames in cuts_frames: cutlist.cuts_seconds.append( (start_frame / fps, duration_frames / fps)) if cutlist_error: return cutlist_error, None else: return None, cutlist
def cut_file_manually(self, filename): """ Cuts a file manually with Avidemux or VirtualDub or the CutInterface and gets cuts from possibly created project files (VD) or from output (AD). returns: error_message, cutlist """ program, config_value, ac3file = self.get_program(filename, manually=True) format, ac3_file, bframe_delay = self.get_format(filename) fps, dar, sar, max_frames, ac3_stream, error = self.analyse_mediafile(filename) if error: if exists(filename+'.mkv'): fileoperations.remove_file(filename+'.mkv') return "Konnte FPS nicht bestimmen: " + error, None if program < 0: return config_value, None cutlist = cutlists_management.Cutlist() if program == Program.AVIDEMUX: cutter = CutAvidemux(self.app, self.gui) cuts_frames, cutlist_error = cutter.create_cutlist(filename, config_value) elif program == Program.VIRTUALDUB: # VIRTUALDUB cutter = CutVirtualdub(self.app, self.gui) cuts_frames, cutlist_error = cutter.create_cutlist(filename, config_value) if program == Program.CUT_INTERFACE: # looking for latest cutlist, if any p, video_file = os.path.split(filename) cutregex = re.compile("^" + video_file + "\.?(.*).cutlist$") files = os.listdir(p) number = -1 local_cutlist = None # use fallback name in conclusions if there are no local cutlists for f in files: match = cutregex.match(f) if match: # print "Found local cutlist %s" % match.group() if match.group(1) == '': res_num = 0 else: res_num = int(match.group(1)) if res_num > number: res_num = number local_cutlist = p + "/" + match.group() ci = CutinterfaceDialog.NewCutinterfaceDialog() cutlist = ci._run(filename , local_cutlist, self.app) ci.destroy() if cutlist.cuts_frames == None or len(cutlist.cuts_frames) == 0: cutlist_error = "Keine Schnitte angegeben" else: cutlist_error = None else: # complete cutlist for Avidemux & VirtualDub # create cutlist data if cutlist_error == None: cutlist.cuts_frames = cuts_frames cutlist.intended_app = basename(config_value) cutlist.usercomment = 'Mit %s geschnitten' %self.app.app_name cutlist.fps = fps # calculate seconds for start_frame, duration_frames in cuts_frames: cutlist.cuts_seconds.append((start_frame / fps, duration_frames / fps)) if cutlist_error: return cutlist_error, None else: return None, cutlist