@@ -656,44 +656,44 @@ Samples detected as impulsive noise are replaced by interpolated samples using | |||||
autoregressive modelling. | autoregressive modelling. | ||||
@table @option | @table @option | ||||
@item w | |||||
@item window, w | |||||
Set window size, in milliseconds. Allowed range is from @code{10} to | Set window size, in milliseconds. Allowed range is from @code{10} to | ||||
@code{100}. Default value is @code{55} milliseconds. | @code{100}. Default value is @code{55} milliseconds. | ||||
This sets size of window which will be processed at once. | This sets size of window which will be processed at once. | ||||
@item o | |||||
@item overlap, o | |||||
Set window overlap, in percentage of window size. Allowed range is from | Set window overlap, in percentage of window size. Allowed range is from | ||||
@code{50} to @code{95}. Default value is @code{75} percent. | @code{50} to @code{95}. Default value is @code{75} percent. | ||||
Setting this to a very high value increases impulsive noise removal but makes | Setting this to a very high value increases impulsive noise removal but makes | ||||
whole process much slower. | whole process much slower. | ||||
@item a | |||||
@item arorder, a | |||||
Set autoregression order, in percentage of window size. Allowed range is from | Set autoregression order, in percentage of window size. Allowed range is from | ||||
@code{0} to @code{25}. Default value is @code{2} percent. This option also | @code{0} to @code{25}. Default value is @code{2} percent. This option also | ||||
controls quality of interpolated samples using neighbour good samples. | controls quality of interpolated samples using neighbour good samples. | ||||
@item t | |||||
@item threshold, t | |||||
Set threshold value. Allowed range is from @code{1} to @code{100}. | Set threshold value. Allowed range is from @code{1} to @code{100}. | ||||
Default value is @code{2}. | Default value is @code{2}. | ||||
This controls the strength of impulsive noise which is going to be removed. | This controls the strength of impulsive noise which is going to be removed. | ||||
The lower value, the more samples will be detected as impulsive noise. | The lower value, the more samples will be detected as impulsive noise. | ||||
@item b | |||||
@item burst, b | |||||
Set burst fusion, in percentage of window size. Allowed range is @code{0} to | Set burst fusion, in percentage of window size. Allowed range is @code{0} to | ||||
@code{10}. Default value is @code{2}. | @code{10}. Default value is @code{2}. | ||||
If any two samples detected as noise are spaced less than this value then any | If any two samples detected as noise are spaced less than this value then any | ||||
sample between those two samples will be also detected as noise. | sample between those two samples will be also detected as noise. | ||||
@item m | |||||
@item method, m | |||||
Set overlap method. | Set overlap method. | ||||
It accepts the following values: | It accepts the following values: | ||||
@table @option | @table @option | ||||
@item a | |||||
@item add, a | |||||
Select overlap-add method. Even not interpolated samples are slightly | Select overlap-add method. Even not interpolated samples are slightly | ||||
changed with this method. | changed with this method. | ||||
@item s | |||||
@item save, s | |||||
Select overlap-save method. Not interpolated samples remain unchanged. | Select overlap-save method. Not interpolated samples remain unchanged. | ||||
@end table | @end table | ||||
@@ -707,38 +707,38 @@ Samples detected as clipped are replaced by interpolated samples using | |||||
autoregressive modelling. | autoregressive modelling. | ||||
@table @option | @table @option | ||||
@item w | |||||
@item window, w | |||||
Set window size, in milliseconds. Allowed range is from @code{10} to @code{100}. | Set window size, in milliseconds. Allowed range is from @code{10} to @code{100}. | ||||
Default value is @code{55} milliseconds. | Default value is @code{55} milliseconds. | ||||
This sets size of window which will be processed at once. | This sets size of window which will be processed at once. | ||||
@item o | |||||
@item overlap, o | |||||
Set window overlap, in percentage of window size. Allowed range is from @code{50} | Set window overlap, in percentage of window size. Allowed range is from @code{50} | ||||
to @code{95}. Default value is @code{75} percent. | to @code{95}. Default value is @code{75} percent. | ||||
@item a | |||||
@item arorder, a | |||||
Set autoregression order, in percentage of window size. Allowed range is from | Set autoregression order, in percentage of window size. Allowed range is from | ||||
@code{0} to @code{25}. Default value is @code{8} percent. This option also controls | @code{0} to @code{25}. Default value is @code{8} percent. This option also controls | ||||
quality of interpolated samples using neighbour good samples. | quality of interpolated samples using neighbour good samples. | ||||
@item t | |||||
@item threshold, t | |||||
Set threshold value. Allowed range is from @code{1} to @code{100}. | Set threshold value. Allowed range is from @code{1} to @code{100}. | ||||
Default value is @code{10}. Higher values make clip detection less aggressive. | Default value is @code{10}. Higher values make clip detection less aggressive. | ||||
@item n | |||||
@item hsize, n | |||||
Set size of histogram used to detect clips. Allowed range is from @code{100} to @code{9999}. | Set size of histogram used to detect clips. Allowed range is from @code{100} to @code{9999}. | ||||
Default value is @code{1000}. Higher values make clip detection less aggressive. | Default value is @code{1000}. Higher values make clip detection less aggressive. | ||||
@item m | |||||
@item method, m | |||||
Set overlap method. | Set overlap method. | ||||
It accepts the following values: | It accepts the following values: | ||||
@table @option | @table @option | ||||
@item a | |||||
@item add, a | |||||
Select overlap-add method. Even not interpolated samples are slightly changed | Select overlap-add method. Even not interpolated samples are slightly changed | ||||
with this method. | with this method. | ||||
@item s | |||||
@item save, s | |||||
Select overlap-save method. Not interpolated samples remain unchanged. | Select overlap-save method. Not interpolated samples remain unchanged. | ||||
@end table | @end table | ||||
@@ -92,13 +92,21 @@ typedef struct AudioDeclickContext { | |||||
#define AF AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM | #define AF AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM | ||||
static const AVOption adeclick_options[] = { | static const AVOption adeclick_options[] = { | ||||
{ "window", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | |||||
{ "w", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | { "w", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | ||||
{ "overlap", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | |||||
{ "o", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | { "o", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | ||||
{ "arorder", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 25, AF }, | |||||
{ "a", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 25, AF }, | { "a", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 25, AF }, | ||||
{ "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 1, 100, AF }, | |||||
{ "t", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 1, 100, AF }, | { "t", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 1, 100, AF }, | ||||
{ "burst", "set burst fusion", OFFSET(burst), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 10, AF }, | |||||
{ "b", "set burst fusion", OFFSET(burst), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 10, AF }, | { "b", "set burst fusion", OFFSET(burst), AV_OPT_TYPE_DOUBLE, {.dbl=2}, 0, 10, AF }, | ||||
{ "method", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | |||||
{ "m", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | { "m", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | ||||
{ "add", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | |||||
{ "a", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | { "a", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | ||||
{ "save", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | |||||
{ "s", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | { "s", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | ||||
{ NULL } | { NULL } | ||||
}; | }; | ||||
@@ -769,14 +777,22 @@ AVFilter ff_af_adeclick = { | |||||
}; | }; | ||||
static const AVOption adeclip_options[] = { | static const AVOption adeclip_options[] = { | ||||
{ "w", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | |||||
{ "o", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | |||||
{ "a", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=8}, 0, 25, AF }, | |||||
{ "t", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=10}, 1, 100, AF }, | |||||
{ "n", "set histogram size", OFFSET(nb_hbins), AV_OPT_TYPE_INT, {.i64=1000}, 100, 9999, AF }, | |||||
{ "m", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | |||||
{ "a", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | |||||
{ "s", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | |||||
{ "window", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | |||||
{ "w", "set window size", OFFSET(w), AV_OPT_TYPE_DOUBLE, {.dbl=55}, 10, 100, AF }, | |||||
{ "overlap", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | |||||
{ "o", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_DOUBLE, {.dbl=75}, 50, 95, AF }, | |||||
{ "arorder", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=8}, 0, 25, AF }, | |||||
{ "a", "set autoregression order", OFFSET(ar), AV_OPT_TYPE_DOUBLE, {.dbl=8}, 0, 25, AF }, | |||||
{ "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=10}, 1, 100, AF }, | |||||
{ "t", "set threshold", OFFSET(threshold), AV_OPT_TYPE_DOUBLE, {.dbl=10}, 1, 100, AF }, | |||||
{ "hsize", "set histogram size", OFFSET(nb_hbins), AV_OPT_TYPE_INT, {.i64=1000}, 100, 9999, AF }, | |||||
{ "n", "set histogram size", OFFSET(nb_hbins), AV_OPT_TYPE_INT, {.i64=1000}, 100, 9999, AF }, | |||||
{ "method", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | |||||
{ "m", "set overlap method", OFFSET(method), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, AF, "m" }, | |||||
{ "add", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | |||||
{ "a", "overlap-add", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "m" }, | |||||
{ "save", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | |||||
{ "s", "overlap-save", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "m" }, | |||||
{ NULL } | { NULL } | ||||
}; | }; | ||||