diff options
Diffstat (limited to 'release/scripts/op/sequencer.py')
-rw-r--r-- | release/scripts/op/sequencer.py | 90 |
1 files changed, 80 insertions, 10 deletions
diff --git a/release/scripts/op/sequencer.py b/release/scripts/op/sequencer.py index 51bb96442e9..13668498aae 100644 --- a/release/scripts/op/sequencer.py +++ b/release/scripts/op/sequencer.py @@ -20,6 +20,9 @@ import bpy +from bpy.props import * + + class SequencerCrossfadeSounds(bpy.types.Operator): '''Do crossfading volume animation of two selected sound strips.''' @@ -48,34 +51,101 @@ class SequencerCrossfadeSounds(bpy.types.Operator): if seq2 == None: self.report({'ERROR'}, "Select 2 sound strips.") return {'CANCELLED'} - if seq1.start_frame_final > seq2.start_frame_final: + if seq1.frame_final_start > seq2.frame_final_start: s = seq1 seq1 = seq2 seq2 = s - if seq1.end_frame_final > seq2.start_frame_final: - tempcfra = context.scene.current_frame - context.scene.current_frame = seq2.start_frame_final + if seq1.frame_final_end > seq2.frame_final_start: + tempcfra = context.scene.frame_current + context.scene.frame_current = seq2.frame_final_start seq1.keyframe_insert('volume') - context.scene.current_frame = seq1.end_frame_final + context.scene.frame_current = seq1.frame_final_end seq1.volume = 0 seq1.keyframe_insert('volume') seq2.keyframe_insert('volume') - context.scene.current_frame = seq2.start_frame_final + context.scene.frame_current = seq2.frame_final_start seq2.volume = 0 seq2.keyframe_insert('volume') - context.scene.current_frame = tempcfra + context.scene.frame_current = tempcfra return {'FINISHED'} else: self.report({'ERROR'}, "The selected strips don't overlap.") return {'CANCELLED'} +class SequencerCutMulticam(bpy.types.Operator): + '''Cut multicam strip and select camera.''' + + bl_idname = "sequencer.cut_multicam" + bl_label = "Cut multicam" + bl_options = {'REGISTER', 'UNDO'} + + camera = IntProperty(name="Camera", + default=1, min=1, max=32, soft_min=1, soft_max=32) + + def poll(self, context): + if context.scene and context.scene.sequence_editor and context.scene.sequence_editor.active_strip: + return context.scene.sequence_editor.active_strip.type == 'MULTICAM' + else: + return False + + def execute(self, context): + camera = self.properties.camera + + s = context.scene.sequence_editor.active_strip + + if s.multicam_source == camera: + return {'FINISHED'} + + if not s.selected: + s.selected = True + + cfra = context.scene.frame_current + bpy.ops.sequencer.cut(frame=cfra, type='SOFT', side='RIGHT') + for s in context.scene.sequence_editor.sequences_all: + if s.selected and s.type == 'MULTICAM' and s.frame_final_start <= cfra and cfra < s.frame_final_end: + context.scene.sequence_editor.active_strip = s + + context.scene.sequence_editor.active_strip.multicam_source = camera + return {'FINISHED'} + + +class SequencerDeinterlaceSelectedMovies(bpy.types.Operator): + '''Deinterlace all selected movie sources.''' + + bl_idname = "sequencer.deinterlace_selected_movies" + bl_label = "Deinterlace Movies" + bl_options = {'REGISTER', 'UNDO'} + + def poll(self, context): + if context.scene and context.scene.sequence_editor: + return True + else: + return False + + def execute(self, context): + for s in context.scene.sequence_editor.sequences_all: + if s.selected and s.type == 'MOVIE': + s.de_interlace = True + + return {'FINISHED'} + + def register(): - bpy.types.register(SequencerCrossfadeSounds) + register = bpy.types.register + + register(SequencerCrossfadeSounds) + register(SequencerCutMulticam) + register(SequencerDeinterlaceSelectedMovies) + def unregister(): - bpy.types.unregister(SequencerCrossfadeSounds) + unregister = bpy.types.unregister + + unregister(SequencerCrossfadeSounds) + unregister(SequencerCutMulticam) + unregister(SequencerDeinterlaceSelectedMovies) + if __name__ == "__main__": register() - |