Example #1
0
    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
Example #3
0
    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