Converting to 3gp

I wanted to play video on my Siemens M75. After some research, I found that the format is 3gp. Video files can be converted to this format using the Linux utility “ffmpeg“.

Some notes on preparing ffmpeg:
* the utility should be downloaded from CVS,
* --enable-amr_nb should be given to the configure script,
* additional code should be downloaded to support --enable-amr_nb (Makefile prints details).

I spent much time choosing options for the best quality. Unfortunately, I haven’t succeeded: sometimes video isn’t smooth. The best options for me are:
* size: 176×144,
* bit rate: 30kbps,
* frame rate: 12fps.

The page “Watching movies on your phone” suggest improvements, and I followed them. It seems preprocessing by mencoder and mplayer gives better results.

The improved method is hard to use for a set of files, so I decided to write a wrapper script. To my disappointment, I forget how to write bash scripts. As solution, I decided to write a Makefile:

%.track.avi: %.avi
  mencoder '$< ' -nosound \\
    -ovc lavc -lavcopts vcodec=h263 \\
    -vop expand=176:144,scale=176:-2 -o '$@' -ofps 12

%.track.wav: %.avi
  mplayer -vo null \\
    -ao pcm -af resample=8000,volume=+16db:sc '$<'
  mv audiodump.wav '$@'

%.3gp: %.track.avi %.track.wav
  ~/opt/ffmpeg/bin/ffmpeg -i '$(word 1,$+)' -i '$(word 2,$+)' \\
    -vcodec h263 -b 30 -r 12 \\
    -acodec amr_nb -ac 1 -ab 12 \\
    -map 0.0 -map 1.0  '$@'

Usage is simple:

$ make -f ~/bin/ `ls *avi | sed 's/avi$/3gp/'`

Leave a Reply