title: Problems transcoding GoToMeeting output using FFmpeg
body: <p>I'm having a nightmare of a time transcoding output from GoToMeeting, recorded using the latest OS X version, to something web-playable. No matter what settings I use, I end up with time syncing problems, at least with this particular recording.</p>
  
  <p>The <code>.mov</code> file looks like this. Note that it's variable framerate, and because it's mostly just a screencast of a PowerPoint presentation with occasional mouse movement, the output should be VFR too to produce a small file yet still preserve occasional motion.</p>
  
  <pre><code>$ ffmpeg -i original.mov
  ffmpeg version N-58273-g18df75f Copyright (c) 2000-2013 the FFmpeg developers
    built on Nov 19 2013 10:34:42 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
    configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libass --enable-libcelt --enable-libfaac --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --prefix=/usr/local
    libavutil      52. 53.100 / 52. 53.100
    libavcodec     55. 43.101 / 55. 43.101
    libavformat    55. 21.100 / 55. 21.100
    libavdevice    55.  5.100 / 55.  5.100
    libavfilter     3. 91.100 /  3. 91.100
    libswscale      2.  5.101 /  2.  5.101
    libswresample   0. 17.104 /  0. 17.104
    libpostproc    52.  3.100 / 52.  3.100
  [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f822980a000] decoding for stream 0 failed
  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mov':
    Metadata:
      major_brand     : qt
      minor_version   : 537199360
      compatible_brands: qt
      creation_time   : 2014-03-20 02:09:22
    Duration: 03:08:26.72, start: 0.000000, bitrate: 75 kb/s
      Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 1368x728 [SAR 1:1 DAR 171:91], 20 kb/s, 0.60 fps, 600 tbr, 600 tbn, 1200 tbc (default)
      Metadata:
        creation_time   : 2014-03-20 02:09:22
        handler_name    : Apple Alias Data Handler
      Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 47 kb/s (default)
      Metadata:
        creation_time   : 2014-03-20 02:09:22
        handler_name    : Apple Alias Data Handler
      Stream #0:2(eng): Data: none (rtp  / 0x20707472), 6 kb/s
      Metadata:
        creation_time   : 2014-03-20 02:09:22
        handler_name    : Apple Alias Data Handler
      Stream #0:3(und): Data: none (rtp  / 0x20707472), 0 kb/s
      Metadata:
        creation_time   : 2014-03-20 02:09:22
        handler_name    : Apple Alias Data Handler
  </code></pre>
  
  <p>The <code>.mov</code> file (which I unfortunately cannot publicly post) plays back properly in any application I use: VLC, Media Player Classic, and QuickTime. However, playing the transcoded output always exhibits the following symptoms:</p>
  
  <ul>
  <li>Audio out of sync with what the video is showing, sometimes to the order of minutes off towards the end of this three hour recording</li>
  <li>In the case of Media Player Classic, clicking a spot on the timeline actually moves the playhead to a spot on the timeline <em>near</em> where I clicked, but not directly on it.</li>
  </ul>
  
  <p>There are the arguments I'm using for a <code>.mp4</code> encoding that is playable in all browsers that support H.264. Note that this is on Windows but Linux exhibits the same problems.</p>
  
  <p><code>ffmpeg.exe -y -i original.mov -i watermark.png -filter_complex "[0:v] crop=1184:720:178:6,scale=1184:720,setsar=1/1; [0:v][1:v] overlay=1242:648 [0:v]" -vcodec libx264 -acodec libvo_aacenc -q:a 80 -crf 30 -ac 1 -ar 16000 -strict -2 -profile:v baseline -level 3 outout.mkv</code></p>
  
  <p>The arguments, other than those that are self-explanatory or trivial:</p>
  
  <ul>
  <li><code>-filter_complex</code>: Crop excess letterboxing/pillarboxing from the video and set the aspect ratio to 1:1 for square pixels (something Safari needed), then overlay a watermark from a PNG and resize the output to 720p</li>
  <li><code>-crf 30</code>: encode the video at constant quality, variable bitrate</li>
  <li><code>-ac 1 -ar 16000</code>: encode with mono audio at 16 KHz</li>
  <li><code>-strict -2 -profile:v baseline -level 3</code>: encode using FFmpeg's "experimental" H.264 encoder using the Baseline level 3 profile for web compatibility</li>
  </ul>
  
  <p>Note that yes, this goes to an MKV container initially because, for some reason, encoding directly to a <code>.mp4</code> container hangs FFmpeg. I then use <code>-acodec copy -vcodec copy</code> to copy the audio and video streams directly into a <code>.mp4</code> container. Finally I pass the output through MP4Box to interleave it so it can be progressively downloaded.</p>
  
  <p>When transcoding, FFmpeg does drop frames, which I suspect is related to the problem, with output like this:</p>
  
  <pre><code>FFmpeg: frame=  232 fps= 26 q=24.0 size=    5983kB time=00:32:44.57 bitrate=  24.9kbits/s dup=0 drop=1487
  </code></pre>
  
  <p>When I then later attempt to mux it into the <code>.mp4</code> container from this temporary <code>.mkv</code> container, I get a flood of warnings like this:</p>
  
  <pre><code>[mp4 @ 0297cd00] Non-monotonous DTS in output stream 0:0; previous: 6341306, current: 6007024; changing to 6341307. This may result in incorrect timestamps in the output file.
  </code></pre>
  
  <p>Now I wouldn't be surprised if there is indeed some problem with the source file. However, if so, I need to definitively prove just <em>how</em> it's broken.</p>
  
  <p>Any thoughts?</p>