diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2016-09-21 16:01:51 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2016-09-21 16:03:11 +0300 |
commit | a7e74791221e2ef9b44ee1b3eb9ece37785aa62a (patch) | |
tree | bdef7bcac914ea1330046baac05c52719c34cd7e /release/scripts/presets | |
parent | 2476faebd751fe7a250d7a496a1f56338b83d4e9 (diff) |
FFmpeg interface improvements
This patch changes a couple of things in the video output encoding.
{F362527}
- Clearer separation between container and codec. No more "format", as this is
too ambiguous. As a result, codecs were removed from the container list.
- Added FFmpeg speed presets, so the user can choosen from the range "Very
slow" to "Ultra fast". By default no preset is used.
- Added Constant Rate Factor (CRF) mode, which allows changing the bit-rate
depending on the desired quality and the input. This generally produces the
best quality videos, at the expense of not knowing the exact bit-rate and
file size.
- Added optional maximum of non-B-frames between B-frames (`max_b_frames`).
- Presets were adjusted for these changes, and new presets added. One of the
new presets is [recommended](https://trac.ffmpeg.org/wiki/Encode/VFX#H.264)
for reviewing videos, as it allows players to scrub through it easily. Might
be nice in weeklies. This preset also requires control over the
`max_b_frames` setting.
GUI-only changes:
- Renamed "MPEG" in the output file format menu with "FFmpeg", as this is more
accurate. After all, FFmpeg is used when this option is chosen, which can
also output non-MPEG files.
- Certain parts of the GUI are disabled when not in use:
- bit rate options are not used when a constant rate factor is given.
- audio bitrate & volume are not used when no audio is exported.
Note that I did not touch `BKE_ffmpeg_preset_set()`. There are currently two
preset systems for FFmpeg (`BKE_ffmpeg_preset_set()` and the Python preset
system). Before we do more work on `BKE_ffmpeg_preset_set()`, I think it's a
good idea to determine whether we want to keep it at all.
After this patch has been accepted, I'd be happy to go through the code and
remove any then-obsolete bits, such as the handling of "XVID" as a container
format.
Reviewers: sergey, mont29, brecht
Subscribers: mpan3, Blendify, brecht, fsiddi
Tags: #bf_blender
Differential Revision: https://developer.blender.org/D2242
Diffstat (limited to 'release/scripts/presets')
-rw-r--r-- | release/scripts/presets/ffmpeg/DV.py | 14 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/DVD (note_colon_ this changes render resolution).py (renamed from release/scripts/presets/ffmpeg/DVD.py) | 0 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/SVCD.py | 24 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/VCD.py | 24 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/h264 in MP4.py | 18 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/h264 in Matroska for scrubbing.py | 14 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/h264 in Matroska.py (renamed from release/scripts/presets/ffmpeg/h264.py) | 2 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/ogg_theora.py (renamed from release/scripts/presets/ffmpeg/theora.py) | 1 | ||||
-rw-r--r-- | release/scripts/presets/ffmpeg/xvid.py | 4 |
9 files changed, 37 insertions, 64 deletions
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 |