Ejemplo n.º 1
0
    def run(self):

        proxy_w, proxy_h = _get_proxy_dimensions(
            self.proxy_profile,
            editorstate.PROJECT().proxy_data.size)
        enc_index = editorstate.PROJECT().proxy_data.encoding

        proxy_render_items = []
        for media_file in self.files_to_render:
            if media_file.type != appconsts.IMAGE_SEQUENCE:

                proxy_encoding = renderconsumer.proxy_encodings[enc_index]
                proxy_file_path = media_file.create_proxy_path(
                    proxy_w, proxy_h, proxy_encoding.extension)

                # Bit rates for proxy files are counted using 2500kbs for
                # PAL size image as starting point.
                pal_pix_count = 720.0 * 576.0
                pal_proxy_rate = 2500.0
                proxy_pix_count = float(proxy_w * proxy_h)
                proxy_rate = pal_proxy_rate * (proxy_pix_count / pal_pix_count)
                proxy_rate = int(
                    proxy_rate / 100) * 100  # Make proxy rate even hundred
                # There are no practical reasons to have bitrates lower than 500kbs.
                if proxy_rate < 500:
                    proxy_rate = 500

                item_data = ProxyRenderItemData(
                    media_file.id, proxy_w, proxy_h, enc_index,
                    proxy_file_path, proxy_rate, media_file.path,
                    self.proxy_profile.description(), None)
            else:

                asset_folder, asset_file_name = os.path.split(media_file.path)
                lookup_filename = utils.get_img_seq_glob_lookup_name(
                    asset_file_name)
                lookup_path = asset_folder + "/" + lookup_filename

                proxy_file_path = media_file.create_proxy_path(
                    proxy_w, proxy_h, None)

                # media_file.path, proxy_file_path, proxy_w, proxy_h, lookup_path
                item_data = ProxyRenderItemData(
                    media_file.id, proxy_w, proxy_h, -1,
                    proxy_file_path, -1, media_file.path,
                    self.proxy_profile.description(), lookup_path)

            proxy_render_items.append(item_data)

        Gdk.threads_enter()

        for proxy_render_data_item in proxy_render_items:
            session_id = hashlib.md5(str(
                os.urandom(32)).encode('utf-8')).hexdigest()
            job_queue_object = jobs.ProxyRenderJobQueueObject(
                session_id, proxy_render_data_item)
            job_queue_object.add_to_queue()

        Gdk.threads_leave()
Ejemplo n.º 2
0
    def _check_img_seq_existance(self, orig_path):
        asset_folder, asset_file_name = os.path.split(orig_path)
        lookup_filename = utils.get_img_seq_glob_lookup_name(asset_file_name)
        lookup_path = asset_folder + "/" + lookup_filename          
        listing = glob.glob(lookup_path)

        if len(listing) > 0:
            self.orig_file_exists = True
        else:
            self.orig_file_exists = False
Ejemplo n.º 3
0
    def _check_img_seq_existance(self, orig_path):
        asset_folder, asset_file_name = os.path.split(orig_path)
        lookup_filename = utils.get_img_seq_glob_lookup_name(asset_file_name)
        lookup_path = asset_folder + "/" + lookup_filename
        listing = glob.glob(lookup_path)

        if len(listing) > 0:
            self.orig_file_exists = True
        else:
            self.orig_file_exists = False
Ejemplo n.º 4
0
def get_img_seq_relative_path(project_file_path, asset_path):
    name = os.path.basename(asset_path)
    _show_msg(_("Relative file search for ")  + name + "...", delay=0.0)
    matches = []
    asset_folder, asset_file_name = os.path.split(asset_path)
    look_up_file_name = utils.get_img_seq_glob_lookup_name(asset_file_name)
    
    project_folder, project_file_name =  os.path.split(project_file_path)
    
    for root, dirnames, filenames in os.walk(project_folder):
        look_up_path = root + "/" + look_up_file_name
        listing = glob.glob(look_up_path)
        if len(listing) > 0:
            return root + "/" + asset_file_name

    return NOT_FOUND # no relative path found
