One reason I hate iTunes.

I’ve always hated iTunes. It’s a huge pile of bloatware and it’s slow as poo. It’s like 100 mb or more for an mp3 player. I remember winamp playing mp3s when it was a 500k download. Anyway.

I keep all my music on a Linux machine running samba. This way it’s available to every machine in the house. When I had Winamp on all my machines this was wonderful. But now that I’m forced into iTunes (thanks to having an iPhone), it turns out to be a major pain. In iTunes I unchecked the box for “let iTunes keep my libary organized” to prevent it from copying the entire library to each computer’s local disk. Initially adding my library of ~4000 tracks to iTunes takes over an hour (100 mbit wire) – it would take about 5 minutes in Winamp, even reading the ID3 tags for each track as it was added (rather than lazily as the song was played).

But the thing that iTunes does that is so annoying it prompted me to write this whiny rant is:

iTunes "Song Not Found"
iTunes 'Song Not Found'

If, for some reason, my M: drive (where the Samba share is mapped) is not connected when iTunes starts, every song in the library gets this “!” exclamation point of doom. If I attempt to play any of these tracks, I am given the option to locate the file. Nice in theory, but locating all 4000 tracks isn’t realistic. If I quit iTunes, reconnect the M: drive, and reopen iTunes, the ! persists. The only solution I’ve found to this is deleting the entire library from iTunes and re-adding it, which as I said, takes an extremely long time.

I have other reasons for hating iTunes, this is a blog, not a book.

One-click converting .avi to .mp4 for iPod or iPhone

After a lot of searching for an easy way to do this, I stumbled onto WinFF, which is a gui wrapper around ffmpeg, a GPL’d MPEG encoder. It worked pretty well out of the box, but for all of the AVIs I’d recorded with my old camera (Canon Powershot A540) it would fail immediately with this error:

Audio resampler only works with 16 bits per sample. patch welcome.

After some searching it seems this is related to a known bug which was apparently fixed in February 2009. I set out to find a newer ffmpeg.exe (which is what WinFF calls to do the actual conversion). I found some Win32 builds of ffmpeg here but found that they all claimed to not know the “libfaac” codec. After some more digging I learned that libfaac (the audio codec for MP4 for iPod/iPhone) is no longer considered free software and was dropped from the repository in mid-April. Fortunately there were older builds available, and I grabbed the one dated 2009-04-01, extracted the ffmpeg.exe into my WinFF directory and voila, it worked.

Old ffmpeg.exe:

C:\Documents and Settings\Evan>"C:\Program Files\WinFF\ffmpeg.exe" -version
FFmpeg version SVN-r15986, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  configuration: --extra-cflags=-fno-common --enable-memalign-hack --enable-pthr
eads --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-libtheora
--enable-libspeex --enable-libfaac --enable-libgsm --enable-libx264 --enable-lib
schroedinger --enable-avisynth --enable-swscale --enable-gpl
  libavutil     49.12. 0 / 49.12. 0
  libavcodec    52. 6. 0 / 52. 6. 0
  libavformat   52.23. 1 / 52.23. 1
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 6. 1 /  0. 6. 1
  built on Dec  3 2008 01:59:37, gcc: 4.2.4
FFmpeg SVN-r15986
libavutil     49.12. 0 / 49.12. 0
libavcodec    52. 6. 0 / 52. 6. 0
libavformat   52.23. 1 / 52.23. 1
libavdevice   52. 1. 0 / 52. 1. 0
libswscale     0. 6. 1 /  0. 6. 1

New ffmpeg.exe:

C:\Documents and Settings\Evan>"C:\Program Files\WinFF\ffmpeg.exe" -version
FFmpeg version SVN-r18306, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-memalign-hack --prefix=/mingw --cross-prefix=i686-ming
w32- --cc=ccache-i686-mingw32-gcc --target-os=mingw32 --arch=i686 --cpu=i686 --e
xtra-cflags=-fno-common --enable-avisynth --enable-gpl --enable-zlib --enable-bz
lib --enable-libgsm --enable-libfaac --enable-pthreads --enable-libvorbis --enab
le-libmp3lame --enable-libopenjpeg --enable-libtheora --enable-libspeex --enable
-libxvid --enable-libfaad --enable-libschroedinger --enable-libx264
  libavutil     50. 2. 0 / 50. 2. 0
  libavcodec    52.22. 3 / 52.22. 3
  libavformat   52.32. 0 / 52.32. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 7. 1 /  0. 7. 1
  built on Apr  2 2009 03:25:40, gcc: 4.2.4
FFmpeg SVN-r18306
libavutil     50. 2. 0 / 50. 2. 0
libavcodec    52.22. 3 / 52.22. 3
libavformat   52.32. 0 / 52.32. 0
libavdevice   52. 1. 0 / 52. 1. 0
libswscale     0. 7. 1 /  0. 7. 1

This also works great for encoding videos to XviD, which shrinks them to about 10-20% of their original size, making it much faster (in some cases, possible) to upload them to sharing sites.