summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/en/mplayer.110
-rw-r--r--libmpcodecs/ve_x264.c3
2 files changed, 13 insertions, 0 deletions
diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index f6410e9125..a88ebd6d98 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -6779,6 +6779,16 @@ IDR-Frames restrict subsequent P-frames from referring to any frame
prior to the IDR-Frame.
.
.TP
+.B scenecut=<-1\-100>
+Controls how aggressively to insert extra I-frames (default: 40).
+With small values of scenecut, the codec often has to force an I-frame
+when it would exceed keyint.
+Good values of scenecut may find a better location for the I-frame.
+Large values use more I-frames than necessary, thus wasting bits.
+-1 disables scene-cut detection, so I-frames are be inserted only every
+other keyint frames, which probably leads to ugly encoding artifacts.
+.
+.TP
.B frameref=<1\-15>
Number of previous frames used as predictors in a P frame (default: 1).
This is effective in Anime, but seems to make little difference in
diff --git a/libmpcodecs/ve_x264.c b/libmpcodecs/ve_x264.c
index a488073db4..7b3584cf00 100644
--- a/libmpcodecs/ve_x264.c
+++ b/libmpcodecs/ve_x264.c
@@ -63,6 +63,7 @@ static int qp_constant = 26;
static int frame_ref = 1;
static int iframe = 250;
static int idrframe = 2;
+static int scenecut_threshold = 40;
static int bframe = 0;
static int deblock = 1;
static int deblockalpha = 0;
@@ -92,6 +93,7 @@ m_option_t x264encopts_conf[] = {
{"frameref", &frame_ref, CONF_TYPE_INT, CONF_RANGE, 1, 15, NULL},
{"keyint", &iframe, CONF_TYPE_INT, CONF_RANGE, 1, 24000000, NULL},
{"idrint", &idrframe, CONF_TYPE_INT, CONF_RANGE, 1, 24000000, NULL},
+ {"scenecut", &scenecut_threshold, CONF_TYPE_INT, CONF_RANGE, -1, 100, NULL},
{"bframes", &bframe, CONF_TYPE_INT, CONF_RANGE, 0, 16, NULL},
{"deblock", &deblock, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nodeblock", &deblock, CONF_TYPE_FLAG, 0, 1, 0, NULL},
@@ -132,6 +134,7 @@ static int config(struct vf_instance_s* vf, int width, int height, int d_width,
mod->param.i_frame_reference = frame_ref;
mod->param.i_idrframe = idrframe;
mod->param.i_iframe = iframe;
+ mod->param.i_scenecut_threshold = scenecut_threshold;
mod->param.i_bframe = bframe;
mod->param.b_deblocking_filter = deblock;
mod->param.i_deblocking_filter_alphac0 = deblockalpha;