title: Using FFMPEG to reliably convert videos to mp4 for iphone/ipod and flash players
body: <p>I need to convert videos for use in both a flash player and the iphone/ipod touch.  I'm using the following batch script with ffmpeg:</p>
  
  <pre><code>@echo off
  ffmpeg.exe -i %1 -s qvga -acodec libfaac -ar 22050 -ab 128k -vcodec libx264 -threads 0 -f ipod %2
  </code></pre>
  
  <p>This always outputs an mp4 file, and I can always play it on my PC.  The videos also seem to play fine on my iphone 3GS.  But with some input files it won't work for older iphone versions (3G and iPod touch).  </p>
  
  <p>Here's the ffmpeg output from one such file:</p>
  
  <pre><code>D:\ffmpeg&gt;encode.bat d:\temp\recording.flv d:\temp\out.m4v
  FFmpeg version SVN-r18709, 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
  nable-avisynth --enable-gpl --enable-zlib --enable-bzlib --enable-libgsm --enabl
  e-libfaac --enable-libfaad --enable-pthreads --enable-libvorbis --enable-libtheo
  ra --enable-libspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid -
  -enable-libschroedinger --enable-libx264
    libavutil     50. 3. 0 / 50. 3. 0
    libavcodec    52.27. 0 / 52.27. 0
    libavformat   52.32. 0 / 52.32. 0
    libavdevice   52. 2. 0 / 52. 2. 0
    libswscale     0. 7. 1 /  0. 7. 1
    built on Apr 28 2009 04:04:42, gcc: 4.2.4
  [flv @ 0x187d650]skipping flv packet: type 18, size 164, flags 0
  Input #0, flv, from 'd:\temp\recording.flv':
    Duration: 00:00:07.17, start: 0.001000, bitrate: N/A
      Stream #0.0: Video: flv, yuv420p, 320x240, 1k tbr, 1k tbn, 1k tbc
      Stream #0.1: Audio: nellymoser, 44100 Hz, mono, s16
  [libx264 @ 0x13518b0]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE
  4.2
  [libx264 @ 0x13518b0]profile Baseline, level 4.2
  Output #0, ipod, to 'd:\temp\out.m4v':
      Stream #0.0: Video: libx264, yuv420p, 320x240, q=2-31, 200 kb/s, 1k tbn, 1k
  tbc
      Stream #0.1: Audio: libfaac, 22050 Hz, mono, s16, 128 kb/s
  Stream mapping:
    Stream #0.0 -&gt; #0.0
    Stream #0.1 -&gt; #0.1
  Press [q] to stop encoding
  frame=   90 fps=  0 q=-1.0 Lsize=     128kB time=6.87 bitrate= 152.4kbits/s
  video:92kB audio:32kB global headers:1kB muxing overhead 2.620892%
  [libx264 @ 0x13518b0]slice I:8     Avg QP:29.62  size:  7047
  [libx264 @ 0x13518b0]slice P:82    Avg QP:30.83  size:   467
  [libx264 @ 0x13518b0]mb I  I16..4: 17.9%  0.0% 82.1%
  [libx264 @ 0x13518b0]mb P  I16..4:  0.6%  0.0%  0.0%  P16..4: 23.1%  0.0%  0.0%
   0.0%  0.0%    skip:76.3%
  [libx264 @ 0x13518b0]final ratefactor: 57.50
  [libx264 @ 0x13518b0]SSIM Mean Y:0.9544735
  [libx264 @ 0x13518b0]kb/s:8412.6
  </code></pre>
  
  <p>My suspicion is that it has something to do with the audio encoding.  If so, does anyone know how to force it to reencode the audio to the proper format?  </p>
  
  <p>Any other ideas?</p>