python - Whit python,在 blender 中插入一个效果条作为视频序列编辑器中的删除

标签 python blender

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

In Blender using VIDEO SEQUENCE EDITOR you can insert still images (.jpg or png) as an IMAGE STRIP and create a carrousel

在每个图像/IMAGE STRIP 之间,您可以插入 EFFECT STRIP 作为 WIPE,以在图像/IMAGE STRIP 之间创建过渡。

Between each image / IMAGE STRIP you can insert an EFFECT STRIP as WIPE to create a transition between images

结果:

enter image description here

我可以使用 python 将图像作为图像条插入视频序列编辑器中。

示例:

我使用以下代码将图像作为图像条插入视频序列编辑器:

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()

结果:我在其交替 channel 和自己的图像条中插入了几张图像。

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

现在我想使用 python 创建一个 EFFECT STRIP 作为 WIPE。

要手动创建 EFFECT STRIP 作为 WIPE,您必须:

a) 用鼠标选择一张图像/IMAGE STRIP

b) 按 Shift 键并用鼠标选择另一个图像/IMAGE STRIP

c) 单击选项“添加”>“效果条”>“删除”添加删除效果

当您选择第一个图像/IMAGE STRIP 时,信息窗口中会出现以下代码:

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

当您选择第二个图像/IMAGE STRIP 时,信息窗口中会出现以下代码:

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

当您添加删除效果时,单击选项“添加”>“效果条”>“删除”,信息窗口中会出现以下代码:

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

enter image description here

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

如何使用代码选择图像/IMAGE STRIP A,然后选择图像/IMAGE STRIP B?

可以命名 IMAGE STRIP 并按名称选择它吗?

现在我已经手动创建了 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';

最佳答案

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

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

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

然后您可以添加 new sequence strips到该列表并调整任何 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

然后使用对两个 strip 的引用,创建删除效果

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

然后从第二个 strip 开始,添加另一个 strip 并在它们之间添加删除

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'

关于python - Whit python,在 blender 中插入一个效果条作为视频序列编辑器中的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53215355/

相关文章:

python - 窗口颜色/在 pygame 中添加一艘船

python - Pandas:根据目标分布从 DataFrame 中采样

python - 将 CSV 导入 Blender 时出现 "Could not convert string to float"

python - PIL Image.save() 函数在 Blender python 中失败

eclipse - Blender 附加组件的 PyDev 和 Eclipse 设置

python - Python 中 DataFrames 的 DataFrame (Pandas)

python - 在 Pandas 中根据 groupby 获取百分比?

python - CPython 是否保证 dict.keys 与 dict.values 具有相同的顺序?

python - 在 Blender 中无线读取数据时运行游戏引擎

python - 热插拔 python 代码(鸭式函数?)