[FFmpeg-user] External encoder support?
darkmoon at verizon.net
Fri May 23 04:53:12 CEST 2014
FFmpeg does nearly everything now except, so far as I can tell, support
external, stand-alone encoders (that is to say, call external encoders
from within ffmpeg, and then process and mux the results). Can I
possibly interest one of the developers in adding this feature?
Unfortunately, some encoders are available only as already built
executables, and perhaps a few others are not written with a library
component that can be supported in an application like ffmpeg. Or, a
user may want access to features that are not supported in the ffmpeg
wrapper for a particular encoder, and must use the stand-alone version
to get them.
Fortunately, though, most stand-alone encoders will accept input on
stdin, and will output to stdout--this (hopefully) makes it a
relatively simple matter to spawn()/fork() an external encoder and then
attach pipes to it. What may be a little more involved is adding a way
to tell ffmpeg what format the external encoder's input needs to be,
but I suspect even this would not be too involved for someone already
familiar with the ffmpeg codebase (which I am not :)).
As an example (and also why I am asking for this feature), I use Nero's
reference AAC encoder because 1) it is better than libfdk_aac, and 2) I
use Zeranoe builds for Windows and, even though I have Cygwin/32-bit
MinGW, I'm not quite ready yet to build all the libraries I would want
in my own ffmpeg build. (I should point out that the Nero AAC package
includes Linux binaries as well as Win32 ones.)
Currently, I use Nero AAC with ffmpeg in this way:
$ ffmpeg -i INPUT -map 0:v -c:v libx264 OUTPUT.m4v -map 0:a -af \
"aresample=async=1" -f wav - | neroaacenc -q QSCALE_FACTOR \
-ignorelength -if - -of OUTPUT.m4a
(...with various additional options and filter chains as needed...)
$ ffmpeg -i OUTPUT.m4v -i OUTPUT.m4a -c copy FINAL_OUTPUT.mp4
Using 'async' in this way usually maintains A/V sync...but not always.
And, if I also wanted to call an external video encoder, I am out of
luck. Anyway, it would be lovely not to have to call ffmpeg a second
time to mux the results from the first run. Thanks for listening,
More information about the ffmpeg-user