title: How can I mux a MKV and MKA file and get it to play in a browser?
body: <p>I'm using ffmpeg to merge .mkv and .mka files into .mp4 files. My current command looks like this:</p>
  
  <pre><code>ffmpeg -i video.mkv -i audio.mka output_path.mp4
  </code></pre>
  
  <p>The audio and video files are pre-signed urls from Amazon S3. Even on a server with sufficient resources, this process is going very slowly. I've researched situations where you can tell ffmpeg to skip re-encoding each frame, but I think that in my situation it actually does need to re-encode each frame.</p>
  
  <p>I've downloaded 2 sample files to my macbook pro and have installed ffmpeg locally via homebrew. When I run the command</p>
  
  <pre><code>ffmpeg -i video.mkv -i audio.mka -c copy output.mp4
  </code></pre>
  
  <p>I get the following output:</p>
  
  <pre><code>ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
    built with Apple LLVM version 8.1.0 (clang-802.0.42)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
    libavutil      55. 58.100 / 55. 58.100
    libavcodec     57. 89.100 / 57. 89.100
    libavformat    57. 71.100 / 57. 71.100
    libavdevice    57.  6.100 / 57.  6.100
    libavfilter     6. 82.100 /  6. 82.100
    libavresample   3.  5.  0 /  3.  5.  0
    libswscale      4.  6.100 /  4.  6.100
    libswresample   2.  7.100 /  2.  7.100
    libpostproc    54.  5.100 / 54.  5.100
  Input #0, matroska,webm, from '319_audio_1498590673766.mka':
    Metadata:
      encoder         : GStreamer matroskamux version 1.8.1.1
      creation_time   : 2017-06-27T19:10:58.000000Z
    Duration: 00:00:03.53, start: 2.831000, bitrate: 50 kb/s
      Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
      Metadata:
        title           : Audio
  Input #1, matroska,webm, from '319_video_1498590673766.mkv':
    Metadata:
      encoder         : GStreamer matroskamux version 1.8.1.1
      creation_time   : 2017-06-27T19:10:58.000000Z
    Duration: 00:00:03.97, start: 2.851000, bitrate: 224 kb/s
      Stream #1:0(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 30 tbr, 1k tbn, 1k tbc (default)
      Metadata:
        title           : Video
  [mp4 @ 0x7fa4f0806800] Could not find tag for codec vp8 in stream #0, codec not currently supported in container
  Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
  Stream mapping:
    Stream #1:0 -&gt; #0:0 (copy)
    Stream #0:0 -&gt; #0:1 (copy)
      Last message repeated 1 times
  </code></pre>
  
  <p>So it appears that the specific encodings I'm working with are vp8 videos and opus audio files, which I believe are incompatible with the .mp4 output container. I would appreciate answers that cover ways of optimally merging vp8 and opus into .mp4 output or answers that point me in the direction of output media formats that are both compatible with vp8 &amp; opus and are playable on web and mobile devices so that I can bypass the re-encoding step altogether.</p>
  
  <p>EDIT:</p>
  
  <p>Just wanted to provide a benchmark after following LordNeckbeard's advice:</p>
  
  <pre><code>4 min 41 second video transcoded locally on my mac
  
  LordNeckbeard’s approach : 15 mins 55 seconds (955 seconds)
  Current approach : 18 mins 49 seconds (1129 seconds)
  
  18% speed increase
  </code></pre>