diff options
Diffstat (limited to 'release/scripts')
15 files changed, 105 insertions, 115 deletions
diff --git a/release/scripts/modules/blend_render_info.py b/release/scripts/modules/blend_render_info.py index 5e4ee0ee4b1..30c3ed2388b 100755 --- a/release/scripts/modules/blend_render_info.py +++ b/release/scripts/modules/blend_render_info.py @@ -42,8 +42,8 @@ def read_blend_rend_chunk(path): if head[0:2] == b'\x1f\x8b': # gzip magic import gzip - blendfile.close() - blendfile = gzip.open(path, "rb") + blendfile.seek(0) + blendfile = gzip.open(blendfile, "rb") head = blendfile.read(7) if head != b'BLENDER': diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py index ee0638e254d..a80b9dfe317 100644 --- a/release/scripts/modules/bpy_extras/keyconfig_utils.py +++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py @@ -33,9 +33,7 @@ KM_HIERARCHY = [ ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation - ('User Interface', 'EMPTY', 'WINDOW', [ - ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []), - ]), + ('User Interface', 'EMPTY', 'WINDOW', []), ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) ('Object Mode', 'EMPTY', 'WINDOW', []), diff --git a/release/scripts/presets/ffmpeg/DV.py b/release/scripts/presets/ffmpeg/DV.py deleted file mode 100644 index a95d861111a..00000000000 --- a/release/scripts/presets/ffmpeg/DV.py +++ /dev/null @@ -1,14 +0,0 @@ -import bpy -is_ntsc = (bpy.context.scene.render.fps != 25) - -bpy.context.scene.render.ffmpeg.format = "DV" -bpy.context.scene.render.resolution_x = 720 - -if is_ntsc: - bpy.context.scene.render.resolution_y = 480 -else: - bpy.context.scene.render.resolution_y = 576 - -bpy.context.scene.render.ffmpeg.audio_mixrate = 48000 -bpy.context.scene.render.ffmpeg.audio_codec = "PCM" -bpy.context.scene.render.ffmpeg.audio_channels = "STEREO" diff --git a/release/scripts/presets/ffmpeg/DVD.py b/release/scripts/presets/ffmpeg/DVD (note_colon_ this changes render resolution).py index d858bd70836..d858bd70836 100644 --- a/release/scripts/presets/ffmpeg/DVD.py +++ b/release/scripts/presets/ffmpeg/DVD (note_colon_ this changes render resolution).py diff --git a/release/scripts/presets/ffmpeg/SVCD.py b/release/scripts/presets/ffmpeg/SVCD.py deleted file mode 100644 index deaf9697045..00000000000 --- a/release/scripts/presets/ffmpeg/SVCD.py +++ /dev/null @@ -1,24 +0,0 @@ -import bpy -is_ntsc = (bpy.context.scene.render.fps != 25) - -bpy.context.scene.render.ffmpeg.format = "MPEG2" -bpy.context.scene.render.resolution_x = 480 - -if is_ntsc: - bpy.context.scene.render.resolution_y = 480 - bpy.context.scene.render.ffmpeg.gopsize = 18 -else: - bpy.context.scene.render.resolution_y = 576 - bpy.context.scene.render.ffmpeg.gopsize = 15 - -bpy.context.scene.render.ffmpeg.video_bitrate = 2040 -bpy.context.scene.render.ffmpeg.maxrate = 2516 -bpy.context.scene.render.ffmpeg.minrate = 0 -bpy.context.scene.render.ffmpeg.buffersize = 224 * 8 -bpy.context.scene.render.ffmpeg.packetsize = 2324 -bpy.context.scene.render.ffmpeg.muxrate = 0 - -bpy.context.scene.render.ffmpeg.audio_bitrate = 224 -bpy.context.scene.render.ffmpeg.audio_mixrate = 44100 -bpy.context.scene.render.ffmpeg.audio_codec = "MP2" -bpy.context.scene.render.ffmpeg.audio_channels = "STEREO" diff --git a/release/scripts/presets/ffmpeg/VCD.py b/release/scripts/presets/ffmpeg/VCD.py deleted file mode 100644 index 3e57be720fb..00000000000 --- a/release/scripts/presets/ffmpeg/VCD.py +++ /dev/null @@ -1,24 +0,0 @@ -import bpy -is_ntsc = (bpy.context.scene.render.fps != 25) - -bpy.context.scene.render.ffmpeg.format = "MPEG1" -bpy.context.scene.render.resolution_x = 352 - -if is_ntsc: - bpy.context.scene.render.resolution_y = 240 - bpy.context.scene.render.ffmpeg.gopsize = 18 -else: - bpy.context.scene.render.resolution_y = 288 - bpy.context.scene.render.ffmpeg.gopsize = 15 - -bpy.context.scene.render.ffmpeg.video_bitrate = 1150 -bpy.context.scene.render.ffmpeg.maxrate = 1150 -bpy.context.scene.render.ffmpeg.minrate = 1150 -bpy.context.scene.render.ffmpeg.buffersize = 40 * 8 -bpy.context.scene.render.ffmpeg.packetsize = 2324 -bpy.context.scene.render.ffmpeg.muxrate = 2352 * 75 * 8 - -bpy.context.scene.render.ffmpeg.audio_bitrate = 224 -bpy.context.scene.render.ffmpeg.audio_mixrate = 44100 -bpy.context.scene.render.ffmpeg.audio_codec = "MP2" -bpy.context.scene.render.ffmpeg.audio_channels = "STEREO" diff --git a/release/scripts/presets/ffmpeg/h264 in MP4.py b/release/scripts/presets/ffmpeg/h264 in MP4.py new file mode 100644 index 00000000000..0e9c32c4878 --- /dev/null +++ b/release/scripts/presets/ffmpeg/h264 in MP4.py @@ -0,0 +1,18 @@ +import bpy +is_ntsc = (bpy.context.scene.render.fps != 25) + +bpy.context.scene.render.ffmpeg.format = "MPEG4" +bpy.context.scene.render.ffmpeg.codec = "H264" + +if is_ntsc: + bpy.context.scene.render.ffmpeg.gopsize = 18 +else: + bpy.context.scene.render.ffmpeg.gopsize = 15 +bpy.context.scene.render.ffmpeg.use_max_b_frames = False + +bpy.context.scene.render.ffmpeg.video_bitrate = 6000 +bpy.context.scene.render.ffmpeg.maxrate = 9000 +bpy.context.scene.render.ffmpeg.minrate = 0 +bpy.context.scene.render.ffmpeg.buffersize = 224 * 8 +bpy.context.scene.render.ffmpeg.packetsize = 2048 +bpy.context.scene.render.ffmpeg.muxrate = 10080000 diff --git a/release/scripts/presets/ffmpeg/h264 in Matroska for scrubbing.py b/release/scripts/presets/ffmpeg/h264 in Matroska for scrubbing.py new file mode 100644 index 00000000000..eb1889d272f --- /dev/null +++ b/release/scripts/presets/ffmpeg/h264 in Matroska for scrubbing.py @@ -0,0 +1,14 @@ +"""Sets up FFmpeg to output files that can easily be scrubbed through. + +Information was taken from https://trac.ffmpeg.org/wiki/Encode/VFX#H.264 +""" + +import bpy + +bpy.context.scene.render.ffmpeg.format = "MKV" +bpy.context.scene.render.ffmpeg.codec = "H264" + +bpy.context.scene.render.ffmpeg.gopsize = 1 +bpy.context.scene.render.ffmpeg.constant_rate_factor = 'PERC_LOSSLESS' +bpy.context.scene.render.ffmpeg.use_max_b_frames = True +bpy.context.scene.render.ffmpeg.max_b_frames = 0 diff --git a/release/scripts/presets/ffmpeg/h264.py b/release/scripts/presets/ffmpeg/h264 in Matroska.py index e1dbdc1d8b9..1fe066dc4bf 100644 --- a/release/scripts/presets/ffmpeg/h264.py +++ b/release/scripts/presets/ffmpeg/h264 in Matroska.py @@ -1,7 +1,7 @@ import bpy is_ntsc = (bpy.context.scene.render.fps != 25) -bpy.context.scene.render.ffmpeg.format = "H264" +bpy.context.scene.render.ffmpeg.format = "MKV" bpy.context.scene.render.ffmpeg.codec = "H264" if is_ntsc: diff --git a/release/scripts/presets/ffmpeg/theora.py b/release/scripts/presets/ffmpeg/ogg_theora.py index 88f1ac9bbae..b450b67fd98 100644 --- a/release/scripts/presets/ffmpeg/theora.py +++ b/release/scripts/presets/ffmpeg/ogg_theora.py @@ -8,6 +8,7 @@ if is_ntsc: bpy.context.scene.render.ffmpeg.gopsize = 18 else: bpy.context.scene.render.ffmpeg.gopsize = 15 +bpy.context.scene.render.ffmpeg.use_max_b_frames = False bpy.context.scene.render.ffmpeg.video_bitrate = 6000 bpy.context.scene.render.ffmpeg.maxrate = 9000 diff --git a/release/scripts/presets/ffmpeg/xvid.py b/release/scripts/presets/ffmpeg/xvid.py index e69ab663dc8..dba0f71c279 100644 --- a/release/scripts/presets/ffmpeg/xvid.py +++ b/release/scripts/presets/ffmpeg/xvid.py @@ -1,12 +1,14 @@ import bpy is_ntsc = (bpy.context.scene.render.fps != 25) -bpy.context.scene.render.ffmpeg.format = "XVID" +bpy.context.scene.render.ffmpeg.format = "AVI" +bpy.context.scene.render.ffmpeg.codec = "MPEG4" if is_ntsc: bpy.context.scene.render.ffmpeg.gopsize = 18 else: bpy.context.scene.render.ffmpeg.gopsize = 15 +bpy.context.scene.render.ffmpeg.use_max_b_frames = False bpy.context.scene.render.ffmpeg.video_bitrate = 6000 bpy.context.scene.render.ffmpeg.maxrate = 9000 diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py index 54942afdb54..8261f0c7770 100644 --- a/release/scripts/startup/bl_ui/properties_data_armature.py +++ b/release/scripts/startup/bl_ui/properties_data_armature.py @@ -181,7 +181,7 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel): # list of poses in pose library row = layout.row() row.template_list("UI_UL_list", "pose_markers", poselib, "pose_markers", - poselib.pose_markers, "active_index", rows=3) + poselib.pose_markers, "active_index", rows=5) # column of operators for active pose # - goes beside list diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py index feff5d4f829..84442f9b2d9 100644 --- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py +++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py @@ -483,14 +483,17 @@ class GPENCIL_PIE_settings_palette(Menu): layout = self.layout pie = layout.menu_pie() - # gpd = context.gpencil_data + gpd = context.gpencil_data gpl = context.active_gpencil_layer palcolor = context.active_gpencil_palettecolor brush = context.active_gpencil_brush + is_editmode = bool(gpd and gpd.use_stroke_edit_mode and context.editable_gpencil_strokes) + # W - Stroke draw settings col = pie.column(align=True) if palcolor is not None: + col.enabled = not palcolor.lock col.label(text="Stroke") col.prop(palcolor, "color", text="") col.prop(palcolor, "alpha", text="", slider=True) @@ -498,6 +501,7 @@ class GPENCIL_PIE_settings_palette(Menu): # E - Fill draw settings col = pie.column(align=True) if palcolor is not None: + col.enabled = not palcolor.lock col.label(text="Fill") col.prop(palcolor, "fill_color", text="") col.prop(palcolor, "fill_alpha", text="", slider=True) @@ -520,32 +524,33 @@ class GPENCIL_PIE_settings_palette(Menu): row.prop(gpl, "hide") col.prop(gpl, "use_onion_skinning") - # NW - Move stroke Down - col = pie.column(align=True) - col.label("Arrange Strokes") - col.operator("gpencil.stroke_arrange", text="Send to Back").direction = 'BOTTOM' - col.operator("gpencil.stroke_arrange", text="Send Backward").direction = 'DOWN' - - # NE - Move stroke Up - col = pie.column(align=True) - col.label("Arrange Strokes") - col.operator("gpencil.stroke_arrange", text="Bring to Front").direction = 'TOP' - col.operator("gpencil.stroke_arrange", text="Bring Forward").direction = 'UP' - - # SW - Move stroke to color - col = pie.column(align=True) - col.operator("gpencil.stroke_change_color", text="Move to Color") - - # SE - Join strokes - col = pie.column(align=True) - col.label("Join Strokes") - row = col.row() - row.operator("gpencil.stroke_join", text="Join").type = 'JOIN' - row.operator("gpencil.stroke_join", text="Join & Copy").type = 'JOINCOPY' - col.operator("gpencil.stroke_flip", text="Flip direction") + # NW/NE/SW/SE - These operators are only available in editmode + # as they require strokes to be selected to work + if is_editmode: + # NW - Move stroke Down + col = pie.column(align=True) + col.label("Arrange Strokes") + col.operator("gpencil.stroke_arrange", text="Send to Back").direction = 'BOTTOM' + col.operator("gpencil.stroke_arrange", text="Send Backward").direction = 'DOWN' + + # NE - Move stroke Up + col = pie.column(align=True) + col.label("Arrange Strokes") + col.operator("gpencil.stroke_arrange", text="Bring to Front").direction = 'TOP' + col.operator("gpencil.stroke_arrange", text="Bring Forward").direction = 'UP' + + # SW - Move stroke to color + col = pie.column(align=True) + col.operator("gpencil.stroke_change_color", text="Move to Color") + + # SE - Join strokes + col = pie.column(align=True) + col.label("Join Strokes") + row = col.row() + row.operator("gpencil.stroke_join", text="Join").type = 'JOIN' + row.operator("gpencil.stroke_join", text="Join & Copy").type = 'JOINCOPY' + col.operator("gpencil.stroke_flip", text="Flip direction") - gpd = context.gpencil_data - if gpd: col.prop(gpd, "show_stroke_direction", text="Show drawing direction") @@ -700,6 +705,7 @@ class GPENCIL_UL_palettecolor(UIList): split = layout.split(percentage=0.25) row = split.row(align=True) + row.enabled = not palcolor.lock row.prop(palcolor, "color", text="", emboss=palcolor.is_stroke_visible) row.prop(palcolor, "fill_color", text="", emboss=palcolor.is_fill_visible) split.prop(palcolor, "name", text="", emboss=False) @@ -888,6 +894,7 @@ class GreasePencilDataPanel: col = split.column() subcol = col.column(align=True) subcol.label("Tint") + subcol.enabled = not gpl.lock subcol.prop(gpl, "tint_color", text="") subcol.prop(gpl, "tint_factor", text="Factor", slider=True) @@ -1025,14 +1032,14 @@ class GreasePencilPaletteColorPanel: # Column 1 - Stroke col = split.column(align=True) - col.active = not pcolor.lock + col.enabled = not pcolor.lock col.label(text="Stroke:") col.prop(pcolor, "color", text="") col.prop(pcolor, "alpha", slider=True) # Column 2 - Fill col = split.column(align=True) - col.active = not pcolor.lock + col.enabled = not pcolor.lock col.label(text="Fill:") col.prop(pcolor, "fill_color", text="") col.prop(pcolor, "fill_alpha", text="Opacity", slider=True) diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 152d4e96d5d..850606eb80b 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -461,31 +461,42 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel): split = layout.split() split.prop(rd.ffmpeg, "format") - if ffmpeg.format in {'AVI', 'QUICKTIME', 'MKV', 'OGG', 'MPEG4'}: - split.prop(ffmpeg, "codec") - if ffmpeg.codec == 'H264': - row = layout.row() - row.label() - row.prop(ffmpeg, "use_lossless_output") - elif rd.ffmpeg.format == 'H264': - split.prop(ffmpeg, "use_lossless_output") - else: - split.label() + split.prop(ffmpeg, "use_autosplit") + + layout.separator() + + needs_codec = ffmpeg.format in {'AVI', 'QUICKTIME', 'MKV', 'OGG', 'MPEG4'} + if needs_codec: + layout.prop(ffmpeg, "codec") + if ffmpeg.codec in {'DNXHD'}: + layout.prop(ffmpeg, "use_lossless_output") + + # Output quality + if needs_codec and ffmpeg.codec in {'H264', 'MPEG4'}: + layout.prop(ffmpeg, "constant_rate_factor") + + # Encoding speed + layout.prop(ffmpeg, "ffmpeg_preset") + # I-frames + layout.prop(ffmpeg, "gopsize") + # B-Frames row = layout.row() - row.prop(ffmpeg, "video_bitrate") - row.prop(ffmpeg, "gopsize") + row.prop(ffmpeg, "use_max_b_frames", text='Max B-frames') + pbox = row.split() + pbox.prop(ffmpeg, "max_b_frames", text='') + pbox.enabled = ffmpeg.use_max_b_frames split = layout.split() - + split.enabled = ffmpeg.constant_rate_factor == 'NONE' col = split.column() col.label(text="Rate:") + col.prop(ffmpeg, "video_bitrate") col.prop(ffmpeg, "minrate", text="Minimum") col.prop(ffmpeg, "maxrate", text="Maximum") col.prop(ffmpeg, "buffersize", text="Buffer") col = split.column() - col.prop(ffmpeg, "use_autosplit") col.label(text="Mux:") col.prop(ffmpeg, "muxrate", text="Rate") col.prop(ffmpeg, "packetsize", text="Packet Size") @@ -497,6 +508,7 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel): layout.prop(ffmpeg, "audio_codec", text="Audio Codec") row = layout.row() + row.enabled = ffmpeg.audio_codec != 'NONE' row.prop(ffmpeg, "audio_bitrate") row.prop(ffmpeg, "audio_volume", slider=True) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index b94658a5b07..85011415192 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -103,10 +103,10 @@ class VIEW3D_HT_header(Header): else: row.prop(toolsettings, "snap_target", text="") if obj: - if mode in {'OBJECT', 'POSE'} and snap_element != 'VOLUME': - row.prop(toolsettings, "use_snap_align_rotation", text="") - elif mode == 'EDIT': + if mode == 'EDIT': row.prop(toolsettings, "use_snap_self", text="") + if mode in {'OBJECT', 'POSE', 'EDIT'} and snap_element != 'VOLUME': + row.prop(toolsettings, "use_snap_align_rotation", text="") if snap_element == 'VOLUME': row.prop(toolsettings, "use_snap_peel_object", text="") |