[FFmpeg-user] Mulitple output files from one -map?
barsnick at gmx.net
Wed Aug 26 10:19:33 CEST 2015
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
> 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