Title 3d picture_frames_4.xml broken to open files images

Bug #1790203 reported by Sefran
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenShot Video Editor
New
Undecided
Unassigned

Bug Description

Architecture : x86_64
model name : Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
Operating System & version: Linux 4.17.17-1-MANJARO #1 SMP PREEMPT Sat Aug 18 14:38:10 UTC 2018 GNU/Linux
Installation Method : pacman/yaourt
Version of Openshot installed : 2.4.2
MLT/melt version : 6.10.0
FFmpeg (i.e.libavcodec) version : n4.0.2
built with gcc 8.2.0 (GCC)
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Blender version : 2.79 (sub 0)

When i whant use title 3d blender_listview_new.py for generate slide of pictures i can't load pictures.

I revolve problem with changing code from openshot interface file openshot_qt/windows/views/blender_listview_new.py.

I had function xml picture for use like this :
file picture_frames_4.xml ->

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE openshot-effect>
<effect>
 <title translatable="True">Picture Frames (4 pictures)</title>
 <description translatable="True">Picture Frames (4 pictures)</description>
 <icon>picture_frames_4.png</icon>
 <category>Video</category>
 <service>picture_frames_4.blend</service>

 <param name="file_name" type="text" title="File Name" description="">
  <default>TitleFileName</default>
 </param>

 <param name="project_files1" type="picture" title="Picture 1 Path" description="">
  <values>
            <value name="/Bad_Path_File/goodpicture.png" num="0"/>
            <value name="/Good_Path_File/badpicture.png" num="1"/>
            <value name="goodpicture.png" num="2"/>
            <value name="/Good_Path_File/goodpicture.png" num="3"/>
            <value name="/Good_Path_File/badpicture.png" num="4"/>
        </values>
        <default></default>
 </param>

    <param name="project_files2" type="picture" title="Picture 2 Path" description="">
  <values>
   <value name="" num=""/>
  </values>
        <default>/Good_Path_File/goodpicture.png</default>
 </param>

    <param name="project_files3" type="picture" title="Picture 3 Path" description="">
  <values>
   <value name="" num=""/>
  </values>
  <default></default>
 </param>

    <param name="project_files4" type="picture" title="Picture 4 Path" description="">
  <values>
   <value name="" num=""/>
  </values>
  <default></default>
 </param>

 <param name="start_frame" type="spinner" title="Start Frame" description="">
  <min>1</min>
  <max>1</max>
  <default>1</default>
 </param>

 <param name="end_frame" type="spinner" title="End Frame" description="">
  <min>230</min>
  <max>230</max>
  <default>230</default>
 </param>

 <!-- SPEED -->
 <param name="animation_speed" type="dropdown" title="Animation Length" description="">
  <values>
   <value name="Default" num="1"/>
   <value name="2X" num="2"/>
   <value name="3X" num="3"/>
   <value name="4X" num="4"/>
   <value name="5X" num="5"/>
  </values>
  <default>1</default>
 </param>
</effect>

file picture_frames_4.py
# OpenShot Video Editor is a program that creates, modifies, and edits video files.
# Copyright (C) 2009 Jonathan Thomas
#
# This file is part of OpenShot Video Editor (http://launchpad.net/openshot/).
#
# OpenShot Video Editor is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenShot Video Editor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenShot Video Editor. If not, see <http://www.gnu.org/licenses/>.

# Import Blender's python API. This only works when the script is being
# run from the context of Blender. Blender contains it's own version of Python
# with this library pre-installed.
import bpy, os, sys
directory = os.path.dirname(bpy.data.filepath)[:-5] + 'scripts/openshot'
if not directory in sys.path:
    sys.path.append(directory)
from debug import print_error
from math import pi, radians
from PIL import Image

# Debug Info:
# ./blender -b test.blend -P demo.py
# -b = background mode
# -P = run a Python script within the context of the project file

