While I’m writing about video encoding, another task I did recently was encode a load of video files for my HTC Desire (a handset I’d strongly recommend for anyone). The main reason being that I like to watch something while pounding the threadmill in the gym.
A useful script to encode all files passed as parameters(s) (must all end in .avi) is:
#! /bin/bash
src="$*"
dst="_${*%%avi}mp4"
echo -en "Encoding $src\t\t\tPASS1"
ffmpeg -b 600kb -i "$src" -v 0 -pass 1 -passlogfile FF -vb 600Kb \
    -r 25 -an -threads 2 -y "$dst" /dev/null
echo -e "\tPASS2"
ffmpeg -b 600kb -i "$src" -v 0 -pass 2 -passlogfile FF -vb 600Kb \
    -r 25 -threads 2 -y -vol 1536 "$dst" /dev/null
rm FF-0.log