On 01/27/2021 03:16 AM, list+ffmpeg-u...@jdlh.com wrote:
This is the part of the minterpolate video filter which defines the options:
https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_minterpolate.c#L205-L235

[The following looks better in a fixed-pitch font.]

static const AVOption minterpolate_options[] = {
    { "fps", "output's frame rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "60"}, 0, INT_MAX, FLAGS },     { "mi_mode", "motion interpolation mode", OFFSET(mi_mode), AV_OPT_TYPE_INT, {.i64 = MI_MODE_MCI}, MI_MODE_DUP, MI_MODE_MCI, FLAGS, "mi_mode" },
         CONST("dup",    "duplicate frames", MI_MODE_DUP, "mi_mode"),
         CONST("blend",  "blend frames", MI_MODE_BLEND,          "mi_mode"),
         CONST("mci",    "motion compensated interpolation", MI_MODE_MCI,            
"mi_mode"),
    { "mc_mode", "motion compensation mode", OFFSET(mc_mode), AV_OPT_TYPE_INT, {.i64 = MC_MODE_OBMC}, MC_MODE_OBMC, MC_MODE_AOBMC, FLAGS, "mc_mode" },
         CONST("obmc",   "overlapped block motion compensation", MC_MODE_OBMC,           
"mc_mode"),
         CONST("aobmc",  "adaptive overlapped block motion compensation", MC_MODE_AOBMC, 
"mc_mode"),
    { "me_mode", "motion estimation mode", OFFSET(me_mode), AV_OPT_TYPE_INT, {.i64 = ME_MODE_BILAT}, ME_MODE_BIDIR, ME_MODE_BILAT, FLAGS, "me_mode" },
         CONST("bidir",  "bidirectional motion estimation", ME_MODE_BIDIR,          
"me_mode"),
         CONST("bilat",  "bilateral motion estimation", ME_MODE_BILAT,          
"me_mode"),
    { "me", "motion estimation method", OFFSET(me_method), AV_OPT_TYPE_INT, {.i64 = AV_ME_METHOD_EPZS}, AV_ME_METHOD_ESA, AV_ME_METHOD_UMH, FLAGS, "me" },
         CONST("esa",    "exhaustive search", AV_ME_METHOD_ESA,       "me"),
         CONST("tss",    "three step search", AV_ME_METHOD_TSS,       "me"),
         CONST("tdls",   "two dimensional logarithmic search", AV_ME_METHOD_TDLS,      
"me"),
         CONST("ntss",   "new three step search", AV_ME_METHOD_NTSS,      "me"),
         CONST("fss",    "four step search", AV_ME_METHOD_FSS,       "me"),
         CONST("ds",     "diamond search", AV_ME_METHOD_DS,        "me"),
         CONST("hexbs",  "hexagon-based search", AV_ME_METHOD_HEXBS, "me"),
         CONST("epzs",   "enhanced predictive zonal search", AV_ME_METHOD_EPZS,      
"me"),
         CONST("umh",    "uneven multi-hexagon search", AV_ME_METHOD_UMH,       
"me"),
     { "mb_size", "macroblock size", OFFSET(mb_size), AV_OPT_TYPE_INT, {.i64 = 
16}, 4, 16, FLAGS },
    { "search_param", "search parameter", OFFSET(search_param), AV_OPT_TYPE_INT, {.i64 = 32}, 4, INT_MAX, FLAGS },     { "vsbmc", "variable-size block motion compensation", OFFSET(vsbmc), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, FLAGS },     { "scd", "scene change detection method", OFFSET(scd_method), AV_OPT_TYPE_INT, {.i64 = SCD_METHOD_FDIFF}, SCD_METHOD_NONE, SCD_METHOD_FDIFF, FLAGS, "scene" },
         CONST("none",   "disable detection", SCD_METHOD_NONE, "scene"),
         CONST("fdiff",  "frame difference", SCD_METHOD_FDIFF, "scene"),
    { "scd_threshold", "scene change threshold", OFFSET(scd_threshold), AV_OPT_TYPE_DOUBLE, {.dbl = 10.}, 0, 100.0, FLAGS },
     { NULL }
};

What that means:

There is an option, "fps", which means "output's frame rate". It can (I believe) take any frame rate value describe in 7.5 "Frame Rate" (http://ffmpeg.org/ffmpeg-all.html#Video-rate), including integers, rational numbers, and 8 special names (because "AV_OPT_TYPE_VIDEO_RATE"). The default value is 60 (because '{.str = "60"}').

There is an option, "mi_mode", which means "motion interpolation mode". It can take any of the following values: "dup", meaning  "duplicate frames"; "blend", meaning  "blend frames"; or "mci", meaning "motion compensated interpolation".
The default value is "mci" (because '{.i64 = MI_MODE_MCI}' and 'CONST("mci" … 
MI_MODE_MCI').

There is an option, "mc_mode",  which means "motion compensation mode". Reading the code elsewhere in that file, it seems that the filter only consults this option when "mi_mode"="mci". It can take any of the following values: "obmc", meaning "overlapped block motion compensation"; or "aobmc", meaning "adaptive overlapped block motion compensation".
The default value is "obmc" (because '{.i64 = MC_MODE_OBMC}' and 'CONST("obmc" 
… MC_MODE_OBMC').

There is an option, "me_mode", which means "motion estimation mode". Reading the code elsewhere in that file, it seems that the filter only consults this option when "mi_mode"="mci". It can take any of the following values:
"bidir", meaning "bidirectional motion estimation"; or "bilat", meaing "bilateral 
motion estimation".
The default value is "bilat" (because '{.i64 = ME_MODE_BILAT}' and 
'CONST("bilat" … ME_MODE_BILAT').

There is an option, "me", meaning "motion estimation method". Reading the code elsewhere in that file, it seems that the filter only consults this option when "mi_mode"="mci". It can take any of the following values: "esa", meaning "exhaustive search"; "tss", meaning "three step search"; "tdls", meaning "two dimensional logarithmic search"; "ntss", meaning "new three step search"; "fss", meaning "four step search"; "ds", meaning "diamond search"; "hexbs", meaning "hexagon-based search"; "epzs", meaning "enhanced predictive zonal search"; or "umh", meaning "uneven multi-hexagon search". The default value is "epzs" (because '{.i64 = AV_ME_METHOD_EPZS}' and 'CONST("epzs" … AV_ME_METHOD_EPZS').

There is an option, "mb_size", meaning "macroblock size". It takes an integer value of 4-16 (because 'AV_OPT_TYPE_INT' and  '4, 16'). The default value is 16 (because '{.i64 = 16}').

There is an option, "search_param", meaning "search parameter". It takes an integer value of 4 or more (because 'AV_OPT_TYPE_INT' and  '4, INT_MAX'). The default value is 32 (because '{.i64 = 32}').

There is an option, "vsbmc", meaning "variable-size block motion compensation". It takes an integer value of 0 or 1 (because 'AV_OPT_TYPE_INT' and '0, 1'). The default value is 0 (because '{.i64 = 0}').

There is an option, "scd", meaning "scene change detection method". It can take either of the following values:
"none", meaning "disable detection"; or "fdiff", meaning "frame difference".
The default value is "fdiff" (because '{.i64 = SCD_METHOD_FDIFF}' and 'CONST("fdiff", … SCD_METHOD_FDIFF').

There is an option, "scd_threshold", meaning "scene change threshold". It takes a real-number value of 0.0-100.0 (because 'AV_OPT_TYPE_DOUBLE' and '0, 100.0'). The default value is 10.0 (because '{.dbl = 10.}'.


I wrote out that translation of the code into English in part to help you with your documentation, and in part to help others who want to learn how to read the idioms in source code. This skill is useful for checking where the documentation is incomplete or wrong.

Note that I just translated the options declaration in lines 205-235 of the source code. This describes only the names and data types of the options. To understand what FFmpeg actually does when presented with the various options, one has to read the rest of the source code. (For instance, are options 'mb_size', 'search_param', and 'vsbmc' consulted only when option 'mi_mode'='mci'? Lines 205-235 don't say.)

     —Jim DeLaHunt

Thank you so much, Jim. That really helps.

Mark.
--
Someone's sneaking in and turning up the range so that my food burns.
I'm sure of it.
And the older I get, the more sure of it I become.
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to