# Init all of the variables needed by this script. Because Blender executes
# this script, OpenShot will inject a dictionary of the required parameters
# before this script is executed.
params = {
            'title' : 'Oh Yeah! OpenShot!',
            'extrude' : 0.1,
            'bevel_depth' : 0.02,
            'spacemode' : 'CENTER',
            'text_size' : 1.5,
            'width' : 1.0,
            'fontname' : 'Bfont',

            'color' : [0.8,0.8,0.8],
            'alpha' : 1.0,

            'output_path' : '/tmp/',
            'fps' : 24,
            'quality' : 90,
            'file_format' : 'PNG',
            'color_mode' : 'RGBA',
            'horizon_color' : [0.57, 0.57, 0.57],
            'resolution_x' : 1920,
            'resolution_y' : 1080,
            'resolution_percentage' : 100,
            'start_frame' : 20,
            'end_frame' : 25,
            'animation' : True,
        }

def get_scale_values(filepath):
    """ Calculate the correct scale parameters to display an image with the
    correct height / width ratio in Blender. """
    try :
        img = Image.open(filepath)
    except Exception as E:
        raise ValueError(E)
    img_width, img_height = img.size
    height_ratio = 1.0
    width_ratio = float(img_width) / float(img_height)
    return (height_ratio, width_ratio)

#INJECT_PARAMS_HERE

# The remainder of this script will modify the current Blender .blend project
# file, and adjust the settings. The .blend file is specified in the XML file
# that defines this template in OpenShot.
#----------------------------------------------------------------------------

try:
    # debug
    #print(str(params), file=open("debug.txt", "a"))
    # Split the picture information
    picture1 = params["project_files1"]
    if len(picture1) > 1:
        picture1_scale = get_scale_values(picture1)

    picture2 = params["project_files2"]
    if len(picture2) > 1:
        picture2_scale = get_scale_values(picture1)

    picture3 = params["project_files3"]
    if len(picture3) > 1:
        picture3_scale = get_scale_values(picture1)

    picture4 = params["project_files4"]
    if len(picture4) > 1:
        picture4_scale = get_scale_values(picture1)
    # Modify picture paths
    if len(picture1) > 1:
        bpy.data.objects["Plane.001"].scale.y = picture1_scale[0]
        bpy.data.objects["Plane.001"].scale.x = picture1_scale[1]

        if picture1[3] == "image":
            bpy.data.textures["Texture.002"].image.source = 'FILE'
            bpy.data.textures["Texture.002"].image.filepath = picture1
        else:
            bpy.data.textures["Texture.002"].image.source = 'MOVIE'
            bpy.data.textures["Texture.002"].image.filepath = picture1
            bpy.data.textures["Texture.002"].image_user.use_cyclic = True
            bpy.data.textures["Texture.002"].image_user.frame_duration = 230.0

    if len(picture2) > 1:
        bpy.data.objects["Plane.002"].scale.y = picture2_scale[0]
        bpy.data.objects["Plane.002"].scale.x = picture2_scale[1]

        if picture2[3] == "image":
            bpy.data.textures["Texture.003"].image.source = 'FILE'
            bpy.data.textures["Texture.003"].image.filepath = picture2
        else:
            bpy.data.textures["Texture.003"].image.source = 'MOVIE'
            bpy.data.textures["Texture.003"].image.filepath = picture2
            bpy.data.textures["Texture.003"].image_user.use_cyclic = True
            bpy.data.textures["Texture.003"].image_user.frame_duration = 230.0

    if len(picture3) > 1:
        bpy.data.objects["Plane.003"].scale.y = picture3_scale[0]
        bpy.data.objects["Plane.003"].scale.x = picture3_scale[1]

        if picture3[3] == "image":
            bpy.data.textures["Texture.004"].image.source = 'FILE'
            bpy.data.textures["Texture.004"].image.filepath = picture3
        else:
            bpy.data.textures["Texture.004"].image.source = 'MOVIE'
            bpy.data.textures["Texture.004"].image.filepath = picture3
            bpy.data.textures["Texture.004"].image_user.use_cyclic = True
            bpy.data.textures["Texture.004"].image_user.frame_duration = 230.0

    if len(picture4) > 1:
        bpy.data.objects["Plane.004"].scale.y = picture4_scale[0]
        bpy.data.objects["Plane.004"].scale.x = picture4_scale[1]

        if picture4[3] == "image":
            bpy.data.textures["Texture.005"].image.source = 'FILE'
            bpy.data.textures["Texture.005"].image.filepath = picture4
        else:
            bpy.data.textures["Texture.005"].image.source = 'MOVIE'
            bpy.data.textures["Texture.005"].image.filepath = picture4
            bpy.data.textures["Texture.005"].image_user.use_cyclic = True
            bpy.data.textures["Texture.005"].image_user.frame_duration = 230.0

