Frage

I'm trying to encode video with ffmpeg and x264. I know ffmpeg can use x264 presets when using the program ffmpeg from command line. But is it possible to easily use these presets when encoding with ffmpeg in code?

If not, what is the best way to set the x264 parameters from ffmpeg code? Is it just using the properties of the AVCodecContext? Are all the x264 options available through this?

Thank you!

War es hilfreich?

Lösung

Sorry for the very late answer but I had the same question and I want to share the solution that I found. Yes, it is possible to pass many of the x264 options through the command-line and API, at least when using libav (I can´t confirm with ffmpeg now). By issuing avconv --help you can find this:

libx264 AVOptions:
-preset            <string> E.V.. Set the encoding preset (cf. x264 --fullhelp)
-tune              <string> E.V.. Tune the encoding params (cf. x264 --fullhelp)
-profile           <string> E.V.. Set profile restrictions (cf. x264 --fullhelp)
-fastfirstpass     <int>   E.V.. Use fast settings when encoding first pass
-crf               <float> E.V.. Select the quality for constant quality mode
-crf_max           <float> E.V.. In CRF mode, prevents VBV from lowering quality beyond this point.
-qp                <int>   E.V.. Constant quantization parameter rate control method
-aq-mode           <int>   E.V.. AQ method
   none                    E.V..
   variance                E.V.. Variance AQ (complexity mask)
   autovariance            E.V.. Auto-variance AQ (experimental)
-aq-strength       <float> E.V.. AQ strength. Reduces blocking and blurring in flat and textured areas.
-psy               <int>   E.V.. Use psychovisual optimizations.
-psy-rd            <string> E.V.. Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.
-rc-lookahead      <int>   E.V.. Number of frames to look ahead for frametype and ratecontrol
-weightb           <int>   E.V.. Weighted prediction for B-frames.
-weightp           <int>   E.V.. Weighted prediction analysis method.
   none                    E.V..
   simple                  E.V..
   smart                   E.V..
-ssim              <int>   E.V.. Calculate and print SSIM stats.
-intra-refresh     <int>   E.V.. Use Periodic Intra Refresh instead of IDR frames.
-b-bias            <int>   E.V.. Influences how often B-frames are used
-b-pyramid         <int>   E.V.. Keep some B-frames as references.
   none                    E.V..
   strict                  E.V.. Strictly hierarchical pyramid
   normal                  E.V.. Non-strict (not Blu-ray compatible)
-mixed-refs        <int>   E.V.. One reference per partition, as opposed to one reference per macroblock
-8x8dct            <int>   E.V.. High profile 8x8 transform.
-fast-pskip        <int>   E.V..
-aud               <int>   E.V.. Use access unit delimiters.
-mbtree            <int>   E.V.. Use macroblock tree ratecontrol.
-deblock           <string> E.V.. Loop filter parameters, in <alpha:beta> form.
-cplxblur          <float> E.V.. Reduce fluctuations in QP (before curve compression)
-partitions        <string> E.V.. A comma-separated list of partitions to consider. Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all
-direct-pred       <int>   E.V.. Direct MV prediction mode
   none                    E.V..
   spatial                 E.V..
   temporal                E.V..
   auto                    E.V..
-slice-max-size    <int>   E.V.. Limit the size of each slice in bytes
-stats             <string> E.V.. Filename for 2 pass stats

When using the AVCodecContext struct, you can also set those options like -rc-lookahead can be set at AVCodecContext::rc_lookahead, but I´m not sure about -preset now.

Hope this can help

Andere Tipps

first, you must know ffmpeg support x264opts and x264-params, to add more precise control of x264 encodec. and it pass a key=value list separated by ":" to x264. for example:

ffmpeg .... -x264opts bframes=0:... ...

which mean of setting bframes to 0 for x264. this format not fully same with x264.

more detail check this:

1,ffmpge document

2,x264

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top