Whit python,在搅拌器中,在视频序列编辑器中插入一个 EFFECT STRIP 作为 WIPE

Whit python, In blender insert an EFFECT STRIP as WIPE in the VIDEO SEQUENCE EDITOR

在使用视频序列编辑器的 Blender 中,您可以将静止图像(.jpg 或 png)作为图像条插入并创建轮播。

在每个图像/图像条之间,您可以插入一个效果条作为划像,以在图像/图像条之间创建过渡。

结果:

我可以使用 python.

将图像作为 IMAGE STRIP 插入到 VIDEO SEQUENCE EDITOR 中

示例:

我使用以下代码将图像作为 IMAGE STRIP 插入到 VIDEO SEQUENCE EDITOR 中:

import bpy, os

def importar():
    bpy.context.area.type = 'SEQUENCE_EDITOR'
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "000.jpg","name":"000.jpg" }], relative_path=True, show_multiview=False, frame_start=1, frame_end=289, channel=1);
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "001.jpg","name":"001.jpg" }], relative_path=True, show_multiview=False, frame_start=241, frame_end=529, channel=2);
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "002.jpg","name":"002.jpg" }], relative_path=True, show_multiview=False, frame_start=481, frame_end=770, channel=1);
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "003.jpg","name":"003.jpg" }], relative_path=True, show_multiview=False, frame_start=722, frame_end=1012, channel=2);
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "004.jpg","name":"004.jpg" }], relative_path=True, show_multiview=False, frame_start=964, frame_end=1255, channel=1);
    bpy.ops.sequencer.image_strip_add(directory="D:\_webpages\", files=[{"name": "005.jpg","name":"005.jpg" }], relative_path=True, show_multiview=False, frame_start=1207, frame_end=1499, channel=2);

importar()

结果:我在其交替通道和自己的 IMAGE STRIP 中分别插入了几张图像。

图像/图像条之间存在重叠以允许过渡。

现在我想使用 python.

创建一个 EFFECT STRIP 作为 WIPE

手动创建效果条作为擦除,您必须:

a) select 一张图片/带鼠标的图像条

b) 按 shift 键并用鼠标 select 另一个图像/图像条

c) 点击选项 ADD > EFFECT STRIP > WIPE 添加擦除效果

当你select第一张图片/图像条,在信息window中出现这个代码:

bpy.ops.sequencer.select(extend=False, linked_handle=False, left_right='NONE', linked_time=False)

当您select第二张图片/图像条时,在信息window中出现此代码:

bpy.ops.sequencer.select(extend=True, linked_handle=False, left_right='NONE', linked_time=False)

当您添加擦除效果时点击选项添加 > 效果条 > 擦除,在信息 window 中出现此代码:

bpy.ops.sequencer.effect_strip_add(frame_start=71, frame_end=96, type='WIPE')

我尝试用 python 创建效果条,但我不知道如何 select 图像/图像条 A,然后 select 图像/图像条B 然后创建效果条。

如何使用代码 select 图像/图像条 A,然后 select 图像/图像条 B?

可以给图像条命名并select按名称命名吗?

现在我已经手动创建了 EFFECT STRIP

每个效果条都有自己的名字

使用 python 我可以更改 EFFECT STRIP 属性,例如设置效果模糊:

