x265 – a multithreaded hevc encoder

x265logo

A new HEVC encoder has been released by MulticoreWare – the x265 encoder.

This tool is not being directly developed by the x264 developers, but they have tentatively thrown their support behind it as it should remain open source software.  Discussion about its release and development can be found on the Doom9 forums.

Tom’s Hardware has also done an early evaluation of the speed/psnr of this release.  They claim it encodes at 4 fps on a Core i5 processor – quite a bit faster than the reference encoder.  However it doesn’t offer near as many options for encoding as the reference encoder and only uses a simple GoP with 4 reference frames using P-frames – I would guess this is just the standard encoder_lowdelay_main.cfg we’ve tested with before.  It does produce good results, but it kind of stinks to be locked into it without the ability to tinker.

I haven’t done a full encode with this alpha yet but I have uploaded a copy of the program along with the release notes: x265 alpha release.

Some things to note are that it seems x265.exe automatically sets IDR to output a closed GoP – so seeking will work fine in these files.  It also has an option to set ‘–gops’ whereby you can set the number of GoPs to encode concurrently, which is essentially the exact same thing we did previously with the reference encoder by cutting our source into individual GoPs.  It’s just much more convenient here!

Strongene Lentoid HEVC Encoder – fun with Graphedit

Strongene has released a new HEVC directshow encoder as well as an updated version of their HEVC decoder and tools to mux hevc/audio into flv files for playback through any directshow media player.  You can find their latest releases here:

http://strongene.com/en/downloads/downloadCenter.jsp

The updated decoder filter has support for additional fourcc codes and will now natively decode hm10, HM10, hevc, and HEVC files which makes it much  more convenient for viewing raw hevc video streams that you may have created with the HM11.0 reference encoder.

But the really interesting product they’ve now released is their HEVC encoder.  I haven’t done any deep testing with it yet but here are the options it gives you right now:

lentoidenc01lentoidenc02

 

Not much in the way of options – with the Lentoid HEVC encoder you won’t have to set up GOPs or anything like that.  What we do have access to is the IDR period which defines a GOP.  Seeking works flawlessly with the output files so we can assume this is using a closed GOP.  You have two options for rate control:  ABR or constant QP.  ABR tries to hit a specific data rate while cQP simply encodes each frame with a static QP, much as my previous testing with the reference encoder has done.  The Lentoid Encoder is multithreaded and its speed is much greater than the HM10.1 and HM11.0 reference encoders, but still far from speedy.  I haven’t done any full tests yet but I’d hazard to guess it is 2-4 times faster than TAppEncoder right now.  I’ll be testing for quality differences in the future.

We can’t see any of the other options that the encoder is using – the number of reference frames, whether it’s using P frames or B frames, what search range it uses for ME.  It would be preferable to have these options to play with, but the encoder does seem to do a fair job with whatever presets it uses.  However, it is a directshow filter so how do we go about encoding with it?

Graphedit, of course!  Here’s a brief walkthrough:

To use the Lentoid HEVC encoder you’ll want to go and grab a copy of GraphStudio.  Grab the Lentoid HEVC Encoder filter from the link above if you haven’t already.

From the main screen select ‘Graph’ and then ‘Insert Filter’.  A list of available Directshow filters will pop up.  First we need to open a source file so select ‘ File Source (async)’ and find the file you’d like to work with.  I’d recommend it be a file format that can be easily played back by ffdshow or lavfilters.

lentoidenc03

 

Once you’ve added your source we first need to decode it.  For myself, I like using LAV filters on my home system so first I selectLAV Splitter.  Click on the ‘out’ pin from your source file and drag an arrow to the ‘input’ pin of LAV Splitter.  If it worked correctly you’ll now see pins representing all of the media in your source file which LAV Splitter can recognize.  Next add LAV Video Decoder.  Click on the ‘video’ pin of LAV Splitter and drag the arrow to the ‘input’ pin of LAV Video Decoder.  Next add Lentoid HEVC Encoder.  Drag an arrow from the ‘output’ pin on LAV Video Decoder to the ‘XForm In’ pin of the Lentoid HEVC Encoder.

To set options for the encoder either double click on the Lentoid HEVC Encoder box or right click on it and select ‘properties’.  Here is where you can set your intra period, bitrate/QP, and the number of threads you’d like to encode with

.  Once that’s done we can set the output file and Graphedit will automatically fill in the muxer.  So add ‘File writer’ with whatever output name you’d like as an .flv file.  Click and drag the arrow from the ‘XForm Out’ pin of the Lentoid HEVC Encoder to the ‘in’ pin of your output file.  The FLV muxer will automatically be added.  Now go back to the LAV Splitter, click on the ‘audio’ pin and drag it to the ‘in 1’ pin of the Monogram FLV muxer.

That’s it!  You’re ready to encode now.  Your graph should look something like this:

lentoidenc04

 

To begin the encode click the green ‘play’ arrow along the top bar.  The timecode will progress rapidly, but it isn’t accurate to show what percentage of the encode has actually been completed and will show the encode at 100% complete almost immediately.  Nonetheless your computer will keep chugging along and in time it will give you a completed file.

Only one problem….

_sigh_watermarked

Watermarked 🙁

What a shame – this would have been a much easier workflow to use compared to the HM11.0 reference encoder and Strongene could have gained some traction with their solution before the big players enter the field, but with watermarking there’s no practical use for the software aside from testing.  So as interesting as this new software is it still leaves me wanting something more robust.  I’m itching to do some archiving.

Happy Encoding!

 

HM11.0 reference encoder released

A new version of the reference encoder has been released!  I’ve uploaded a copy here: http://www.mediafire.com/?amk4ba5fh3apph9 .  It was once again compiled by JEEB and released on the Doom9 forums: http://forum.doom9.org/showthread.php?p=1632870#post1632870.

From his post:

The biggest change now is that the configuration files actually contain the profile and level. Before this, unless you actually remembered to add those two, your streams would be invalid.

So I guess the streams we’ve made up until now weren’t technically valid – oops! 🙂  Otherwise it says performance should be largely the same but it does say some changes have been made to RateControl and there have been other bugfixes so it sounds like an update is warranted.

Originally Posted by jct-vc
Compared to the release candidate we decided to revert a patch that caused problems with conformance test bitstreams. We also made a change to only warn when profile and level are not set instead of failing.Compared to HM 10.1, HM 11.0 contains changes for rate control and a number of bug fixes. Performance in the common test conditions is not changed. We will still provide updated anchors with valid profile/level values within the next days.Please note, that there are still quite a few open issues in the bug tracker. Most of them are related to high level issues like parameter set handling and reference picture sets.

Any help with fixing these issues and reviewing patches, especially regarding conformance issues, are highly appreciated.

For details see:

https://hevc.hhi.fraunhofer.de/trac/hevc/report/16