by Daniel Taylor on 2010-08-30 13:10
Transcoding is something of an art form whereby one must balance dozens of requirements, formats, parameters and more. Sometimes this can seem daunting for those that just want to know a little more information or want to step into the world of digital media. What follows are a culmination of best practices developed while building Bits on the Run over the last few years. This is by no means an exhaustive list but should give a good idea of some things to watch out for or remember after reading the basic Overview of Transcoding.
Always encode for a specific quality rather than relying on bitrates. With bandwidth availability increasing across the board there is no need for using a target bitrate unless you are targeting a specific limited device or the quality you wish to achieve is unrealistic within your bitrate constraints (in which case try lowering your quality expectations). To give concrete example using constant rate factor to encode H.264:
ffmpeg -i infile.avi -vcodec libx264 -vpre default -crf 21 -acodec libfaac -ab 128k output.mp4
The following two videos also demonstrate nicely the difference in bitrates required for the same dimensions to get the same visual quality from two very different videos (with a difference of almost 800kbps!) These were produced by a command very similar to the one above.
Avatar Trailer 720px wide: 1800kbps
Diggnation excerpt 720px wide: 1050kbps
As can be seen above these two very different videos can look the exact same quality with very different bitrates. It is a good example of how specific bitrates are not a good indicator of quality given changing dimensions, framerates, picture complexity and complexity of movement over time. When dealing with a large set of videos of varying qualities, sizes and complexities it is a good idea to always use constant quality settings.
There is no reason that you should ever scale video dimensions to be larger than the original input. You cannot get better quality by transcoding, and scaling up will do nothing but blur the video. The exception to this rule is of course a device with strict dimension limits, such as a phone where your video absolutely must be 800x480 pixels. Also keep in mind that video players will scale video to fit screens for you, so there is no need in general for you to do so during transcoding.
Upscaling 320px wide video to 480 and 720 pixels blurs the video
Try to always provide sane defaults that offer a good compromise between quality, size, transcoding time, etc. Be realistic and remember what devices and available bandwidths you are targeting. If your audience is mostly low-power phones and netbooks then don't encode 1080P content and expect them to be able to play it. Don't listen to random bloggers (including me) and use your own eyes and ears to choose defaults that work for you and your customers.
By default things should look acceptable
While this is really a general philosophy of Bits on the Run, this is extremely important when it comes to transcoding. Users will hang themselves if given enough rope. We've seen impossibly high and ridiculously low bitrate selections, dimensions, and other options. Along with sane defaults you should try to make the options as simple as possible, but provide enough to appease power users.
Handbrake: too many complex options
Bits on the Run template options: simple
As much as you might want to show up to the second statistics on transcode jobs and exact reasons for failures or issues, try to resist the temptations. Most people don't care, get confused, and really just want stuff to work. Focus on preventing failures and making sure all media transcode properly.
The following best practices pertain more specifically to services like Bits on the Run where many files are processed by a service-type backend.
You are likely to want to use really smart, really clever queue processing and management logic to make a transcoding cloud behave in the most efficient manner possible. My advice: don't. Stick with simple logic that won't get out of hand and treats most users fairly. Simple, fast, and easy to understand is key. You will never hit 100% efficiency and the more complex the queue logic becomes the harder it is to predict how small changes will affect the system. A good starting point for the logic is as follows:
When processing a lot of media on a farm of servers you need to find a compromise of quality, speed, and the number of servers in the farm. Using the slowest and best quality is not worth it in such a situation, because this costs you servers and time. The time spent encoding with a preset to save an extra 3% bandwidth has the potential to scare a customer away to faster services. Err on the side of too little quality or too few servers processing and they may leave as well.
Using Free and Open Source software like FFmpeg and libx264 is highly recommended. You get a community of video experts helping you, and they can be very friendly when you try to help back. You save money by not licensing large proprietary tools and you get some of the best quality output in the industry.
At Bits on the Run we regularly make use of the above as well as many other open source projects. Much of the transcoding system is written in Python. It's a great way to glue various components together, interact with databases and APIs, and to provide interactive object-oriented shells for job and queue management.
Hopefully this will give you a good idea of some of the best practices to follow when transcoding media after understanding the basic Overview of Transcoding. Remember that quality is more important than bitrate, unless your application requires a specific bitrate. Upscaling should always be avoided when possible. Provide sane defaults for users and make sure things work well without needing tweaks. If you have a queue system, keep it simple to save yourself future headaches. Have any other tips to leave? Add a comment below!
All copyrighted content is owned by the respective copyright holders and used in this post under fair use to show examples. The Avatar trailer and images are copyright Apple, Inc. The Diggnation exerpt is copyright Diggnation and Revision3. The Big Buck Bunny image is copyright Blender Foundation and used under the Creative Commons Attribution license.
by Daniel Taylor on 2010-06-22 12:08
This post will try to peel away some of the layers of confusion surrounding media conversion by describing how media are stored, why you might want to convert from one format to another, and tools you can use to do it.
Transcoding is usually something that happens behind the scenes. For example, when you take a video with a Flip or other handheld video camera and upload it to YouTube, the file is transcoded by YouTube into various formats for distributing and displaying to viewers. You don't see this happening, but it is why videos are not immediately viewable on the site after uploading them. Once the transcoding has finished, you are able to show the video to your users or friends.
To understand what transcoding is, you need to first understand how digital media are stored. A digital media file generally consists of a container with metadata information like the dimensions and duration of the file, along with any number of tracks. Commonly a media file contains an audio track, a video track, and sometimes a subtitle track. Each of these tracks has been encoded (using a codec) into a format that tries to maximize quality while minimizing file size. These encoded tracks are interleaved (or multiplexed) into the container, meaning that they are stored as something like this: a chunk of audio, a chunk of video, the next chunk of audio, the next chunk of video, and so on.
Transcoding is the process of taking digital media, extracting the tracks from the container, decoding those tracks, filtering (e.g. remove noise, scale dimensions, sharpen, etc), encoding the tracks, and multiplexing the new tracks into a new container. Transcoding is most commonly done to convert from one format to another, e.g. converting a DivX AVI file to H.264/AAC in MP4 for delivery to mobile devices, set-top devices, and computers. The basic pipeline looks like the following:
/ decode audio -> filter -> encode \ demultiplex -> decode video -> filter -> encode -> multiplex \ decode subtitles -> filter -> encode /
There are a number of reasons for transcoding your media. You may want to convert a high-quality original edit to a digital distribution format easily sent to customers over the Internet, like H.264/AAC in an MP4 container. Or you may want to convert your high-quality music library, stored in AAC or Vorbis, for your music player that only supports MP3 files. Often, you may want to target a specific platform or device, like Adobe Flash, that supports a limited set of formats and thus need to convert your media library to a suitable format for proper delivery. You may even have old MPEG2 HDV tapes that you want to transcode to H.264 High Profile to save 40% of the storage space while losing no noticeable quality.
Some things to keep in mind about transcoding:
* Quality is not lost with lossless formats, but the vast majority of formats are not lossless!
You will undoubtedly run into many new and confusing terms as you explore the digital media landscape. It's probably best to try and familiarize yourself with some of the more popular containers and codecs.
There are literally dozens of commonly used formats and many, many software packages that can handle converting between different formats for you, though the speed, quality, and supported input and output formats differ between much of the software. There are even online services setup specifically to transcode media for a fee. If you are willing to get your hands dirty it is quite easy to get free and open source tools that will handle most any format you throw at them.
There exist many third party services online that will transcode files (many for a small fee), such as Movavi Online Converter, Media Convert, Zamzar, and more. These services require that you upload the media file to them, then later download the transcoded result back to your system.
It is also possible to convert media files on your own computer, using both free / open source and proprietary software. Free tools such as Media Coder, Handbrake, and VirtualDub will let you convert and even do some basic editing. Quicktime, Any Video Converter, and many other software packages that can be bought offer these features as well. If you are more interested in getting your hands dirty, you can go right to the source of the tools most of these products use to do the actual transcoding: FFmpeg, FAAC, x264, and WebM.
If you're comfortable with the advanced tools, then using Free and Open Source software like FFmpeg and libx264 is highly recommended. You get a community of video experts helping you, and they can be very friendly when you try to help back. You save money by not licensing large proprietary tools and you get some of the best quality output in the industry.
Hopefully you found this brief overview helpful. Watch this space for more in-depth discussion on this subject including: transcoding your first video, selecting the optimal formats & codecs, choosing the right tools, and more. Learn more about Transcoding Best Practices here.