bpy.context.scene.sequence_editor.sequences_all["Wipe"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.001"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.002"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.003"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.004"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.005"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.006"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.007"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.008"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.009"].blur_width = 0.5
bpy.context.scene.sequence_editor.sequences_all["Wipe.010"].blur_width = 0.5

使用 python 我可以更改 EFFECT STRIP 属性,例如过渡类型、方向

bpy.context.scene.sequence_editor.sequences_all["Wipe.001"].transition_type = 'IRIS';

bpy.context.scene.sequence_editor.sequences_all["Wipe.002"].transition_type = 'IRIS';
bpy.context.scene.sequence_editor.sequences_all["Wipe.002"].direction = 'IN';

bpy.context.scene.sequence_editor.sequences_all["Wipe.003"].transition_type = 'SINGLE';

bpy.context.scene.sequence_editor.sequences_all["Wipe.004"].transition_type = 'SINGLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.004"].direction = 'IN';

bpy.context.scene.sequence_editor.sequences_all["Wipe.005"].transition_type = 'SINGLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.005"].angle = 0.785398;

bpy.context.scene.sequence_editor.sequences_all["Wipe.006"].transition_type = 'SINGLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.006"].direction = 'IN';
bpy.context.scene.sequence_editor.sequences_all["Wipe.006"].angle = 0.785398;

bpy.context.scene.sequence_editor.sequences_all["Wipe.007"].transition_type = 'SINGLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.007"].angle = 1.5708;

bpy.context.scene.sequence_editor.sequences_all["Wipe.008"].transition_type = 'SINGLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.008"].direction = 'IN';
bpy.context.scene.sequence_editor.sequences_all["Wipe.008"].angle = 1.5708;

bpy.context.scene.sequence_editor.sequences_all["Wipe.009"].transition_type = 'DOUBLE';

bpy.context.scene.sequence_editor.sequences_all["Wipe.010"].transition_type = 'DOUBLE';
bpy.context.scene.sequence_editor.sequences_all["Wipe.010"].direction = 'IN';

建议直接在脚本中访问数据,而不是使用 Blender 的运算符,此外 performance considerations 使用数据通常更容易、更清晰。

您可以在场景属性中找到VSE的序列列表

import bpy
seqs = bpy.context.scene.sequence_editor.sequences

然后您可以添加 new sequence strips to that list and adjust any strip properties -

s1 = seqs.new_image('img001', '//renders/img001.jpg', 1, 1)
s1.frame_final_duration = 288
s2 = seqs.new_image('img002', '//renders/img002.jpg', 2, 241)
s2.frame_final_duration = 288

然后使用对两个条带的引用,创建擦除效果

w = seqs.new_effect('wipe01', 'WIPE', 3,
            s2.frame_start, s1.frame_final_end, seq1=s1, seq2=s2)
w.transition_type = 'IRIS'

然后从第二个条带开始,添加另一个条带并在它们之间擦拭

s1 = s2
s2 = seqs.new_image('img003', '//renders/img003.jpg', 1, 481)
s2.frame_final_duration = 288
w = seqs.new_effect('wipe02', 'WIPE', 3,
            s2.frame_start, s1.frame_final_end, seq1=s1, seq2=s2)
w.transition_type = 'SINGLE'

s1 = s2
s2 = seqs.new_image('img004', '//renders/img004.jpg', 2, 722)
s2.frame_final_duration = 288
w = seqs.new_effect('wipe03', 'WIPE', 3,
            s2.frame_start, s1.frame_final_end, seq1=s1, seq2=s2)
w.transition_type = 'DOUBLE'

非常感谢sambler

效果很好!

一个工作示例,只需复制并粘贴即可在 python 控制台上进行测试(更改图像的真实路径和名称)

import bpy, os

from bpy import context

scene = context.scene

def importar():
    scene.sequence_editor_create()
    bpy.context.area.type = 'SEQUENCE_EDITOR'
    #
    # import images as image strip
    #
    s1= scene.sequence_editor.sequences.new_image('p01', '/real_path_to_file/000.jpg',1,1);
    s2= scene.sequence_editor.sequences.new_image('p02', '/real_path_to_file/001.jpg',2,241);
    s3= scene.sequence_editor.sequences.new_image('p03', '/real_path_to_file/002.jpg',1,481);
    s4= scene.sequence_editor.sequences.new_image('p04', '/real_path_to_file/003.jpg',2,722);
    s5= scene.sequence_editor.sequences.new_image('p05', '/real_path_to_file/004.jpg',1,964);
    #
    # set duration for each strip
    #
    s1.frame_final_duration = 288;
    s2.frame_final_duration = 288;
    s3.frame_final_duration = 288;
    s4.frame_final_duration = 288;
    s5.frame_final_duration = 288;
    #
    # create wipe effect
    #
    w1= scene.sequence_editor.sequences.new_effect('wipe01', 'WIPE', 3,s2.frame_start,s1.frame_final_end,seq1=s1, seq2=s2);
    w2= scene.sequence_editor.sequences.new_effect('wipe02', 'WIPE', 3,s3.frame_start,s2.frame_final_end,seq1=s2, seq2=s3);
    w3= scene.sequence_editor.sequences.new_effect('wipe03', 'WIPE', 3,s4.frame_start,s3.frame_final_end,seq1=s3, seq2=s4);
    w4= scene.sequence_editor.sequences.new_effect('wipe04', 'WIPE', 3,s5.frame_start,s4.frame_final_end,seq1=s4, seq2=s5);
    #
    # set blur property for wipe effect
    #
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].blur_width = 0.5;    
    #
    # set properties for wipe effects
    #
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].direction = 'IN';
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].angle = 0.785398;
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].direction = 'IN';
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].angle = 0.785398;
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].angle = 1.5708;

