Update, 18-Aug-2012: I've changed to using an ffmpeg/mplayer combo to do this, as it's much more reliable and stable. See my new post for a breakdown.I tend to view a lot of video content on my first-generation iPod Touch. It's great for travelling, with its these-days-paltry 16GB capacity able to store well over a dozen half hour episodes of whatever I'm following at the time.
While there are some wonderful graphical encoders out there (HandBrake springs to mind), what I was looking for was something I could script. I know that HandBrake has a command line interface, but I prefer mencoder's support for embedded subtitle streams, which is something I use often.
If you're on a fairly recent SVN of mplayer (say >= r31363), you'll find that mencoder now supports a
x264encopts. This is important! The default is high, which the iPod explicitly doesn't support. What you need is baseline, leading to something like this:
|mencoder INPUT-FILE -o OUTPUT_FILE|
|-vf scale=480:-10,harddup||# resize the video to whichever height is suitable for the max 480px width|
|-sws 9||# Choose a really good scaler (lanczos)|
|-of lavf||# use lavf for output|
|-lavfopts format=mp4||# specifically, mp4|
|-oac faac||# AAC audio for output|
|-faacopts mpeg=4:object=2:raw:br=128||# Audio coding parmeters|
|-mc 0 -noskip||# Really work at keeping A/V sync|
|-ovc x264||# x264 video|
|-x264encopts nocabac: bframes=0: level_idc=30: global_header: threads=auto: subq=5: frameref=6: partitions=all: trellis=1: chroma_me: me=umh: bitrate=768: profile=baseline||Video coding parameters. Note the baseline|
|-aid 0 -sid 0||# Audio and subtitle tracks|
|-subfont-text-scale 4||# Better subtitle scaling for an iPod sized device|
(or, for a more cut n' paste friendly version:
mencoder INPUT-FILE -o OUTPUT-FILE -vf scale=480:-10,harddup -sws 9 -of lavf -lavfopts format=mp4 -oac faac -faacopts mpeg=4:object=2:raw:br=128 -mc 0 -noskip -ovc x264 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=768:profile=baseline -aid 0 -sid 0 -subfont-text-scale 4)
This transcodes the source in a single pass. Lots of people strongly advocate two-pass encoding, but really, I find the quality of a single pass encode good enough for the iPod screen. There's no denying that two-pass is higher quality, but the extra time to encode disposable content just isn't worth it in my opinion.