Over the last few years I have tried too many free transcoding tools including: MediaCoder, Handbrake, Super, Format Factory, Any Video Converter, BeSweet and almost every other free tool I could download (thanks especially to Doom9 for their help over the years).

For the last few years, my stable has been MediaCoder, although I have had a love-hate relationship with its stability between versions (introduction of bugs), the annoyingly periodic A/V synchronisation issues that happen for me and other general problems that occur seemingly randomly.

Recently however I discovered XMedia Recode. I am absolutely delighted and I highly recommend this software! It is a German site, but it can be viewed in English through Google Translate.

Of special mention, I had a home DVD that would correctly play on a DVD player but would not correctly play on the 3 different PCs that I tried. From one of those PCs, XMedia Recode actually properly converted this DVD, even though the PC couldn’t properly play it! Go figure!

Its major features include: batch processing, AVISynth support, a whole swag of video and audio processing options (including cropping, colour correction, aspect ratio selection, zoom, direct stream copy, multi-pass encoding, volume correction and normalisation, and the adjustment of the framerate, bitrate and resolution) and more than 30 profiles/templates for various devices such as Pocket PC, iPod, iPhone, PSP and PS3.

What is it that they say about German engineering?…

This is good, reliable, working software. In fact, it is the best free transcoder I have found – so I take off my hat to you Sebastian Dörfler.

I was looking for a way to transcode a bunch of medium quality Mp4 videos into good quality MPEG-2 formatted video so I could then make them into a DVD.

I had problems with my favourite transcoder (MediaCoder) and also a bunch of other transcoders that I unsuccessfully tried.

[Note: I use VLC media player to play my media files. Since VLC has no requirement for codecs to be installed on one’s computer, it turns out I didn’t notice that some of the codecs on my computer were corrupt. After working around the problem with the solution I discuss below, I found that I couldn’t even open the MP4 files in Nero ShowTime – I would get a StackHash_1703 error when it crashed. The root cause of the problem that prevented me from using the transcoders I tried was a corruption of codecs from my installation of Nero. The root cause of the problem has been solved by applying an update to Nero, and now I can once again use my favourite MediaCoder for everything…]

However before I solved that root cause problem, the following is what I did.

I found that AviDemux 1.4 successfully converted the videos to MPEG-2, but version 1.5 would give an error. But, even after using version 1.4 to do the conversion, the MPEG-2 videos were not compliant with DVD standards. From here though I could then use MediaCoder to add the borders I wanted, increase the brightness, increase the volume, deinterlace the video and convert it to 25 frames per second for PAL. But, I wasn’t happy about doing double encoding and so I wanted a better solution.

And so we finally come to the alternative solution that worked very well for me and forced me to learn some lower-level details about transcoding. This solution required the following tools:

ffdshow – a DirectShow and VFW codec for decoding/encoding many video and audio formats

AviSynth 2.5.8 – a powerful tool for video post-production that provides ways of editing and processing videos, and the Decomb plugin

QuEnc 0.72 – a tool that uses a built in FFMPEG library to encode from an AviSynth Script file to a raw MPEG-1/MPEG-2(VCD,SVCD,DVD) video stream

While learning the AviSynth syntax, I found it very useful to open the AviSynth script in VirtualDubMod so I could immediately see and confirm the effects of the script on the video.

I created the following AviSynth user-defined function, and put it into a file named ConvertCommon.avsi:

This user-defined function is specific to the video processing I wanted to perform on all the MP4 files in my batch. It resizes the video to the size and aspect ratio that I carefully pre-determined, converts the colour to YV12, deinterlaces the video, converts it to 25 frames per second, tweaks the brightness and contrast, adds letterboxing to make the final video size 720×576 for PAL DVD compliance, and amplifies the volume by 3 decibels.

I also stumbled on the following AVS2DVD Batch Script which automates the use of QuEnc on all the AviSynth scripts in a particular folder, and also goes even further to create DVD-Video files. This provided me with a good starting point for automating the conversion of my MP4 files. There were however three issues I has with that script (for my purposes):

I didn’t want to manually create AviSynth Script files for every MP4 file in the batch I wanted to process – because I wanted the exact same post-processing to occur to all the videos.

I needed to edit the resulting MPEG-2 videos so I didn’t want to automatically convert them to DVD-Video files.

It was using the command-line syntax of an older version of QuEnc, which errored in the new version.

Below is the modified batch script which loops through all of the MP4 files in a specified folder, creates a temporary AviSynth script which calls my user-defined function, and passes the temporary script to QuEnc with PAL DVD-compliant settings.

@SET QBitrate=3000
@SET QMaxBitrate=9000
@REM Set to the max bitrate minus the sum of all the audio track bitrates. For DVD, 9800-xxx
@SET QDC=10
@SET QPasses=2
@SET QMPEGType=2
@SET QMPEGMuxProfile=DVD
@SET QGOPSize=15
@SET QMaxBFrames=2
@SET QAspectRatio=1:1
@SET QAudioCodec=AC3
@SET QAudioBitrate=192
@REM AC3 @ 192/256 kbps for stereo and 384/448 kbps for 5.1ch is recommended
@SET QHQ=
@REM Leave QHQ blank if you want High Quality turned on, otherwise set it to no
@SET QVBR=
@REM Leave QVBR blank if you want VBR turned on, otherwise set it to no
@SET QSCENE=no
@REM Leave QSCENE blank if you want Scene Detection turned on, otherwise set it to no
@SET QTRELL=
@REM Leave QTRELL blank if you want Trellis Quant turned on, otherwise set it to no
@SET QCGOP=no
@REM Leave QCGOP blank if you want to use Closed GOP, otherwise set it to no
@SET QInterlace=no
@REM Leave QInterlace blank if you want to use Interlaced Encoding, otherwise set it to no
@SET QExtreme=no
@REM Leave QExtreme blank if you want to use Extreme encoding, otherwise set it to no
@SET QCMatrix=no
@SET QCMatrixFile=
@REM If you wish to use a Custom Matrix, leave QCMatrix blank and add your file path to QCMatrixFile,
@REM otherwise set QCMatrix to no, and leave QCMatrixFile blank.

@SET QCMD=-auto -close
@REM Use for additional parameters such as Silent, Auto, Close and Shutdown