importar()

为了阐明一些方法,此代码手动添加每个图像条、擦除效果和效果属性。

显然,使用 python,您可以将所有 png 或 jpg 文件自动添加到目录中...自动创建擦除效果...自动或随机化每个擦除效果属性。

Blender 2.8 代码更新

之前的代码在 Blender 2.8 中不起作用

代码需要更新,这是在 blender 2.8 中工作的修改后的代码

一个工作示例,只需复制并粘贴即可在 python 控制台上进行测试(更改图像的真实路径和名称):

import bpy, os

from bpy import context

scene = context.scene

def importar():
    scene.sequence_editor_create()
    bpy.context.area.type = 'SEQUENCE_EDITOR'
    #
    # import images as image strip
    #
    s1= scene.sequence_editor.sequences.new_image('p01', '/real_path_to_file/000.jpg',1,1);
    s2= scene.sequence_editor.sequences.new_image('p02', '/real_path_to_file/001.jpg',2,241);
    s3= scene.sequence_editor.sequences.new_image('p03', '/real_path_to_file/002.jpg',1,481);
    s4= scene.sequence_editor.sequences.new_image('p04', '/real_path_to_file/003.jpg',2,722);
    s5= scene.sequence_editor.sequences.new_image('p05', '/real_path_to_file/004.jpg',1,964);
    #
    # set duration for each strip
    #
    s1.frame_final_duration = 288;
    s2.frame_final_duration = 288;
    s3.frame_final_duration = 288;
    s4.frame_final_duration = 288;
    s5.frame_final_duration = 288;
    #
    # create wipe effect
    #
    w1= scene.sequence_editor.sequences.new_effect('wipe01', 'WIPE', 3,s2.frame_start,seq1=s1, seq2=s2);
    w2= scene.sequence_editor.sequences.new_effect('wipe02', 'WIPE', 3,s3.frame_start,seq1=s2, seq2=s3);
    w3= scene.sequence_editor.sequences.new_effect('wipe03', 'WIPE', 3,s4.frame_start,seq1=s3, seq2=s4);
    w4= scene.sequence_editor.sequences.new_effect('wipe04', 'WIPE', 3,s5.frame_start,seq1=s4, seq2=s5);
    #
    # set blur property for wipe effect
    #
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].blur_width = 0.5;
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].blur_width = 0.5;    
    #
    # set properties for wipe effects
    #
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe01"].direction = 'IN';
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe02"].angle = 0.785398;
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].direction = 'IN';
    bpy.context.scene.sequence_editor.sequences_all["wipe03"].angle = 0.785398;
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].transition_type = 'SINGLE';
    bpy.context.scene.sequence_editor.sequences_all["wipe04"].angle = 1.5708;

importar()

在 Blender 2.8 中,不需要使用以下方法包含帧结束参数:scene.sequence_editor.sequences.new_effect

为了阐明一些方法,此代码手动添加每个图像条、擦除效果和效果属性。

显然,使用 python,您可以将所有 png 或 jpg 文件自动添加到一个目录中...自动创建擦除效果...自动或随机化每个擦除效果属性。