[FFmpeg-user] Mulitple output files from one -map?

Moritz Barsnick barsnick at gmx.net
Wed Aug 26 10:19:33 CEST 2015

Hi Jonathan,

On Wed, Aug 26, 2015 at 14:11:05 +1200, Jonathan Viney wrote:

> high.mp4 is encoded correctly with the contents of output2, but
> medium.mp4 and low.mp4 are copies of input1.mkv.

Each new output file triggers a new set of output options. So strictly,
those are probably not "copies" but separate encodes with default
options (whatever ffmpeg applies by default to an mpeg4 container).

> Is there a way to encode multiple copies of output2 using -map?
> Specifying -map "[output2]" more than once causes errors saying it's
> already been used.

"-map" maps the _inputs_ to the filters/encoders. There are some nice
graphs here, and the solution(s) to your problem:

> Inserting a split=3 filter into the filter chain works fine and allows
> each output to be mapped individually:

Correct, now you get your intended outputs, but they're encoded
multiple times.

> Is that the best way to do this or can -map be used somehow? Would the
> split filter potentially be doing extra frame copies unnecessarily?
> I'm using current ffmpeg head.

No, that's not the best way. Don't worry about the frame copies - it's
the encodes that gobble up your CPU.

You're looking for the "tee" muxer:

  "The tee muxer can be used to write the same data to several files or
   any other kind of muxer. It can be used, for example, to both stream
   a video to the network and save it to disk at the same time.

   It is different from specifying several outputs to the ffmpeg
   command-line tool because the audio and video data will be encoded
   only once with the tee muxer; encoding can be a very expensive

ffmpeg -i input1.mkv -i input2.mkv -filter_complex
"myfilter[output1][output2]" -map "[output1]" -f null /dev/null -map
"[output2]" -y -f tee "high.mp4|medium.mp4|low.mp4"

(I think you now need to add "-c:v foo -c:a bar", as it seems that
using the tee muxer requires you to explicitly map input streams, and
to explicitly give encoding options, as ffmpeg can't determine


More information about the ffmpeg-user mailing list