except Exception as E:
    print_error(sys.exc_info(), str(E))
    print(str(params), file=open("debug.txt", "a"))
else:
    # Set the render options. It is important that these are set
    # to the same values as the current OpenShot project. These
    # params are automatically set by OpenShot
    bpy.context.scene.render.filepath = params["output_path"]
    bpy.context.scene.render.fps = params["fps"]
    #bpy.context.scene.render.quality = params["quality"]
    try:
        bpy.context.scene.render.file_format = params["file_format"]
        bpy.context.scene.render.color_mode = params["color_mode"]
    except:
        bpy.context.scene.render.image_settings.file_format = params["file_format"]
        bpy.context.scene.render.image_settings.color_mode = params["color_mode"]
    bpy.context.scene.render.alpha_mode = params["alpha_mode"]
    bpy.data.worlds[0].horizon_color = params["horizon_color"]
    bpy.context.scene.render.resolution_x = params["resolution_x"]
    bpy.context.scene.render.resolution_y = params["resolution_y"]
    bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
    bpy.context.scene.frame_start = params["start_frame"]
    bpy.context.scene.frame_end = params["end_frame"]

    # Animation Speed (use Blender's time remapping to slow or speed up animation)
    animation_speed = int(params["animation_speed"]) # time remapping multiplier
    new_length = int(params["end_frame"]) * animation_speed # new length (in frames)
    bpy.context.scene.frame_end = new_length
    bpy.context.scene.render.frame_map_old = 1
    bpy.context.scene.render.frame_map_new = animation_speed
    if params["start_frame"] == params["end_frame"]:
        bpy.context.scene.frame_start = params["end_frame"]
        bpy.context.scene.frame_end = params["end_frame"]
finally:
    # Render the current animation to the params["output_path"] folder
    bpy.ops.render.render(animation=params["animation"])

Tags: patch
Revision history for this message
Sefran (sefran007) wrote :

file picture_frames_4.xml

Revision history for this message
Sefran (sefran007) wrote :

File picture_frames_4.py

Revision history for this message
Sefran (sefran007) wrote :

Better patch with correct some bugs

Revision history for this message
Sefran (sefran007) wrote :

I think is the last patch :-)

I test all cases :

 <param name="project_files1" type="picture" title="Picture 1 Path" description="">
        <values>
            <value name="" num=""/>
        </values>
        <default>/good_path/filegood.png</default>
    </param>

    <param name="project_files2" type="picture" title="Picture 2 Path" description="">
        <values>
            <value name="" num=""/>
        </values>
        <default>/good_path/badfile.png</default>
 </param>

    <param name="project_files3" type="picture" title="Picture 3 Path" description="">
        <values>
            <value name="/good_path/bidon.png" num="0"/>
            <value name="bad_relative_path/filegood.png" num="1"/>
            <value name="filegood.png" num="2"/>
            <value name="/good_path/filegood.png" num="3"/>
            <value name="/good_path/badfile.png" num="4"/>
        </values>
        <default></default>
 </param>

    <param name="project_files4" type="picture" title="Picture 4 Path" description="">
        <values>
            <value name="/good_path/badfile.png" num="0"/>
            <value name="bad_relative_path/filegood.png" num="1"/>
            <value name="filegood.png" num="2"/>
            <value name="/filegood.png" num="3"/>
            <value name="/good_path/badfile.png" num="4"/>
        </values>
        <default></default>
    </param>

    <param name="project_files5" type="picture" title="Picture 5 Path" description="">
        <values>
            <value name="good_relative_path/filegood.png" num="0"/>
        </values>
        <default>/good_path/badfile.png</default>
    </param>

    <param name="project_files6" type="picture" title="Picture 6 Path" description="">
        <values>
            <value name="good_relative_path/badfile.png" num="0"/>
        </values>
        <default>/good_path/badfile.png</default>
    </param>

    <param name="project_files7" type="picture" title="Picture 7 Path" description="">
        <values>
            <value name="" num=""/>
        </values>
        <default></default>
    </param>

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.