[FFmpeg-user] "instead of complaining, submit a patch" [was: Re: minterpolate problem]

Mark Filipak (ffmpeg) markfilipak at bog.us
Tue Feb 2 23:05:06 EET 2021


On 02/02/2021 03:29 PM, Michael Koch wrote:
-snip-
> In my opinion, it would be best to have all documentation in a wiki.

A wiki? Available to all to modify? I respectfully disagree.

> Another suggestion: A programmer who adds a new feature to FFmpeg shouldn't write the documentation 
> for this feature himself. Because for him everything is totally clear and he forgets to describe 
> some important details. It's better if someone else tests the new feature and writes the documentation.

I agree wholeheartedly! Further, I prefer that the documentarian submit their writings to an editor, 
an editor who would also perform documentation triage in the ffmpeg-user list. Even seasoned writers 
and encyclopedia writers are required to submit their writing to editors. An editor can correct 
English grammar, can advocate for comprehension goals, can coordinate documentation style, and can, 
when appropriate, liaison between documentarians and developers. Rather than as a gatekeeper, the 
editor can function as a first critic who can help relieve the load that developers and 
documentarians will naturally feel.

Here is the way that I document filters for my own use:
(Hopefully, your email client will not trash this too much.)

minterpolate   ...Convert video frames to a specified frame rate by dropping frames or by inserting 
new frames via frame duplication, blending, or motion compensation.
minterpolate=fps=60:mb_size=16:mc_mode=ombc:me_mode=bilat:me=epzs:mi_mode=mci:scd_threshold=10:scd=fdiff:search_param=32:vsbmc=0 
   ...Defaults.
minterpolate=fps                                       ...The output frame rate (integer or 
fraction). [1]
              fps=30 or fps=30000/1001 or fps=30/1.001   ...Examples.
minterpolate=mb_size                  ...Macroblock size (integer):
              mb_size=4 to mb_size=16
minterpolate=mc_mode                    ...Motion compensation mode (integer or string):
              mc_mode=0 or mc_mode=ombc   ...Overlapped block. [2]
              mc_mode=1 or mc_mode=aobmc   ...Adaptive overlapped block. [2][3]
minterpolate=me_mode                      ...Motion estimation mode (integer or string):
              me_mode=0 or me_mode=bidir   ...Bidirectional motion estimation. [2][4]
              me_mode=1 or me_mode=bilat   ...Bilateral motion estimation. [2][5]
minterpolate=me              ...Motion estimation algorithm to apply (integer or string):
              me=1 or me=esa   ...Exhaustive search algorithm. [2]
              me=2 or me=tss   ...Three step search algorithm. [2]
              me=3 or me=tdls   ...Two dimensional logarithmic search algorithm. [2]
              me=4 or me=ntss   ...New three step search algorithm. [2]
              me=5 or me=fss   ...Four step search algorithm. [2]
              me=6 or me=ds     ...Diamond search algorithm. [2]
              me=7 or me=hexbs   ...Hexagon-based search algorithm. [2]
              me=8 or me=epzs   ...Enhanced predictive zonal search algorithm. [2]
              me=9 or me=umh   ...Uneven multi-hexagon search algorithm. [2]
minterpolate=mi_mode                   ...Motion interpolation mode (integer or string):
              mi_mode=0 or mi_mode=dup    ...Duplicate previous or next frame for interpolating new 
ones.
              mi_mode=1 or mi_mode=blend   ...Blend source frames. [6]
              mi_mode=2 or mi_mode=mci   ...Motion compensated interpolation.
minterpolate=scd_threshold                         ...Scene change detection threshold (integer):
              scd_threshold=0 to scd_threshold=100
minterpolate=scd                ...Scene change detection method (integer or string):
              scd=0 or scd=none   ...Disable scene change detection. [7]
              scd=1 or scd=fdiff   ...Frame difference. [7][8]
minterpolate=search_param                            ...Search parameter (integer):
              search_param=4 to search_param=INT_MAX   ...?????
minterpolate=vsbmc    ...Variable-size block motion compensation (integer):
              vsbmc=0   ...Off.
              vsbmc=1   ...On.
[1] For each 'current' frame, whenever the prior-output-to-current-input time stamp difference is 
less than 1/'fps' (i.e. the input frame rate exceeds 'fps'), the current frame is dropped.
[2] Ignored unless 'mi_mode=mci' (or 'mi_mode=2').
[3] To reduce oversmoothing, window weighting coefficients are controlled adaptively according to 
the reliability of the neighboring motion vectors.
[4] Motion vectors are estimated for each source frame in both forward and backward directions.
[5] Motion vectors are estimated directly for interpolated frame.
[6] Interpolated frames are the mean of previous and next frames.
[7] Scene change leads motion vectors to be in random directions. Scene change detection replaces 
interpolated frames by duplicated ones. May not be needed for mi_mode=dup or mi_mode=blend.
[8] Corresponding pixel values are compared and, if they do not exceed the scd_threshold, scene 
change is detected.

-- 
Someone's sneaking in and turning up the flame so that my food burns.
I'm sure of it.
And the older I get, the more sure of it I become.


More information about the ffmpeg-user mailing list