Ejemplo n.º 5
0
    def _create_img_seq_proxy(self, media_file, proxy_w, proxy_h, items,
                              start):
        now = time.time()
        elapsed = now - start
        Gdk.threads_enter()
        progress_window.update_render_progress(0.0, media_file.name, items,
                                               len(self.files_to_render),
                                               elapsed)
        Gdk.threads_leave()

        asset_folder, asset_file_name = os.path.split(media_file.path)
        lookup_filename = utils.get_img_seq_glob_lookup_name(asset_file_name)
        lookup_path = asset_folder + "/" + lookup_filename

        proxy_file_path = media_file.create_proxy_path(proxy_w, proxy_h, None)
        copyfolder, copyfilename = os.path.split(proxy_file_path)
        if not os.path.isdir(copyfolder):
            os.makedirs(copyfolder)

        listing = glob.glob(lookup_path)
        size = proxy_w, proxy_h
        done = 0
        for orig_path in listing:
            orig_folder, orig_file_name = os.path.split(orig_path)

            try:
                im = Image.open(orig_path)
                im.thumbnail(size, Image.ANTIALIAS)
                im.save(copyfolder + "/" + orig_file_name, "PNG")
            except IOError:
                print "proxy img seq frame failed for '%s'" % orig_path

            done = done + 1

            frac = float(done) / float(len(listing))
            now = time.time()
            elapsed = now - start

            if done % 5 == 0:
                Gdk.threads_enter()
                progress_window.update_render_progress(
                    frac, media_file.name, items, len(self.files_to_render),
                    elapsed)
                Gdk.threads_leave()

        media_file.add_proxy_file(proxy_file_path)
Ejemplo n.º 6
0
def get_img_seq_relative_path(project_file_path, asset_path):
    name = os.path.basename(asset_path)
    _show_msg("Relative file search for "  + name + "...", delay=0.0)
    matches = []
    asset_folder, asset_file_name = os.path.split(asset_path)
    look_up_file_name = utils.get_img_seq_glob_lookup_name(asset_file_name)
    
    project_folder, project_file_name =  os.path.split(project_file_path)
    
    for root, dirnames, filenames in os.walk(project_folder):
        look_up_path = root + "/" + look_up_file_name
        listing = glob.glob(look_up_path)
        if len(listing) > 0:
            #print "relative path for: ", asset_file_name
            return root + "/" + asset_file_name

    return NOT_FOUND # no relative path found
Ejemplo n.º 7
0
def get_img_seq_media_path(path, load_file_path):
    asset_folder, asset_file_name = os.path.split(path)
    
    look_up_file = asset_folder + "/" + utils.get_img_seq_glob_lookup_name(asset_file_name)
    listing = glob.glob(look_up_file)

    if editorpersistance.prefs.media_load_order == appconsts.LOAD_ABSOLUTE_FIRST:
        if len(listing) > 0:
            # Absolute path file present
            return path
        # Look for relative path
        path = get_img_seq_relative_path(load_file_path, path)
    # Load order relative, absolute
    elif editorpersistance.prefs.media_load_order == appconsts.LOAD_RELATIVE_FIRST:
        abspath = path
        path = get_img_seq_relative_path(load_file_path, path)
        if path == NOT_FOUND:
            path = abspath
        return path
    return path
Ejemplo n.º 8
0
def get_img_seq_media_path(path, load_file_path):
    asset_folder, asset_file_name = os.path.split(path)
    
    look_up_file = asset_folder + "/" + utils.get_img_seq_glob_lookup_name(asset_file_name)
    listing = glob.glob(look_up_file)

    if editorpersistance.prefs.media_load_order == appconsts.LOAD_ABSOLUTE_FIRST:
        if len(listing) > 0:
            # Absolute path file present
            return path
        # Look for relative path
        path = get_img_seq_relative_path(load_file_path, path)
    # Load order relative, absolute
    elif editorpersistance.prefs.media_load_order == appconsts.LOAD_RELATIVE_FIRST:
        abspath = path
        path = get_img_seq_relative_path(load_file_path, path)
        if path == NOT_FOUND:
            path = abspath
        return path
    return path
Ejemplo n.º 9
0
    def _create_img_seq_proxy(self, media_file, proxy_w, proxy_h, items, start):
        now = time.time()
        elapsed = now - start
        gtk.gdk.threads_enter()
        progress_window.update_render_progress(0.0, media_file.name, items, len(self.files_to_render), elapsed)
        gtk.gdk.threads_leave()

        asset_folder, asset_file_name = os.path.split(media_file.path)
        lookup_filename = utils.get_img_seq_glob_lookup_name(asset_file_name)
        lookup_path = asset_folder + "/" + lookup_filename

        proxy_file_path = media_file.create_proxy_path(proxy_w, proxy_h, None)
        copyfolder, copyfilename = os.path.split(proxy_file_path)
        if not os.path.isdir(copyfolder):
            os.makedirs(copyfolder)
        
        listing = glob.glob(lookup_path)
        size = proxy_w, proxy_h
        done = 0
        for orig_path in listing:
            orig_folder, orig_file_name = os.path.split(orig_path)

            try:
                im = Image.open(orig_path)
                im.thumbnail(size, Image.ANTIALIAS)
                im.save(copyfolder + "/" + orig_file_name, "PNG")
            except IOError:
                print "proxy img seq frame failed for '%s'" % orig_path

            done = done + 1
        
            frac = float(done) / float(len(listing))
            now = time.time()
            elapsed = now - start
        
            if done % 5 == 0:
                gtk.gdk.threads_enter()
                progress_window.update_render_progress(frac, media_file.name, items, len(self.files_to_render), elapsed)
                gtk.gdk.threads_leave()
        
        media_file.add_proxy_file(proxy_file_path)
