Title 3d picture_frames_4.xml broken to open files images

Bug #1790203 reported by Sefran on 2018-08-31
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenShot Video Editor
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"])

Sefran (sefran007) wrote :

file picture_frames_4.xml

Sefran (sefran007) wrote :

File picture_frames_4.py

Sefran (sefran007) wrote :

Better patch with correct some bugs

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  Edit
Everyone can see this information.

Other bug subscribers