def render_single_track_transition_clip(transition_producer, encoding_option_index, quality_option_index, file_ext, transition_render_complete_cb, window_text): # Set render complete callback to availble render stop callback using global variable global transition_render_done_callback transition_render_done_callback = transition_render_complete_cb # Profile profile = PROJECT().profile folder = editorpersistance.prefs.render_folder file_name = md5.new(str(os.urandom(32))).hexdigest() write_file = folder + "/"+ file_name + file_ext # Render consumer consumer = renderconsumer.get_render_consumer_for_encoding_and_quality(write_file, profile, encoding_option_index, quality_option_index) # start and end frames start_frame = 0 end_frame = transition_producer.get_length() - 1 # Launch render # TODO: fix naming this isn't motion renderer global motion_renderer, motion_progress_update motion_renderer = renderconsumer.FileRenderPlayer(write_file, transition_producer, consumer, start_frame, end_frame) motion_renderer.start() title = _("Rendering Transition Clip") progress_bar = Gtk.ProgressBar() dialog = rendergui.clip_render_progress_dialog(_transition_render_stop, title, window_text, progress_bar, gui.editor_window.window) motion_progress_update = renderconsumer.ProgressWindowThread(dialog, progress_bar, motion_renderer, _transition_render_stop) motion_progress_update.start()
def render_single_track_transition_clip(transition_producer, encoding_option_index, quality_option_index, file_ext, transition_render_complete_cb, window_text): # Set render complete callback to availble render stop callback using global variable global transition_render_done_callback transition_render_done_callback = transition_render_complete_cb # Profile profile = PROJECT().profile folder = editorpersistance.prefs.render_folder file_name = md5.new(str(os.urandom(32))).hexdigest() write_file = folder + "/"+ file_name + file_ext # Render consumer consumer = renderconsumer.get_render_consumer_for_encoding_and_quality(write_file, profile, encoding_option_index, quality_option_index) # start and end frames start_frame = 0 end_frame = transition_producer.get_length() - 1 # Launch render # TODO: fix naming this isn't motion renderer global motion_renderer, motion_progress_update motion_renderer = renderconsumer.FileRenderPlayer(write_file, transition_producer, consumer, start_frame, end_frame) motion_renderer.start() title = _("Rendering Transition Clip") progress_bar = Gtk.ProgressBar() dialog = rendergui.clip_render_progress_dialog(_transition_render_stop, title, window_text, progress_bar, gui.editor_window.window) motion_progress_update = renderconsumer.ProgressWindowThread(dialog, progress_bar, motion_renderer, _transition_render_stop) motion_progress_update.start()
def get_render_consumer(): file_path = get_file_path() if file_path == None: return None profile = get_current_profile() if widgets.render_type_panel.type_combo.get_active() == 1: # Preset encodings encoding_option = renderconsumer.non_user_encodings[ widgets.render_type_panel.presets_selector.widget.get_active() ] if encoding_option.type != "img_seq": consumer = renderconsumer.get_render_consumer_for_encoding(file_path, profile, encoding_option) else: # Image Sequence rendering consumers need to be created a bit differently consumer = renderconsumer.get_img_seq_render_consumer(file_path, profile, encoding_option) return consumer if widgets.args_panel.use_args_check.get_active() == False: # Using options comboboxes encoding_option_index = widgets.encoding_panel.encoding_selector.widget.get_active() quality_option_index = widgets.encoding_panel.quality_selector.widget.get_active() consumer = renderconsumer.get_render_consumer_for_encoding_and_quality( file_path, profile, encoding_option_index, quality_option_index ) else: buf = widgets.args_panel.opts_view.get_buffer() consumer, error = renderconsumer.get_render_consumer_for_text_buffer(file_path, profile, buf) if error != None: dialogutils.warning_message("FFMPeg Args Error", error, gui.editor_window.window) return None return consumer
def run(self): self.start_time = time.monotonic() profile = mltprofiles.get_profile(self.profile_desc) motion_producer = mlt.Producer( profile, None, str("timewarp:" + str(self.speed) + ":" + str(self.source_path))) # Create tractor and track to get right length tractor = mlt.Tractor() multitrack = tractor.multitrack() track0 = mlt.Playlist() multitrack.connect(track0, 0) track0.insert(motion_producer, 0, 0, motion_producer.get_length() - 1) consumer = renderconsumer.get_render_consumer_for_encoding_and_quality( self.write_file, profile, self.encoding_option_index, self.quality_option_index) # start and end frames, renderer stop behaviour start_frame = self.start_frame end_frame = self.end_frame wait_for_producer_stop = True if self.render_full_range == False: wait_for_producer_stop = False # consumer wont stop automatically and needs to stopped explicitly # Launch render self.render_player = renderconsumer.FileRenderPlayer( self.write_file, tractor, consumer, start_frame, end_frame) self.render_player.wait_for_producer_end_stop = False self.render_player.start() while self.render_player.stopped == False: self.check_abort_requested() if self.abort == True: self.render_player.shutdown() return fraction = self.render_player.get_render_fraction() self.render_update(fraction) time.sleep(0.3) # Write out completed flag file. ccrutils.write_completed_message()
def get_render_consumer(): file_path = get_file_path() if file_path == None: return None profile = get_current_profile() if widgets.render_type_panel.type_combo.get_active() == 1: # Preset encodings encoding_option = renderconsumer.non_user_encodings[widgets.render_type_panel.presets_selector.widget.get_active()] if encoding_option.type != "img_seq": consumer = renderconsumer.get_render_consumer_for_encoding(file_path, profile, encoding_option) else: # Image Sequence rendering consumers need to be created a bit differently consumer = renderconsumer.get_img_seq_render_consumer(file_path, profile, encoding_option) return consumer if widgets.args_panel.use_args_check.get_active() == False: # Using options comboboxes encoding_option_index = widgets.encoding_panel.encoding_selector.widget.get_active() quality_option_index = widgets.encoding_panel.quality_selector.widget.get_active() consumer = renderconsumer.get_render_consumer_for_encoding_and_quality( file_path, profile, encoding_option_index, quality_option_index) else: buf = widgets.args_panel.opts_view.get_buffer() consumer, error = renderconsumer.get_render_consumer_for_text_buffer(file_path, profile, buf) if error != None: dialogutils.warning_message("FFMPeg Args Error", error, gui.editor_window.window) return None return consumer
def _render_reverse_clip_dialog_callback(dialog, response_id, fb_widgets, media_file): if response_id == Gtk.ResponseType.ACCEPT: # speed, filename folder speed = float(int(fb_widgets.hslider.get_value())) / 100.0 file_name = fb_widgets.file_name.get_text() filenames = fb_widgets.out_folder.get_filenames() folder = filenames[0] write_file = folder + "/"+ file_name + fb_widgets.extension_label.get_text() if os.path.exists(write_file): primary_txt = _("A File with given path exists!") secondary_txt = _("It is not allowed to render Motion Files with same paths as existing files.\nSelect another name for file.") dialogutils.warning_message(primary_txt, secondary_txt, dialog) return # Profile profile_index = fb_widgets.out_profile_combo.get_active() if profile_index == 0: # project_profile is first selection in combo box profile = PROJECT().profile else: profile = mltprofiles.get_profile_for_index(profile_index - 1) # Render consumer properties encoding_option_index = fb_widgets.encodings_cb.get_active() quality_option_index = fb_widgets.quality_cb.get_active() # Range range_selection = fb_widgets.render_range.get_active() dialog.destroy() # Create motion producer source_path = media_file.path if media_file.is_proxy_file == True: source_path = media_file.second_file_path motion_producer = mlt.Producer(profile, None, str("timewarp:" + str(speed) + ":" + str(source_path))) mltrefhold.hold_ref(motion_producer) # Create sequence and add motion producer into it seq = sequence.Sequence(profile) seq.create_default_tracks() track = seq.tracks[seq.first_video_index] track.append(motion_producer, 0, motion_producer.get_length() - 1) print "motion clip render starting..." consumer = renderconsumer.get_render_consumer_for_encoding_and_quality(write_file, profile, encoding_option_index, quality_option_index) # start and end frames start_frame = 0 end_frame = motion_producer.get_length() - 1 wait_for_producer_stop = True if range_selection == 1: start_frame = int(float(media_file.length - media_file.mark_out - 1) * (1.0 / -speed)) end_frame = int(float(media_file.length - media_file.mark_out + (media_file.mark_out - media_file.mark_in) + 1) * (1.0 / -speed)) + int(1.0 / -speed) if end_frame > motion_producer.get_length() - 1: end_frame = motion_producer.get_length() - 1 if start_frame < 0: start_frame = 0 wait_for_producer_stop = False # consumer wont stop automatically and needs to stopped explicitly # Launch render global motion_renderer, motion_progress_update motion_renderer = renderconsumer.FileRenderPlayer(write_file, seq.tractor, consumer, start_frame, end_frame) motion_renderer.wait_for_producer_end_stop = wait_for_producer_stop motion_renderer.start() title = _("Rendering Reverse Clip") text = "<b>Motion Clip File: </b>" + write_file progress_bar = Gtk.ProgressBar() dialog = rendergui.clip_render_progress_dialog(_FB_render_stop, title, text, progress_bar, gui.editor_window.window) motion_progress_update = renderconsumer.ProgressWindowThread(dialog, progress_bar, motion_renderer, _REVERSE_render_stop) motion_progress_update.start() else: dialog.destroy()
def _render_frame_buffer_clip_dialog_callback(dialog, response_id, fb_widgets, media_file): if response_id == Gtk.ResponseType.ACCEPT: # speed, filename folder speed = float(int(fb_widgets.hslider.get_value())) / 100.0 file_name = fb_widgets.file_name.get_text() filenames = fb_widgets.out_folder.get_filenames() folder = filenames[0] write_file = folder + "/"+ file_name + fb_widgets.extension_label.get_text() if os.path.exists(write_file): primary_txt = _("A File with given path exists!") secondary_txt = _("It is not allowed to render Motion Files with same paths as existing files.\nSelect another name for file.") dialogutils.warning_message(primary_txt, secondary_txt, dialog) return # Profile profile_index = fb_widgets.out_profile_combo.get_active() if profile_index == 0: # project_profile is first selection in combo box profile = PROJECT().profile else: profile = mltprofiles.get_profile_for_index(profile_index - 1) # Render consumer properties encoding_option_index = fb_widgets.encodings_cb.get_active() quality_option_index = fb_widgets.quality_cb.get_active() # Range range_selection = fb_widgets.render_range.get_active() dialog.destroy() # Create motion producer fr_path = "framebuffer:" + media_file.path + "?" + str(speed) motion_producer = mlt.Producer(profile, None, str(fr_path)) mltrefhold.hold_ref(motion_producer) # Create sequence and add motion producer into it seq = sequence.Sequence(profile) seq.create_default_tracks() track = seq.tracks[seq.first_video_index] track.append(motion_producer, 0, motion_producer.get_length() - 1) print "motion clip render starting..." consumer = renderconsumer.get_render_consumer_for_encoding_and_quality(write_file, profile, encoding_option_index, quality_option_index) # start and end frames start_frame = 0 end_frame = motion_producer.get_length() - 1 wait_for_producer_stop = True if range_selection == 1: start_frame = int(float(media_file.mark_in) * (1.0 / speed)) end_frame = int(float(media_file.mark_out + 1) * (1.0 / speed)) + int(1.0 / speed) #+ 40 # I'm unable to get this frame perfect. # +40 is to make sure rendering stops after mark out. if end_frame > motion_producer.get_length() - 1: end_frame = motion_producer.get_length() - 1 wait_for_producer_stop = False # consumer wont stop automatically and needs to stopped explicitly # Launch render global motion_renderer, motion_progress_update motion_renderer = renderconsumer.FileRenderPlayer(write_file, seq.tractor, consumer, start_frame, end_frame) motion_renderer.wait_for_producer_end_stop = wait_for_producer_stop motion_renderer.start() title = _("Rendering Motion Clip") text = "<b>Motion Clip File: </b>" + write_file progress_bar = Gtk.ProgressBar() dialog = rendergui.clip_render_progress_dialog(_FB_render_stop, title, text, progress_bar, gui.editor_window.window) motion_progress_update = renderconsumer.ProgressWindowThread(dialog, progress_bar, motion_renderer, _FB_render_stop) motion_progress_update.start() else: dialog.destroy()