Ejemplo n.º 10
0
    def run(self):
        copy_txt = _("Copying project media assets")
        project_txt = _("Saving project file")
        
        Gdk.threads_enter()
        dialog = dialogs.save_snaphot_progess(copy_txt, project_txt)
        Gdk.threads_leave()
        
        media_folder = self.root_folder_path +  "media/"

        d = os.path.dirname(media_folder)
        os.mkdir(d)

        asset_paths = {}

        # Copy media files
        for idkey, media_file in PROJECT().media_files.items():
            if media_file.type == appconsts.PATTERN_PRODUCER:
                continue

            # Copy asset file and fix path
            directory, file_name = os.path.split(media_file.path)
            
            # Message
            Gdk.threads_enter()
            dialog.media_copy_info.set_text(copy_txt + "... " +  file_name)
            Gdk.threads_leave()
            
            # Other media types than image sequences
            if media_file.type != appconsts.IMAGE_SEQUENCE:
                media_file_copy = media_folder + file_name
                if media_file_copy in asset_paths: # Create different filename for files 
                                                   # that have same filename but different path
                    file_name = get_snapshot_unique_name(media_file.path, file_name)
                    media_file_copy = media_folder + file_name
                    
                shutil.copyfile(media_file.path, media_file_copy)
                asset_paths[media_file.path] = media_file_copy
            else: # Image Sequences
                asset_folder, asset_file_name =  os.path.split(media_file.path)
                lookup_filename = utils.get_img_seq_glob_lookup_name(asset_file_name)
                lookup_path = asset_folder + "/" + lookup_filename
                copyfolder = media_folder.rstrip("/") + asset_folder + "/"
                os.makedirs(copyfolder)
                listing = glob.glob(lookup_path)
                for orig_path in listing:
                    orig_folder, orig_file_name = os.path.split(orig_path)
                    shutil.copyfile(orig_path, copyfolder + orig_file_name)

        # Copy clip producers paths. This is needed just for rendered files as clips
        # from media file objects should be covered as media files can't be destroyed 
        # if a clip made from them exists...I think
        for seq in PROJECT().sequences:
            for track in seq.tracks:
                for i in range(0, len(track.clips)):
                    clip = track.clips[i]
                    
                    # Image sequence files can't be rendered files
                    if clip.is_blanck_clip == False and clip.media_type == appconsts.IMAGE_SEQUENCE:
                        continue

                    # Only producer clips are affected
                    if (clip.is_blanck_clip == False and (clip.media_type != appconsts.PATTERN_PRODUCER)):
                        directory, file_name = os.path.split(clip.path)
                        clip_file_copy = media_folder + file_name
                        if not os.path.isfile(clip_file_copy):
                            directory, file_name = os.path.split(clip.path)
                            Gdk.threads_enter()
                            dialog.media_copy_info.set_text(copy_txt + "... " +  file_name)
                            Gdk.threads_leave()
                            shutil.copyfile(clip.path, clip_file_copy) # only rendered files are copied here
                            asset_paths[clip.path] = clip_file_copy # This stuff is already md5 hashed, so no duplicate problems here
            for compositor in seq.compositors:
                if compositor.type_id == "##wipe": # Wipe may have user luma and needs to be looked up relatively
                    copy_comp_resourse_file(compositor, "resource", media_folder)
                if compositor.type_id == "##region": # Wipe may have user luma and needs to be looked up relatively
                    copy_comp_resourse_file(compositor, "composite.luma", media_folder)

        Gdk.threads_enter()
        dialog.media_copy_info.set_text(copy_txt + "    " +  u"\u2713")
        Gdk.threads_leave()
        
        save_path = self.root_folder_path + self.project_name

        persistance.snapshot_paths = asset_paths
        persistance.save_project(PROJECT(), save_path)
        persistance.snapshot_paths = None

        Gdk.threads_enter()
        dialog.saving_project_info.set_text(project_txt + "    " +  u"\u2713")
        Gdk.threads_leave()

        time.sleep(2)

        Gdk.threads_enter()
        dialog.destroy()
        Gdk.threads_leave()
        
        project_event = projectdata.ProjectEvent(projectdata.EVENT_SAVED_SNAPSHOT, self.root_folder_path)
        PROJECT().events.append(project_event)

        Gdk.threads_enter()
        projectinfogui.update_project_info()
        Gdk.threads_leave()