From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Encoder Panel Redesign

The current Output and Encoding panel under the Render Properties Editor is very unintuitive to use. It conflates video container formats with video codecs, making encoding video a very confusing process.

This proposal is heavily inspired by Rocketman’s proposal. Consider this v2.0, only because I haven't been able to reach Rocketman.


The Problem

  • The grouping and naming of presets are not clear. Leading to conflation of container format and codec.
  • Encoding parameters are confusing and self-contradictory sometimes.
  • No quality vs speed tradeoff control
  • Generally not a very pleasant place to be.
  • Can you guess what this combination of settings will output?
EncodingPanel273.png

Background

Browsing through the Blender source code, it seems there are 4 distinct codepath for animation output:

  • Frame Server
  • AVI Encoder
  • FFMPEG Encoder
  • Quicktime Encoder

Frame Server is not an encoder per se, so it has no place in this discussion, we can keep it as is.

There has been talks to drop AVI encoder and QuickTime encoder, which should be fine as FFMPEG can output both AVI and Quicktime formats. The only downside is that the current AVI encoder has access to VFW codecs installed on a Windows computer. FFMPEG does not. Similarly, on a Mac, the Quicktime encoder provides a way to offload the encoding task to OS X's QuickTime service, which is faster.

In the end, both AVI and QT are extra encoders that offer a bridge between Blender and the host OS. Ideally, we can drop AVI and QT and just use FFMPEG for all encoding and decoding needs. But AVI (RAW and JPEG) are used for proxy generation, and thus might be kept as FFMPEG has issues with VSE playback scrubbing.


The Proposal


Drop Legacy Encoders

If possible, drop AVI and QT encoder. On favour of using FFMPEG for all encoding services.

Redefine Output Format Enum

The current property file_format is a mixture of encoding engine selection and presets. (H264, MPEG, Ogg, Xvid are FFMPEG presets; while Quicktime, Frame Server, AVI Raw, etc, are different engines)

I propose the following list for Movie, staying true to the list of Image file formats.

  • AVI
  • MPEG2
  • MPEG4
  • Ogg Theora
  • Quicktime MOV

Encoding Panel Cleanup

With the container format decided, the encoding panel could be simplified to control just the video and audio codecs. Device specific parameters like mux rate should be hidden/removed as they offer little reason to exist outside of authoring device-specific videos(DVD/Blurays) straight from Blender.

It might look something like this:

EncodingPanel273B.png

The parameters will look slightly different depending on the selected codec. These differences are not shown in the mockups.

Device Profiles

So with UI so far, we can let the user confidently encode a video that is playable on most platforms. Frankly I think that's enough. Device-specific presets, when done correctly, would have to touch upon many aspect of Blender. Including Resolution, Pixel AR, Color profiles, and Framerate.

For reference, Here is a list of presets that comes with a commercial Encoder (Adobe Media Encoder CC)


The People

  • Developer Endorsement: Julian Eisel, Thomas Dinges
  • User Endorsement: Sebastian König, Bassam Kurdali, Mike Pan, and Gottfried Hofmann

Comments and Criticisms

AVI RAW and AVI JPEG native formats (Bassam)

This is a comment/ proposal about these formats, that I don't see handled yet in the mockup above. My Proposal is to elide the difference between ffmpeg and native ; basically the user doesn't care so we don't need to shove it in their face. Instead the workflow would be:

  1. Pick AVI as the container
  2. In Encoding 'RAW' and 'JPEG' would be available as codecs.

Specific Options for Specific Codecs (Bassam)

Some codecs might have different options (for instance the two above). Would it make sense for the encoding panel to adapt/ change slightly depending on the choice of codecs?

Completeness and Lossless formats (Bassam)

I don't think it is necessary or practical for Blender to be the final encoder, so it should be able to make:

  1. A few basic working formats that look reasonably ok, and play reasonably well cross platform (aka simple mode)
  2. One or more lossless formats that can be passed on to more 'heavy duty' transcoding applications.

» comment to this comment (emu): from my experience, Blender is still the best open-source video editing software a and there are people who use it that way. I believe there is a demand for high-compression codecs and it may even be useful to enable two-pass VBR encoding. This does not yet mean that many such formats need to be supported.