С помощью Blender Python API в Video Sequence Editor можно добавлять стрипы различных типов – видео, аудио, изображения и секвенции изображений.
Изображения, звуковые и видео-файлы добавляются в нужные каналы Sequencer путем создания новых элементов в коллекции свойств sequences объекта bpy.types.SequenceEditor.
Добавление звука
Для того, чтобы добавить в Sequencer звуковой файл, используем функцию “new_sound”
1 2 3 4 5 6 |
sound_strip = bpy.context.scene.sequence_editor.sequences.new_sound( name='sound', filepath='_PATH_/sound.wav', channel=1, frame_start=1 ) |
со следующими параметрами:
name – имя создаваемого стрипа
filepath – полный путь к исходному звуковому файлу
channel – номер канала секвенсора, на котором нужно разместить данный стрип
frame_start – номер кадра, на который нужно поместить начало данного стрипа
Добавление видео
Для добавления в Sequencer стрипа с видео используется функция “new_movie”
1 2 3 4 5 6 |
video_strip = bpy.context.scene.sequence_editor.sequences.new_movie( name='video', filepath='_PATH_/video.mp4', channel=2, frame_start=1 ) |
с аналогичными параметрами.
Добавление изображения
Для добавления в секвенсор изображения используется функция “new_image”
1 2 3 4 5 6 |
image_strip = bpy.context.scene.sequence_editor.sequences.new_image( name='image', filepath='_PATH_/image.png', channel=3, frame_start=1 ) |
с теми же параметрами.
Все эти функции возвращают указатель на созданный стрип.
Добавление секвенции изображений
Для создания стрипа с секвенцией – набором последовательных изображений, необходимо вызвать оператор “sequencer.image_strip_add”:
1 2 3 4 5 6 |
bpy.ops.sequencer.image_strip_add( directory='_DIRECTORY_PATH_', files=[{"name": 'image001.png'}, {"name": 'image002.png'}, {"name": 'image003.png'}], frame_start=1, channel=4 ) |
где:
directory – полный путь к директории, в которой размещается нужный набор изображений
files – список словарей, каждый из которых состоит из пары: “name” – имя файла с расширением. В этом списке через такие словарные пары нужно перечислить все изображения, которые нужно загрузить в стрип.
channel – номер канала секвенсора, на котором нужно разместить данный стрип
frame_start – номер кадра, на который нужно поместить начало данного стрипа
При использовании этого оператора нужно иметь ввиду, что он контекстно-зависимый. Если вы будете вызывать его не из контекста окна Sequence Editor, а например, из текстового редактора, необходимо указать для него правильный контекст, иначе оператор выдаст ошибку:
Operator bpy.ops.sequencer.image_strip_add.poll() failed, context is incorrect
Переопределим контекст на контекст окна Sequence Editor и вызовем оператор следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
override_context = bpy.context.copy() area = [area for area in bpy.context.screen.areas if area.type == "SEQUENCE_EDITOR"][0] override_context['window'] = bpy.context.window override_context['screen'] = bpy.context.screen override_context['area'] = area override_context['region'] = area.regions[-1] override_context['scene'] = bpy.context.scene override_context['space_data'] = area.spaces.active bpy.ops.sequencer.image_strip_add( override_context, directory='_DIRECTORY_PATH_', files=[{"name": 'image001.png'}, {"name": 'image002.png'}, {"name": 'image003.png'}], frame_start=1, channel=4 ) |
В результате мы загрузили нужные нам стрипы в Sequence Editor.