N900 Video Encoding

Contents

N900 Video Encoding

The N900 is a huge step up from the previous Internet Tablets when it comes to playing video files. It is now capable of playing full 480p (854x480) files encoded with a variety of codecs, particuarly H.263 (MPEG4 Part 2/Xvid) and H.264 (MPEG4 Part 10). However, it still has some limitations which you need to be aware of to successfully transcode files to play back on the N900.

Handbrake

Handbrake is a wonderful tool for doing transcoding that has specific support for DVDs as well as normal files. The latest version (0.94) has significantly improved DVD and H.264 support, making it the perfect tool for producing N900 ready files.

An N900 compatible profile

While Handbrake's 'Universal' and 'iPhone' profiles will product compatible files, it will do so at a lower quality level than the N900 supports, so its worth using a more optimised profile. The one I use is available here.

Preferred Formats

There are three aspects to deciding on the format of your media files:

  • The Video Codec
  • The Audio Codec
  • The Container format

Video Codec

The two codecs that most people will consider are H.263/XVid and H.264. Handbrake can produce files in both formats but today it heavily emphasizes H.264. At a given file size, H.264 will result in better looking video, at a cost in increased encoding time. This cost is worth it, especially in the Handbrake context, where there is only a single basic Xvid profile and no tweaking allowed.

The Audio Codec

On the audio side, the two main supported choices are MP3 and AAC. AAC is better than MP3 at the same bitrate so you should always chose AAC. MP3 support is only useful for compatibility.

The Container format

This one's easy. Handbrake can only produce mkv and mp4 files and the N900 only supports mp4 out of the box. mkv files have additional features, but the N900's media player doesn't support any of them, so don't feel deprived.

Extra codec support

The Decoders Support package adds support for some extra codecs and containers. Most particularly it adds support for mkv containers and ac3 audio tracks. As mentioned above, mkv container support isn't compelling. ac3 audio is interesting because most DVD audio tracks are encoded in ac3. This would allow you to copy the audio track without transcoding it. However, this is not necessarily ideal. Firstly, ac3 decoding will be done by the CPU, while AAC decoding is offloaded to a DSP which reduces power consumption. Secondly, you're not going to be able to take advantage of surround sound - meaning that storing a full 5.1 audio track wastes space.

You can also add Ogg Vorbis support to the N900 but that also suffers from lack of DSP acceleration.

So, I wouldn't recommend using any of these options even though they are available.

Frame rates

The N900 has very flexible framerate support. It will handle 24, 25 and 30 fps files without complaint and probably 60 fps too if you can find any videos that use it. Additionally it can handle variable-frame-rate files which will be what you get if you transcode anime DVDs. Handbrake is smart enough to handle these kinds of videos and my preset has the appropriate options turned on to do it.

Hardware limits

The N900 essentially supports H.264's Baseline@3.0 profile. This particularly means that features like CABAC and B-Frames are not supported. These limits are reflected in the preset I provided. From a resolution point of view, it definitely supports up to 854x480 and doesn't support 1280x720. The actual limit is somewhere in the middle, but I haven't nailed it down. In reality, it's pointless to even use 854x480 because that's bigger than the screen. I'll discuss ideal screen resolutions below.

On the audio side, there are no noticeable limitations. You will want to use AAC with a bitrate no more than 160kbit and 48KHz, which is what is used everywhere.

Software limits

The N900's default media player adds additional limitations - some of which will hopefull be fixed in due course.

Anamorphic resolution support

DVDs are stored at a resolution of 720x480 but displayed at either 640x480 (for 4:3 video) or 854x480 (for 16:9 video). This means that video frames are stored 'anamorphically' - meaning that they are displayed at a different size from what they are stored at. Particularly, this means that the video frames have non-square pixels. Unfortunately, the media player doesn't understand this and will display the video at 720x480, resulting in squashed or stretched video. So, you must resize the video in Handbrake to ensure pixels are square.

Streaming video

The media player supports streaming video from http urls, but you must be aware of two things. First, in Handbrake you must ensure the 'Web Optimized' checkbox is ticked for mp4 files. This is already in my preset. Without it, you cannot stream the files. Secondly, the buffering algorithm is not designed to handle high bitrate files that would play normally from local storage. This means that you'll see a lot of pausing and buffering messages. It seems the highest bitrate it will stream happily is about 1MBit/s including audio. The preset is optimized for local storage - you can tweak it to produce smaller files if you need to stream.

Choosing a resolution

As mentioned above, you'll have to resize all DVDs you try to transcode, and maybe other files too. So it's good to know what target resolutions to use.

4:3 DVDs

4:3 DVD video is easy to handle. Just resize to 640x480.

16:9 DVDs

For 16:9 DVDs, it's harder. 854x480 is a valid choice, but the N900 will have to scale it down to display, so a better choice is 800x448 - which exactly fits on the N900 display. This means you are throwing away vertical detail and bloating the file horizontally but it's the least worst choice without anamorphic support.

Letter box DVDs

Occasionally, you'll see a DVD with widescreen content inside a 4:3 frame - so the black borders are in the actual video. To make the video display nicely, you'll need to use handbrake's crop feature to cut out the black bars. This is a pretty involved process because you're cropping the original anamorphic frame but need to store it with square pixels. So you might crop to 720x360 (16:9 inside 4:3) and then store it as 720x408 to get square pixels. For even wider movie content, you're vertical resolution will be even lower (272 and 306 respectively for 2.35:1 content)

HD sources

If you're scaling down an HD source, you'll want to target 800x448 as well. If the file is a movie that is wider than 16:9, the vertical resolution will be lower than 448 - just set the width to 800 and maintain the aspect ratio. Essentially all HD content has square pixels.

Alternative Media Players

You can, of course, use vlc or mplayer to play back files and all of these limitations will be removed. In exchange, you won't get any DSP accelerated video - which will eat battery life and introduce a new set of limitations based on CPU power.