Concaténation de vidéos VSE / Blender
Un exemple de script Python pour le chargement et la concaténation de vidéos dans le VSE de Blender :
# Concat videos
import os
import glob
import bpy
# Convenience variables
C = bpy.context
SCENE = bpy.context.scene
OPS = bpy.ops
D = bpy.data
data = bpy.data.scenes
# Create new Scene
myscene = bpy.data.scenes.new('myscene')
myscene.sequence_editor_create()
# Global variables
vid_cnt = 0
channel = 1
overlap = 60
last_frame = overlap + 1 # frame counter
# Add images
#for img in ["./vlcsnap-1.png", "./vlcsnap-2.png", "./vlcsnap-3.png"]:
# myimage = myscene.sequence_editor.sequences.new_image(name='img', filepath=img, channel=1, frame_start=last_frame)
# myimage.frame_final_duration = 5
# last_frame = myimage.frame_final_end
# Add movies
myscene.sync_mode = 'AUDIO_SYNC'
for vid in glob.glob("./*.mp4"):
vid_cnt += 1
channel = (vid_cnt % 2) * 2 + 1
myclip = myscene.sequence_editor.sequences.new_movie(name='clip', filepath=vid, channel=channel, frame_start=last_frame-overlap)
mysound = myscene.sequence_editor.sequences.new_sound(name='sound', filepath=vid, channel=channel+1, frame_start=last_frame-overlap)
mysound.frame_final_end = myclip.frame_final_end
prev_frame = myclip.frame_final_start
last_frame = myclip.frame_final_end
if overlap > 0 and vid_cnt >= 2:
# Add cross effect
myeffect = myscene.sequence_editor.sequences.new_effect(name='effect', type='CROSS', channel=5, frame_start=prev_frame, frame_end=prev_frame+overlap, seq1=prevclip, seq2=myclip)
prevclip = myclip
à exécuter via Alt-p
Ceci créera une nouvelle scène myscene dans laquelle sera chargé à la file toutes les vidéos MP4 trouvées dans le répertoire courant.
Pour paramétrer / lancer le rendu final, rajouter :
# Render attributes
resx = 1280; #640
resy = 720; #480
myscene.render.resolution_x = resx
myscene.render.resolution_y = resy
myscene.render.resolution_percentage = 100
#myscene.render.fps = 29.97
myscene.frame_end = last_frame
if getattr(bpy.app.build_options, 'codec_ffmpeg'):
myscene.render.image_settings.file_format = 'FFMPEG'
myscene.render.ffmpeg.format = 'MPEG4'
myscene.render.ffmpeg.codec = 'MPEG4'
myscene.render.ffmpeg.audio_codec = 'AAC'
myscene.render.filepath = "./vid-"
else:
myscene.render.image_settings.file_format = 'AVI_JPEG'
myscene.render.filepath = "./vid.avi"
# Render
#bpy.ops.render.render(animation=True, scene="myscene")