diff options
Diffstat (limited to 'release/scripts/op/screen_play_rendered_anim.py')
-rw-r--r-- | release/scripts/op/screen_play_rendered_anim.py | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py index 17087183c7d..2ecd445df1d 100644 --- a/release/scripts/op/screen_play_rendered_anim.py +++ b/release/scripts/op/screen_play_rendered_anim.py @@ -25,36 +25,40 @@ # Originally written by Matt Ebb import bpy -import subprocess import os -import platform def guess_player_path(preset): + import platform + system = platform.system() + if preset == 'BLENDER24': - player_path = 'blender' + player_path = "blender" - if platform.system() == 'Darwin': - test_path = '/Applications/blender 2.49.app/Contents/MacOS/blender' - elif platform.system() == 'Windows': - test_path = '/Program Files/Blender Foundation/Blender/blender.exe' + if system == 'Darwin': + test_path = "/Applications/blender 2.49.app/Contents/MacOS/blender" + elif system == 'Windows': + test_path = "/Program Files/Blender Foundation/Blender/blender.exe" if os.path.exists(test_path): player_path = test_path elif preset == 'DJV': - player_path = 'djv_view' + player_path = "djv_view" - if platform.system() == 'Darwin': + if system == 'Darwin': test_path = '/Applications/djv-0.8.2.app/Contents/Resources/bin/djv_view' if os.path.exists(test_path): player_path = test_path elif preset == 'FRAMECYCLER': - player_path = 'framecycler' + player_path = "framecycler" elif preset == 'RV': - player_path = 'rv' + player_path = "rv" + + elif preset == 'MPLAYER': + player_path = "mplayer" return player_path @@ -62,11 +66,13 @@ def guess_player_path(preset): class PlayRenderedAnim(bpy.types.Operator): '''Plays back rendered frames/movies using an external player.''' - bl_idname = "screen.play_rendered_anim" + bl_idname = "render.play_rendered_anim" bl_label = "Play Rendered Animation" bl_options = {'REGISTER'} def execute(self, context): + import subprocess + scene = context.scene rd = scene.render prefs = context.user_preferences @@ -74,18 +80,32 @@ class PlayRenderedAnim(bpy.types.Operator): preset = prefs.filepaths.animation_player_preset player_path = prefs.filepaths.animation_player file_path = bpy.utils.expandpath(rd.output_path) + is_movie = rd.is_movie_format # try and guess a command line if it doesn't exist if player_path == '': player_path = guess_player_path(preset) - if preset in ('FRAMECYCLER', 'RV'): + if is_movie == False and preset in ('FRAMECYCLER', 'RV', 'MPLAYER'): # replace the number with '#' - file_a, file_b = rd.frame_path(frame=0), rd.frame_path(frame=1) + file_a = rd.frame_path(frame=0) + + # TODO, make an api call for this + frame_tmp = 9 + file_b = rd.frame_path(frame=frame_tmp) + + while len(file_a) == len(file_b): + frame_tmp = (frame_tmp * 10) + 9 + print(frame_tmp) + file_b = rd.frame_path(frame=frame_tmp) + file_b = rd.frame_path(frame=int(frame_tmp / 10)) + file = ''.join([(c if file_b[i] == c else "#") for i, c in enumerate(file_a)]) else: # works for movies and images - file = rd.frame_path(frame=scene.start_frame) + file = rd.frame_path(frame=scene.frame_start) + + file = bpy.utils.expandpath(file) # expand '//' cmd = [player_path] # extra options, fps controls etc. @@ -96,11 +116,20 @@ class PlayRenderedAnim(bpy.types.Operator): opts = [file, "-playback_speed", str(rd.fps)] cmd.extend(opts) elif preset == 'FRAMECYCLER': - opts = [file, "%d-%d" % (scene.start_frame, scene.end_frame)] + opts = [file, "%d-%d" % (scene.frame_start, scene.frame_end)] cmd.extend(opts) elif preset == 'RV': opts = ["-fps", str(rd.fps), "-play", "[ %s ]" % file] cmd.extend(opts) + elif preset == 'MPLAYER': + opts = [] + if is_movie: + opts.append(file) + else: + opts.append("mf://%s" % file.replace("#", "?")) + opts += ["-mf", "fps=%.4f" % (rd.fps / rd.fps_base)] + opts += ["-loop", "0", "-really-quiet", "-fs"] + cmd.extend(opts) else: # 'CUSTOM' cmd.append(file) @@ -123,4 +152,3 @@ def unregister(): if __name__ == "__main__": register() - |