I don’t have an iPod Video, nor am I likely to buy one considering that I already have a 40 GB third-generation iPod. However, the appearance of the tiny-screened iPod inspired me to try transferring video to my Palm Tungsten T3, with its high-resolution 480×320 pixel colour screen. It’s working very well.

Video on Palm

In order to play the video, I’m using TCPMP. It supports a wide range of codecs and formats, and it’s been able to handle almost everything I’ve tried.

There are a few limitations to be considered:

  • Upscaling in the player is not smooth, so the video should be of a size to fit into the screen area (either 480 pixels wide or 320 high, depending on the source aspect ratio).
  • I only have a 128 MB SD card on which to store the video.
  • The more intensive the processing requirements, the less time the batteries are going to last.

With that in mind, I’ve found that I can encode a 30 to 45 minute TV episode to fit within the space available with acceptable results. I’ve tried two-pass encoding, but haven’t really seen much improvement over a single pass—and it takes twice as long.

I’m using the following settings to fit a 1.85:1 widescreen broadcast into 128 MB:

  • 480×256 pixel picture size
  • MPEG-4 video codec at 320 kbps
  • 22050 Hz mono audio
  • MP3 audio codec at 32 kbps constant bitrate
  • MP4 file format

With these settings, a 25-minute piece uses about 65 MB, whilst 45 minutes needs 115 MB or so. The quality is tolerable, although some artifacts are noticeable in the background. Speech is good, but music exhibits the characteristic warbling of a low-bit-rate MP3. The encoding was approximately real time (i.e. the encoding time was the same as the source length) on my Ubuntu desktop (Pentium 4 2.6 GHz), and took only slightly longer on my iBook running OS X (PowerPC G4 1.2 GHz).

I used ffmpeg straight from the command line on Ubuntu (see my previous entry on how to enable MP3 etc. in ffmpeg). On OS X, you can use ffmpegX for a convenient GUI. In my opinion, the command-line method is a bit easier for repeated transcoding. I used the following command line:

ffmpeg -i INPUT_FILE -b 320 -s 480x256 -vcodec mpeg4 -ar 22050 \
-ac 1 -ab 32 -acodec mp3 -f mp4 OUTPUT_FILE

I’m going to have to pick up a larger SD card and try to encode things at slightly better quality. With a bigger card, I’ll also be able to try transcoding some full-length films.