Move FFmpeg and QuickTime settings to own structure inside RenderSettings
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 13 Jan 2012 12:34:41 +0000 (12:34 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 13 Jan 2012 12:34:41 +0000 (12:34 +0000)
rather than making all properties have ffmpeg_ and quicktime_ prefixes

release/scripts/presets/ffmpeg/DV.py
release/scripts/presets/ffmpeg/DVD.py
release/scripts/presets/ffmpeg/SVCD.py
release/scripts/presets/ffmpeg/VCD.py
release/scripts/presets/ffmpeg/h264.py
release/scripts/presets/ffmpeg/theora.py
release/scripts/presets/ffmpeg/xvid.py
release/scripts/startup/bl_ui/properties_render.py
release/scripts/startup/bl_ui/properties_scene.py
source/blender/makesrna/RNA_access.h
source/blender/makesrna/intern/rna_scene.c

index 241d6938a5fb3dc1f673c89adc675a010cbfb4b1..a95d861111a3585506eff21913aaaec3f05e5027 100644 (file)
@@ -1,7 +1,7 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "DV"
+bpy.context.scene.render.ffmpeg.format = "DV"
 bpy.context.scene.render.resolution_x = 720
 
 if is_ntsc:
@@ -9,6 +9,6 @@ if is_ntsc:
 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"
+bpy.context.scene.render.ffmpeg.audio_mixrate = 48000
+bpy.context.scene.render.ffmpeg.audio_codec = "PCM"
+bpy.context.scene.render.ffmpeg.audio_channels = "STEREO"
index 07828a755cddee1d87e72ff8807586a90ffb11cd..d858bd7083651e9b66f0643d8d694b16f82c2a63 100644 (file)
@@ -1,24 +1,24 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "MPEG2"
+bpy.context.scene.render.ffmpeg.format = "MPEG2"
 bpy.context.scene.render.resolution_x = 720
 
 if is_ntsc:
     bpy.context.scene.render.resolution_y = 480
-    bpy.context.scene.render.ffmpeg_gopsize = 18
+    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.gopsize = 15
 
-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
+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
 
-bpy.context.scene.render.ffmpeg_audio_codec = "AC3"
-bpy.context.scene.render.ffmpeg_audio_bitrate = 448
-bpy.context.scene.render.ffmpeg_audio_mixrate = 48000
-bpy.context.scene.render.ffmpeg_audio_channels = "SURROUND51"
+bpy.context.scene.render.ffmpeg.audio_codec = "AC3"
+bpy.context.scene.render.ffmpeg.audio_bitrate = 448
+bpy.context.scene.render.ffmpeg.audio_mixrate = 48000
+bpy.context.scene.render.ffmpeg.audio_channels = "SURROUND51"
index 584f192c3d80ecd293b22f7824f6f86244352003..deaf96970457d069d344adff35455552fb6396c9 100644 (file)
@@ -1,24 +1,24 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "MPEG2"
+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
+    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.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.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"
+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"
index 35dda07a06426eb9aff91d8f3c968ee5d161f283..3e57be720fbbcfff464cae751ad21151596268ee 100644 (file)
@@ -1,24 +1,24 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "MPEG1"
+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
+    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.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.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"
+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"
index 1cd5d61a926f3fc1b6d86073af90a42c145bf3ff..e1dbdc1d8b9b0305d7871a69e3bb5daf12273147 100644 (file)
@@ -1,17 +1,17 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "H264"
-bpy.context.scene.render.ffmpeg_codec = "H264"
+bpy.context.scene.render.ffmpeg.format = "H264"
+bpy.context.scene.render.ffmpeg.codec = "H264"
 
 if is_ntsc:
-    bpy.context.scene.render.ffmpeg_gopsize = 18
+    bpy.context.scene.render.ffmpeg.gopsize = 18
 else:
-    bpy.context.scene.render.ffmpeg_gopsize = 15
+    bpy.context.scene.render.ffmpeg.gopsize = 15
 
-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
+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
index 9a35227ad57e0c45d65f138153b11f62769ddb3c..88f1ac9bbae8d843c8f6995015ae46e9043236b9 100644 (file)
@@ -1,17 +1,17 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "OGG"
-bpy.context.scene.render.ffmpeg_codec = "THEORA"
+bpy.context.scene.render.ffmpeg.format = "OGG"
+bpy.context.scene.render.ffmpeg.codec = "THEORA"
 
 if is_ntsc:
-    bpy.context.scene.render.ffmpeg_gopsize = 18
+    bpy.context.scene.render.ffmpeg.gopsize = 18
 else:
-    bpy.context.scene.render.ffmpeg_gopsize = 15
+    bpy.context.scene.render.ffmpeg.gopsize = 15
 
-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
+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
index c006ba267ccd32e1e30b1f60f3d0899139242f7a..e69ab663dc88604ba739474126a47719ff246adc 100644 (file)
@@ -1,16 +1,16 @@
 import bpy
 is_ntsc = (bpy.context.scene.render.fps != 25)
 
-bpy.context.scene.render.ffmpeg_format = "XVID"
+bpy.context.scene.render.ffmpeg.format = "XVID"
 
 if is_ntsc:
-    bpy.context.scene.render.ffmpeg_gopsize = 18
+    bpy.context.scene.render.ffmpeg.gopsize = 18
 else:
-    bpy.context.scene.render.ffmpeg_gopsize = 15
+    bpy.context.scene.render.ffmpeg.gopsize = 15
 
-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
+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
index 930f1914c345f9779862e8ebdc3925c7518689dc..a4fa31203821b2b1a7fc3657c3683b59f3d9088c 100644 (file)
@@ -472,33 +472,35 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
             layout.operator("scene.render_data_set_quicktime_codec")
 
         elif file_format == 'QUICKTIME_QTKIT':
+            quicktime = rd.quicktime
+
             split = layout.split()
             col = split.column()
-            col.prop(rd, "quicktime_codec_type", text="Video Codec")
-            col.prop(rd, "quicktime_codec_spatial_quality", text="Quality")
+            col.prop(quicktime, "codec_type", text="Video Codec")
+            col.prop(quicktime, "codec_spatial_quality", text="Quality")
 
             # Audio
-            col.prop(rd, "quicktime_audiocodec_type", text="Audio Codec")
-            if rd.quicktime_audiocodec_type != 'No audio':
+            col.prop(quicktime, "audiocodec_type", text="Audio Codec")
+            if quicktime.audiocodec_type != 'No audio':
                 split = layout.split()
-                if rd.quicktime_audiocodec_type == 'LPCM':
-                    split.prop(rd, "quicktime_audio_bitdepth", text="")
+                if quicktime.audiocodec_type == 'LPCM':
+                    split.prop(quicktime, "audio_bitdepth", text="")
 
-                split.prop(rd, "quicktime_audio_samplerate", text="")
+                split.prop(quicktime, "audio_samplerate", text="")
 
                 split = layout.split()
                 col = split.column()
-                if rd.quicktime_audiocodec_type == 'AAC':
-                    col.prop(rd, "quicktime_audio_bitrate")
+                if quicktime.audiocodec_type == 'AAC':
+                    col.prop(quicktime, "audio_bitrate")
 
                 subsplit = split.split()
                 col = subsplit.column()
 
-                if rd.quicktime_audiocodec_type == 'AAC':
-                    col.prop(rd, "quicktime_audio_codec_isvbr")
+                if rquicktime.audiocodec_type == 'AAC':
+                    col.prop(quicktime, "audio_codec_isvbr")
 
                 col = subsplit.column()
-                col.prop(rd, "quicktime_audio_resampling_hq")
+                col.prop(quicktime, "audio_resampling_hq")
 
 
 class RENDER_PT_encoding(RenderButtonsPanel, Panel):
@@ -515,45 +517,46 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
         layout = self.layout
 
         rd = context.scene.render
+        ffmpeg = rd.ffmpeg
 
         layout.menu("RENDER_MT_ffmpeg_presets", text="Presets")
 
         split = layout.split()
-        split.prop(rd, "ffmpeg_format")
-        if rd.ffmpeg_format in {'AVI', 'QUICKTIME', 'MKV', 'OGG'}:
-            split.prop(rd, "ffmpeg_codec")
-        elif rd.ffmpeg_format == 'H264':
-            split.prop(rd, 'ffmpeg_lossless_output')
+        split.prop(rd.ffmpeg, "format")
+        if ffmpeg.format in {'AVI', 'QUICKTIME', 'MKV', 'OGG'}:
+            split.prop(ffmpeg, "codec")
+        elif rd.ffmpeg.format == 'H264':
+            split.prop(ffmpeg, 'use_lossless_output')
         else:
             split.label()
 
         row = layout.row()
-        row.prop(rd, "ffmpeg_video_bitrate")
-        row.prop(rd, "ffmpeg_gopsize")
+        row.prop(ffmpeg, "video_bitrate")
+        row.prop(ffmpeg, "gopsize")
 
         split = layout.split()
 
         col = split.column()
         col.label(text="Rate:")
-        col.prop(rd, "ffmpeg_minrate", text="Minimum")
-        col.prop(rd, "ffmpeg_maxrate", text="Maximum")
-        col.prop(rd, "ffmpeg_buffersize", text="Buffer")
+        col.prop(ffmpeg, "minrate", text="Minimum")
+        col.prop(ffmpeg, "maxrate", text="Maximum")
+        col.prop(ffmpeg, "buffersize", text="Buffer")
 
         col = split.column()
-        col.prop(rd, "ffmpeg_autosplit")
+        col.prop(ffmpeg, "use_autosplit")
         col.label(text="Mux:")
-        col.prop(rd, "ffmpeg_muxrate", text="Rate")
-        col.prop(rd, "ffmpeg_packetsize", text="Packet Size")
+        col.prop(ffmpeg, "muxrate", text="Rate")
+        col.prop(ffmpeg, "packetsize", text="Packet Size")
 
         layout.separator()
 
         # Audio:
-        if rd.ffmpeg_format not in {'MP3'}:
-            layout.prop(rd, "ffmpeg_audio_codec", text="Audio Codec")
+        if ffmpeg.format not in {'MP3'}:
+            layout.prop(ffmpeg, "audio_codec", text="Audio Codec")
 
         row = layout.row()
-        row.prop(rd, "ffmpeg_audio_bitrate")
-        row.prop(rd, "ffmpeg_audio_volume", slider=True)
+        row.prop(ffmpeg, "audio_bitrate")
+        row.prop(ffmpeg, "audio_volume", slider=True)
 
 
 class RENDER_PT_bake(RenderButtonsPanel, Panel):
index b7218e4ba47ccde8cf6af7461b12a9ec840c47c6..7879f15270a1f8b43894bd0a45b06b04a676f890 100644 (file)
@@ -54,6 +54,7 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
         layout = self.layout
         scene = context.scene
         rd = context.scene.render
+        ffmpeg = rd.ffmpeg
 
         layout.prop(scene, "audio_volume")
         layout.operator("sound.bake_animation")
@@ -68,8 +69,8 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
 
         col = split.column()
         col.label("Format:")
-        col.prop(rd, "ffmpeg_audio_channels", text="")
-        col.prop(rd, "ffmpeg_audio_mixrate", text="Rate")
+        col.prop(ffmpeg, "audio_channels", text="")
+        col.prop(ffmpeg, "audio_mixrate", text="Rate")
 
         layout.operator("sound.mixdown")
 
index 81a2cd26f7042ce2feefc091d38a8b4cf84d94bb..569449f70dffd297899eb2485edff53f5a4cc827 100644 (file)
@@ -215,6 +215,7 @@ extern StructRNA RNA_ExplodeModifier;
 extern StructRNA RNA_ExpressionController;
 extern StructRNA RNA_FCurve;
 extern StructRNA RNA_FCurveSample;
+extern StructRNA RNA_FFmpegSettings;
 extern StructRNA RNA_FModifier;
 extern StructRNA RNA_FModifierCycles;
 extern StructRNA RNA_FModifierEnvelope;
@@ -394,6 +395,7 @@ extern StructRNA RNA_PropertyGroupItem;
 extern StructRNA RNA_PropertySensor;
 extern StructRNA RNA_PythonConstraint;
 extern StructRNA RNA_PythonController;
+extern StructRNA RNA_QuickTimeSettings;
 extern StructRNA RNA_RadarSensor;
 extern StructRNA RNA_RandomSensor;
 extern StructRNA RNA_RaySensor;
index 7ea0083d1936efd6a369cb8c253983188636e06e..afe82a1fdd3a5a8cd4db17514de6c5dd2d6c705b 100644 (file)
@@ -24,7 +24,6 @@
  *  \ingroup RNA
  */
 
-
 #include <stdlib.h>
 
 #include "RNA_define.h"
@@ -869,9 +868,10 @@ static EnumPropertyItem *rna_RenderSettings_qtcodecsettings_audiocodecType_itemf
 #endif
 #endif
 
-static void rna_RenderSettings_ffmpegsettings_lossless_output_set(PointerRNA *ptr, int value)
+static void rna_FFmpegSettings_lossless_output_set(PointerRNA *ptr, int value)
 {
-       RenderData *rd = (RenderData*)ptr->data;
+       Scene *scene = (Scene *) ptr->id.data;
+       RenderData *rd = &scene->r;
 
        if (value)
                rd->ffcodecdata.flags |= FFMPEG_LOSSLESS_OUTPUT;
@@ -2654,6 +2654,269 @@ static void rna_def_scene_image_format_data(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 }
 
+static void rna_def_scene_ffmpeg_settings(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+#ifdef WITH_FFMPEG
+       static EnumPropertyItem ffmpeg_format_items[] = {
+               {FFMPEG_MPEG1, "MPEG1", 0, "MPEG-1", ""},
+               {FFMPEG_MPEG2, "MPEG2", 0, "MPEG-2", ""},
+               {FFMPEG_MPEG4, "MPEG4", 0, "MPEG-4", ""},
+               {FFMPEG_AVI, "AVI", 0, "AVI", ""},
+               {FFMPEG_MOV, "QUICKTIME", 0, "Quicktime", ""},
+               {FFMPEG_DV, "DV", 0, "DV", ""},
+               {FFMPEG_H264, "H264", 0, "H.264", ""},
+               {FFMPEG_XVID, "XVID", 0, "Xvid", ""},
+               {FFMPEG_OGG, "OGG", 0, "Ogg", ""},
+               {FFMPEG_MKV, "MKV", 0, "Matroska", ""},
+               {FFMPEG_FLV, "FLASH", 0, "Flash", ""},
+               {FFMPEG_WAV, "WAV", 0, "Wav", ""},
+               {FFMPEG_MP3, "MP3", 0, "Mp3", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem ffmpeg_codec_items[] = {
+               {CODEC_ID_NONE, "NONE", 0, "None", ""},
+               {CODEC_ID_MPEG1VIDEO, "MPEG1", 0, "MPEG-1", ""},
+               {CODEC_ID_MPEG2VIDEO, "MPEG2", 0, "MPEG-2", ""},
+               {CODEC_ID_MPEG4, "MPEG4", 0, "MPEG-4(divx)", ""},
+               {CODEC_ID_HUFFYUV, "HUFFYUV", 0, "HuffYUV", ""},
+               {CODEC_ID_DVVIDEO, "DV", 0, "DV", ""},
+               {CODEC_ID_H264, "H264", 0, "H.264", ""},
+               {CODEC_ID_THEORA, "THEORA", 0, "Theora", ""},
+               {CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""},
+               {CODEC_ID_FFV1, "FFV1", 0, "FFmpeg video codec #1", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem ffmpeg_audio_codec_items[] = {
+               {CODEC_ID_NONE, "NONE", 0, "None", ""},
+               {CODEC_ID_MP2, "MP2", 0, "MP2", ""},
+               {CODEC_ID_MP3, "MP3", 0, "MP3", ""},
+               {CODEC_ID_AC3, "AC3", 0, "AC3", ""},
+               {CODEC_ID_AAC, "AAC", 0, "AAC", ""},
+               {CODEC_ID_VORBIS, "VORBIS", 0, "Vorbis", ""},
+               {CODEC_ID_FLAC, "FLAC", 0, "FLAC", ""},
+               {CODEC_ID_PCM_S16LE, "PCM", 0, "PCM", ""},
+               {0, NULL, 0, NULL, NULL}};
+#endif
+
+       static EnumPropertyItem audio_channel_items[] = {
+               {1, "MONO", 0, "Mono", "Set audio channels to mono"},
+               {2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
+               {4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
+               {6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
+               {8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
+               {0, NULL, 0, NULL, NULL}};
+
+       srna = RNA_def_struct(brna, "FFmpegSettings", NULL);
+       RNA_def_struct_sdna(srna, "FFMpegCodecData");
+       RNA_def_struct_ui_text(srna, "FFmpeg Settings", "FFmpeg related settings for the scene");
+
+#ifdef WITH_FFMPEG
+       prop = RNA_def_property(srna, "format", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "type");
+       RNA_def_property_enum_items(prop, ffmpeg_format_items);
+       RNA_def_property_ui_text(prop, "Format", "Output file format");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "codec", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "codec");
+       RNA_def_property_enum_items(prop, ffmpeg_codec_items);
+       RNA_def_property_ui_text(prop, "Codec", "FFmpeg codec to use");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "video_bitrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "video_bitrate");
+       RNA_def_property_range(prop, 1, 14000);
+       RNA_def_property_ui_text(prop, "Bitrate", "Video bitrate (kb/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "minrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "rc_min_rate");
+       RNA_def_property_range(prop, 0, 9000);
+       RNA_def_property_ui_text(prop, "Min Rate", "Rate control: min rate (kb/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "maxrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "rc_max_rate");
+       RNA_def_property_range(prop, 1, 14000);
+       RNA_def_property_ui_text(prop, "Max Rate", "Rate control: max rate (kb/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "muxrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "mux_rate");
+       RNA_def_property_range(prop, 0, 100000000);
+       RNA_def_property_ui_text(prop, "Mux Rate", "Mux rate (bits/s(!))");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "gopsize", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "gop_size");
+       RNA_def_property_range(prop, 0, 100);
+       RNA_def_property_ui_text(prop, "GOP Size", "Distance between key frames");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "buffersize", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "rc_buffer_size");
+       RNA_def_property_range(prop, 0, 2000);
+       RNA_def_property_ui_text(prop, "Buffersize", "Rate control: buffer size (kb)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "packetsize", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "mux_packet_size");
+       RNA_def_property_range(prop, 0, 16384);
+       RNA_def_property_ui_text(prop, "Mux Packet Size", "Mux packet size (byte)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "use_autosplit", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", FFMPEG_AUTOSPLIT_OUTPUT);
+       RNA_def_property_ui_text(prop, "Autosplit Output", "Autosplit output at 2GB boundary");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "use_lossless_output", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", FFMPEG_LOSSLESS_OUTPUT);
+       RNA_def_property_boolean_funcs(prop, NULL, "rna_FFmpegSettings_lossless_output_set");
+       RNA_def_property_ui_text(prop, "Lossless Output", "Use losslecc output for video streams");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       /* FFMPEG Audio*/
+       prop = RNA_def_property(srna, "audio_codec", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "audio_codec");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items);
+       RNA_def_property_ui_text(prop, "Audio Codec", "FFmpeg audio codec to use");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "audio_bitrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "audio_bitrate");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_range(prop, 32, 384);
+       RNA_def_property_ui_text(prop, "Bitrate", "Audio bitrate (kb/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "audio_volume", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "audio_volume");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_ui_text(prop, "Volume", "Audio volume");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+#endif
+
+       // the following two "ffmpeg" settings are general audio settings
+       prop= RNA_def_property(srna, "audio_mixrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "audio_mixrate");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_range(prop, 8000, 192000);
+       RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "audio_channels", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "audio_channels");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_enum_items(prop, audio_channel_items);
+       RNA_def_property_ui_text(prop, "Audio Channels", "Audio channel count");
+}
+
+#ifdef WITH_QUICKTIME
+static void rna_def_scene_quicktime_settings(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       static EnumPropertyItem quicktime_codec_type_items[] = {
+               {0, "codec", 0, "codec", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+#ifdef USE_QTKIT
+       static EnumPropertyItem quicktime_audio_samplerate_items[] = {
+               {22050, "22050", 0, "22kHz", ""},
+               {44100, "44100", 0, "44.1kHz", ""},
+               {48000, "48000", 0, "48kHz", ""},
+               {88200, "88200", 0, "88.2kHz", ""},
+               {96000, "96000", 0, "96kHz", ""},
+               {192000, "192000", 0, "192kHz", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem quicktime_audio_bitdepth_items[] = {
+               {AUD_FORMAT_U8, "8BIT", 0, "8bit", ""},
+               {AUD_FORMAT_S16, "16BIT", 0, "16bit", ""},
+               {AUD_FORMAT_S24, "24BIT", 0, "24bit", ""},
+               {AUD_FORMAT_S32, "32BIT", 0, "32bit", ""},
+               {AUD_FORMAT_FLOAT32, "FLOAT32", 0, "float32", ""},
+               {AUD_FORMAT_FLOAT64, "FLOAT64", 0, "float64", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       static EnumPropertyItem quicktime_audio_bitrate_items[] = {
+               {64000, "64000", 0, "64kbps", ""},
+               {112000, "112000", 0, "112kpbs", ""},
+               {128000, "128000", 0, "128kbps", ""},
+               {192000, "192000", 0, "192kbps", ""},
+               {256000, "256000", 0, "256kbps", ""},
+               {320000, "320000", 0, "320kbps", ""},
+               {0, NULL, 0, NULL, NULL}};
+#endif
+
+       /* QuickTime */
+       srna = RNA_def_struct(brna, "QuickTimeSettings", NULL);
+       RNA_def_struct_sdna(srna, "QuickTimeCodecData");
+       RNA_def_struct_ui_text(srna, "QuickTime Settings", "QuickTime related settings for the scene");
+
+       prop = RNA_def_property(srna, "codec_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "codecType");
+       RNA_def_property_enum_items(prop, quicktime_codec_type_items);
+       RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_codecType_get",
+                                                               "rna_RenderSettings_qtcodecsettings_codecType_set",
+                                                               "rna_RenderSettings_qtcodecsettings_codecType_itemf");
+       RNA_def_property_ui_text(prop, "Codec", "QuickTime codec type");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "codec_spatial_quality", PROP_INT, PROP_PERCENTAGE);
+       RNA_def_property_int_sdna(prop, NULL, "codecSpatialQuality");
+       RNA_def_property_range(prop, 0, 100);
+       RNA_def_property_ui_text(prop, "Spatial quality", "Intra-frame spatial quality level");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+#ifdef USE_QTKIT
+       prop = RNA_def_property(srna, "audiocodec_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "audiocodecType");
+       RNA_def_property_enum_items(prop, quicktime_codec_type_items);
+       RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_audiocodecType_get",
+                                                               "rna_RenderSettings_qtcodecsettings_audiocodecType_set",
+                                                               "rna_RenderSettings_qtcodecsettings_audiocodecType_itemf");
+       RNA_def_property_ui_text(prop, "Audio Codec", "QuickTime audio codec type");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "audio_samplerate", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioSampleRate");
+       RNA_def_property_enum_items(prop, quicktime_audio_samplerate_items);
+       RNA_def_property_ui_text(prop, "Smp Rate", "Sample Rate");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "audio_bitdepth", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioBitDepth");
+       RNA_def_property_enum_items(prop, quicktime_audio_bitdepth_items);
+       RNA_def_property_ui_text(prop, "Bit Depth", "Bit Depth");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop = RNA_def_property(srna, "audio_resampling_hq", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "audioCodecFlags", QTAUDIO_FLAG_RESAMPLE_NOHQ);
+       RNA_def_property_ui_text(prop, "HQ", "Use High Quality resampling algorithm");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "audio_codec_isvbr", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "audioCodecFlags", QTAUDIO_FLAG_CODEC_ISCBR);
+       RNA_def_property_ui_text(prop, "VBR", "Use Variable Bit Rate compression (improves quality at same bitrate)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+       prop= RNA_def_property(srna, "audio_bitrate", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioBitRate");
+       RNA_def_property_enum_items(prop, quicktime_audio_bitrate_items);
+       RNA_def_property_ui_text(prop, "Bitrate", "Compressed audio bitrate");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+#endif
+}
+#endif
+
 static void rna_def_scene_render_data(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -2744,96 +3007,16 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
                {0, "AUTO", 0, "Auto-detect", "Automatically determine the number of threads, based on CPUs"},
                {R_FIXED_THREADS, "FIXED", 0, "Fixed", "Manually determine the number of threads"},
                {0, NULL, 0, NULL, NULL}};
-       
-#ifdef WITH_QUICKTIME
-       static EnumPropertyItem quicktime_codec_type_items[] = {
-               {0, "codec", 0, "codec", ""},
-               {0, NULL, 0, NULL, NULL}};
-       
-#ifdef USE_QTKIT
-       static EnumPropertyItem quicktime_audio_samplerate_items[] = {
-               {22050, "22050", 0, "22kHz", ""},
-               {44100, "44100", 0, "44.1kHz", ""},
-               {48000, "48000", 0, "48kHz", ""},
-               {88200, "88200", 0, "88.2kHz", ""},
-               {96000, "96000", 0, "96kHz", ""},
-               {192000, "192000", 0, "192kHz", ""},
-               {0, NULL, 0, NULL, NULL}};
-       
-       static EnumPropertyItem quicktime_audio_bitdepth_items[] = {
-               {AUD_FORMAT_U8, "8BIT", 0, "8bit", ""},
-               {AUD_FORMAT_S16, "16BIT", 0, "16bit", ""},
-               {AUD_FORMAT_S24, "24BIT", 0, "24bit", ""},
-               {AUD_FORMAT_S32, "32BIT", 0, "32bit", ""},
-               {AUD_FORMAT_FLOAT32, "FLOAT32", 0, "float32", ""},
-               {AUD_FORMAT_FLOAT64, "FLOAT64", 0, "float64", ""},
-               {0, NULL, 0, NULL, NULL}};
-       
-       static EnumPropertyItem quicktime_audio_bitrate_items[] = {
-               {64000, "64000", 0, "64kbps", ""},
-               {112000, "112000", 0, "112kpbs", ""},
-               {128000, "128000", 0, "128kbps", ""},
-               {192000, "192000", 0, "192kbps", ""},
-               {256000, "256000", 0, "256kbps", ""},
-               {320000, "320000", 0, "320kbps", ""},
-               {0, NULL, 0, NULL, NULL}};
-#endif
-#endif
-
-#ifdef WITH_FFMPEG
-       static EnumPropertyItem ffmpeg_format_items[] = {
-               {FFMPEG_MPEG1, "MPEG1", 0, "MPEG-1", ""},
-               {FFMPEG_MPEG2, "MPEG2", 0, "MPEG-2", ""},
-               {FFMPEG_MPEG4, "MPEG4", 0, "MPEG-4", ""},
-               {FFMPEG_AVI, "AVI", 0, "AVI", ""},
-               {FFMPEG_MOV, "QUICKTIME", 0, "Quicktime", ""},
-               {FFMPEG_DV, "DV", 0, "DV", ""},
-               {FFMPEG_H264, "H264", 0, "H.264", ""},
-               {FFMPEG_XVID, "XVID", 0, "Xvid", ""},
-               {FFMPEG_OGG, "OGG", 0, "Ogg", ""},
-               {FFMPEG_MKV, "MKV", 0, "Matroska", ""},
-               {FFMPEG_FLV, "FLASH", 0, "Flash", ""},
-               {FFMPEG_WAV, "WAV", 0, "Wav", ""},
-               {FFMPEG_MP3, "MP3", 0, "Mp3", ""},
-               {0, NULL, 0, NULL, NULL}};
-
-       static EnumPropertyItem ffmpeg_codec_items[] = {
-               {CODEC_ID_NONE, "NONE", 0, "None", ""},
-               {CODEC_ID_MPEG1VIDEO, "MPEG1", 0, "MPEG-1", ""},
-               {CODEC_ID_MPEG2VIDEO, "MPEG2", 0, "MPEG-2", ""},
-               {CODEC_ID_MPEG4, "MPEG4", 0, "MPEG-4(divx)", ""},
-               {CODEC_ID_HUFFYUV, "HUFFYUV", 0, "HuffYUV", ""},
-               {CODEC_ID_DVVIDEO, "DV", 0, "DV", ""},
-               {CODEC_ID_H264, "H264", 0, "H.264", ""},
-               {CODEC_ID_THEORA, "THEORA", 0, "Theora", ""},
-               {CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""},
-               {CODEC_ID_FFV1, "FFV1", 0, "FFmpeg video codec #1", ""},
-               {0, NULL, 0, NULL, NULL}};
-
-       static EnumPropertyItem ffmpeg_audio_codec_items[] = {
-               {CODEC_ID_NONE, "NONE", 0, "None", ""},
-               {CODEC_ID_MP2, "MP2", 0, "MP2", ""},
-               {CODEC_ID_MP3, "MP3", 0, "MP3", ""},
-               {CODEC_ID_AC3, "AC3", 0, "AC3", ""},
-               {CODEC_ID_AAC, "AAC", 0, "AAC", ""},
-               {CODEC_ID_VORBIS, "VORBIS", 0, "Vorbis", ""},
-               {CODEC_ID_FLAC, "FLAC", 0, "FLAC", ""},
-               {CODEC_ID_PCM_S16LE, "PCM", 0, "PCM", ""},
-               {0, NULL, 0, NULL, NULL}};
-#endif
-
-       static EnumPropertyItem audio_channel_items[] = {
-               {1, "MONO", 0, "Mono", "Set audio channels to mono"},
-               {2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
-               {4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
-               {6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
-               {8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
-               {0, NULL, 0, NULL, NULL}};
 
        static EnumPropertyItem engine_items[] = {
                {0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
                {0, NULL, 0, NULL, NULL}};
 
+       rna_def_scene_ffmpeg_settings(brna);
+#ifdef WITH_QUICKTIME
+       rna_def_scene_quicktime_settings(brna);
+#endif
+
        srna= RNA_def_struct(brna, "RenderSettings", NULL);
        RNA_def_struct_sdna(srna, "RenderData");
        RNA_def_struct_nested(brna, srna, "Scene");
@@ -2891,167 +3074,18 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update");
 
 #ifdef WITH_QUICKTIME
-       /* QuickTime */
-       
-       prop= RNA_def_property(srna, "quicktime_codec_type", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.codecType");
-       RNA_def_property_enum_items(prop, quicktime_codec_type_items);
-       RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_codecType_get",
-                                                               "rna_RenderSettings_qtcodecsettings_codecType_set",
-                                                               "rna_RenderSettings_qtcodecsettings_codecType_itemf");
-       RNA_def_property_ui_text(prop, "Codec", "QuickTime codec type");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "quicktime_codec_spatial_quality", PROP_INT, PROP_PERCENTAGE);
-       RNA_def_property_int_sdna(prop, NULL, "qtcodecsettings.codecSpatialQuality");
-       RNA_def_property_range(prop, 0, 100);
-       RNA_def_property_ui_text(prop, "Spatial quality", "Intra-frame spatial quality level");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
-#ifdef USE_QTKIT
-       prop= RNA_def_property(srna, "quicktime_audiocodec_type", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audiocodecType");
-       RNA_def_property_enum_items(prop, quicktime_codec_type_items);
-       RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_audiocodecType_get",
-                                                               "rna_RenderSettings_qtcodecsettings_audiocodecType_set",
-                                                               "rna_RenderSettings_qtcodecsettings_audiocodecType_itemf");
-       RNA_def_property_ui_text(prop, "Audio Codec", "QuickTime audio codec type");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "quicktime_audio_samplerate", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioSampleRate");
-       RNA_def_property_enum_items(prop, quicktime_audio_samplerate_items);
-       RNA_def_property_ui_text(prop, "Smp Rate", "Sample Rate");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "quicktime_audio_bitdepth", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioBitDepth");
-       RNA_def_property_enum_items(prop, quicktime_audio_bitdepth_items);
-       RNA_def_property_ui_text(prop, "Bit Depth", "Bit Depth");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "quicktime_audio_resampling_hq", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_negative_sdna(prop, NULL, "qtcodecsettings.audioCodecFlags", QTAUDIO_FLAG_RESAMPLE_NOHQ);
-       RNA_def_property_ui_text(prop, "HQ", "Use High Quality resampling algorithm");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "quicktime_audio_codec_isvbr", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_negative_sdna(prop, NULL, "qtcodecsettings.audioCodecFlags", QTAUDIO_FLAG_CODEC_ISCBR);
-       RNA_def_property_ui_text(prop, "VBR", "Use Variable Bit Rate compression (improves quality at same bitrate)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
-       prop= RNA_def_property(srna, "quicktime_audio_bitrate", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioBitRate");
-       RNA_def_property_enum_items(prop, quicktime_audio_bitrate_items);
-       RNA_def_property_ui_text(prop, "Bitrate", "Compressed audio bitrate");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);        
-#endif
+       prop= RNA_def_property(srna, "quicktime", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "QuickTimeSettings");
+       RNA_def_property_pointer_sdna(prop, NULL, "qtcodecsettings");
+       RNA_def_property_flag(prop, PROP_NEVER_UNLINK);
+       RNA_def_property_ui_text(prop, "QuickTime Settings", "QuickTime related settings for the scene");
 #endif
-       
-#ifdef WITH_FFMPEG
-       /* FFMPEG Video*/
-       
-       prop= RNA_def_property(srna, "ffmpeg_format", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.type");
-       RNA_def_property_enum_items(prop, ffmpeg_format_items);
-       RNA_def_property_ui_text(prop, "Format", "Output file format");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_codec", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.codec");
-       RNA_def_property_enum_items(prop, ffmpeg_codec_items);
-       RNA_def_property_ui_text(prop, "Codec", "FFMpeg codec to use");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_video_bitrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.video_bitrate");
-       RNA_def_property_range(prop, 1, 14000);
-       RNA_def_property_ui_text(prop, "Bitrate", "Video bitrate (kb/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_minrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_min_rate");
-       RNA_def_property_range(prop, 0, 9000);
-       RNA_def_property_ui_text(prop, "Min Rate", "Rate control: min rate (kb/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_maxrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_max_rate");
-       RNA_def_property_range(prop, 1, 14000);
-       RNA_def_property_ui_text(prop, "Max Rate", "Rate control: max rate (kb/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_muxrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.mux_rate");
-       RNA_def_property_range(prop, 0, 100000000);
-       RNA_def_property_ui_text(prop, "Mux Rate", "Mux rate (bits/s(!))");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_gopsize", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.gop_size");
-       RNA_def_property_range(prop, 0, 100);
-       RNA_def_property_ui_text(prop, "GOP Size", "Distance between key frames");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_buffersize", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_buffer_size");
-       RNA_def_property_range(prop, 0, 2000);
-       RNA_def_property_ui_text(prop, "Buffersize", "Rate control: buffer size (kb)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_packetsize", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.mux_packet_size");
-       RNA_def_property_range(prop, 0, 16384);
-       RNA_def_property_ui_text(prop, "Mux Packet Size", "Mux packet size (byte)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_autosplit", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "ffcodecdata.flags", FFMPEG_AUTOSPLIT_OUTPUT);
-       RNA_def_property_ui_text(prop, "Autosplit Output", "Autosplit output at 2GB boundary");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
-       prop= RNA_def_property(srna, "ffmpeg_lossless_output", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "ffcodecdata.flags", FFMPEG_LOSSLESS_OUTPUT);
-       RNA_def_property_boolean_funcs(prop, NULL, "rna_RenderSettings_ffmpegsettings_lossless_output_set");
-       RNA_def_property_ui_text(prop, "Lossless Output", "Use losslecc output for video streams");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 
-       /* FFMPEG Audio*/
-       prop= RNA_def_property(srna, "ffmpeg_audio_codec", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.audio_codec");
-       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-       RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items);
-       RNA_def_property_ui_text(prop, "Audio Codec", "FFMpeg audio codec to use");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_audio_bitrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_bitrate");
-       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-       RNA_def_property_range(prop, 32, 384);
-       RNA_def_property_ui_text(prop, "Bitrate", "Audio bitrate (kb/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-       
-       prop= RNA_def_property(srna, "ffmpeg_audio_volume", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_float_sdna(prop, NULL, "ffcodecdata.audio_volume");
-       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-       RNA_def_property_range(prop, 0.0f, 1.0f);
-       RNA_def_property_ui_text(prop, "Volume", "Audio volume");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-#endif
-
-       // the following two "ffmpeg" settings are general audio settings
-       prop= RNA_def_property(srna, "ffmpeg_audio_mixrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_mixrate");
-       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-       RNA_def_property_range(prop, 8000, 192000);
-       RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
-       prop= RNA_def_property(srna, "ffmpeg_audio_channels", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, "ffcodecdata.audio_channels");
-       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-       RNA_def_property_enum_items(prop, audio_channel_items);
-       RNA_def_property_ui_text(prop, "Audio Channels", "Audio channel count");
+       prop= RNA_def_property(srna, "ffmpeg", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "FFmpegSettings");
+       RNA_def_property_pointer_sdna(prop, NULL, "ffcodecdata");
+       RNA_def_property_flag(prop, PROP_NEVER_UNLINK);
+       RNA_def_property_ui_text(prop, "FFmpeg Settings", "FFmpeg related settings for the scene");
 
        prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "frs_sec");