-
Notifications
You must be signed in to change notification settings - Fork 0
/
filters.texi
25734 lines (19584 loc) · 685 KB
/
filters.texi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
@chapter Filtering Introduction
@c man begin FILTERING INTRODUCTION
Filtering in FFmpeg is enabled through the libavfilter library.
In libavfilter, a filter can have multiple inputs and multiple
outputs.
To illustrate the sorts of things that are possible, we consider the
following filtergraph.
@verbatim
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
@end verbatim
This filtergraph splits the input stream in two streams, then sends one
stream through the crop filter and the vflip filter, before merging it
back with the other stream by overlaying it on top. You can use the
following command to achieve this:
@example
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
@end example
The result will be that the top half of the video is mirrored
onto the bottom half of the output video.
Filters in the same linear chain are separated by commas, and distinct
linear chains of filters are separated by semicolons. In our example,
@var{crop,vflip} are in one linear chain, @var{split} and
@var{overlay} are separately in another. The points where the linear
chains join are labelled by names enclosed in square brackets. In the
example, the split filter generates two outputs that are associated to
the labels @var{[main]} and @var{[tmp]}.
The stream sent to the second output of @var{split}, labelled as
@var{[tmp]}, is processed through the @var{crop} filter, which crops
away the lower half part of the video, and then vertically flipped. The
@var{overlay} filter takes in input the first unchanged output of the
split filter (which was labelled as @var{[main]}), and overlay on its
lower half the output generated by the @var{crop,vflip} filterchain.
Some filters take in input a list of parameters: they are specified
after the filter name and an equal sign, and are separated from each other
by a colon.
There exist so-called @var{source filters} that do not have an
audio/video input, and @var{sink filters} that will not have audio/video
output.
@c man end FILTERING INTRODUCTION
@chapter graph2dot
@c man begin GRAPH2DOT
The @file{graph2dot} program included in the FFmpeg @file{tools}
directory can be used to parse a filtergraph description and issue a
corresponding textual representation in the dot language.
Invoke the command:
@example
graph2dot -h
@end example
to see how to use @file{graph2dot}.
You can then pass the dot description to the @file{dot} program (from
the graphviz suite of programs) and obtain a graphical representation
of the filtergraph.
For example the sequence of commands:
@example
echo @var{GRAPH_DESCRIPTION} | \
tools/graph2dot -o graph.tmp && \
dot -Tpng graph.tmp -o graph.png && \
display graph.png
@end example
can be used to create and display an image representing the graph
described by the @var{GRAPH_DESCRIPTION} string. Note that this string must be
a complete self-contained graph, with its inputs and outputs explicitly defined.
For example if your command line is of the form:
@example
ffmpeg -i infile -vf scale=640:360 outfile
@end example
your @var{GRAPH_DESCRIPTION} string will need to be of the form:
@example
nullsrc,scale=640:360,nullsink
@end example
you may also need to set the @var{nullsrc} parameters and add a @var{format}
filter in order to simulate a specific input file.
@c man end GRAPH2DOT
@chapter Filtergraph description
@c man begin FILTERGRAPH DESCRIPTION
A filtergraph is a directed graph of connected filters. It can contain
cycles, and there can be multiple links between a pair of
filters. Each link has one input pad on one side connecting it to one
filter from which it takes its input, and one output pad on the other
side connecting it to one filter accepting its output.
Each filter in a filtergraph is an instance of a filter class
registered in the application, which defines the features and the
number of input and output pads of the filter.
A filter with no input pads is called a "source", and a filter with no
output pads is called a "sink".
@anchor{Filtergraph syntax}
@section Filtergraph syntax
A filtergraph has a textual representation, which is recognized by the
@option{-filter}/@option{-vf}/@option{-af} and
@option{-filter_complex} options in @command{ffmpeg} and
@option{-vf}/@option{-af} in @command{ffplay}, and by the
@code{avfilter_graph_parse_ptr()} function defined in
@file{libavfilter/avfilter.h}.
A filterchain consists of a sequence of connected filters, each one
connected to the previous one in the sequence. A filterchain is
represented by a list of ","-separated filter descriptions.
A filtergraph consists of a sequence of filterchains. A sequence of
filterchains is represented by a list of ";"-separated filterchain
descriptions.
A filter is represented by a string of the form:
[@var{in_link_1}]...[@var{in_link_N}]@var{filter_name}@@@var{id}=@var{arguments}[@var{out_link_1}]...[@var{out_link_M}]
@var{filter_name} is the name of the filter class of which the
described filter is an instance of, and has to be the name of one of
the filter classes registered in the program optionally followed by "@@@var{id}".
The name of the filter class is optionally followed by a string
"=@var{arguments}".
@var{arguments} is a string which contains the parameters used to
initialize the filter instance. It may have one of two forms:
@itemize
@item
A ':'-separated list of @var{key=value} pairs.
@item
A ':'-separated list of @var{value}. In this case, the keys are assumed to be
the option names in the order they are declared. E.g. the @code{fade} filter
declares three options in this order -- @option{type}, @option{start_frame} and
@option{nb_frames}. Then the parameter list @var{in:0:30} means that the value
@var{in} is assigned to the option @option{type}, @var{0} to
@option{start_frame} and @var{30} to @option{nb_frames}.
@item
A ':'-separated list of mixed direct @var{value} and long @var{key=value}
pairs. The direct @var{value} must precede the @var{key=value} pairs, and
follow the same constraints order of the previous point. The following
@var{key=value} pairs can be set in any preferred order.
@end itemize
If the option value itself is a list of items (e.g. the @code{format} filter
takes a list of pixel formats), the items in the list are usually separated by
@samp{|}.
The list of arguments can be quoted using the character @samp{'} as initial
and ending mark, and the character @samp{\} for escaping the characters
within the quoted text; otherwise the argument string is considered
terminated when the next special character (belonging to the set
@samp{[]=;,}) is encountered.
The name and arguments of the filter are optionally preceded and
followed by a list of link labels.
A link label allows one to name a link and associate it to a filter output
or input pad. The preceding labels @var{in_link_1}
... @var{in_link_N}, are associated to the filter input pads,
the following labels @var{out_link_1} ... @var{out_link_M}, are
associated to the output pads.
When two link labels with the same name are found in the
filtergraph, a link between the corresponding input and output pad is
created.
If an output pad is not labelled, it is linked by default to the first
unlabelled input pad of the next filter in the filterchain.
For example in the filterchain
@example
nullsrc, split[L1], [L2]overlay, nullsink
@end example
the split filter instance has two output pads, and the overlay filter
instance two input pads. The first output pad of split is labelled
"L1", the first input pad of overlay is labelled "L2", and the second
output pad of split is linked to the second input pad of overlay,
which are both unlabelled.
In a filter description, if the input label of the first filter is not
specified, "in" is assumed; if the output label of the last filter is not
specified, "out" is assumed.
In a complete filterchain all the unlabelled filter input and output
pads must be connected. A filtergraph is considered valid if all the
filter input and output pads of all the filterchains are connected.
Libavfilter will automatically insert @ref{scale} filters where format
conversion is required. It is possible to specify swscale flags
for those automatically inserted scalers by prepending
@code{sws_flags=@var{flags};}
to the filtergraph description.
Here is a BNF description of the filtergraph syntax:
@example
@var{NAME} ::= sequence of alphanumeric characters and '_'
@var{FILTER_NAME} ::= @var{NAME}["@@"@var{NAME}]
@var{LINKLABEL} ::= "[" @var{NAME} "]"
@var{LINKLABELS} ::= @var{LINKLABEL} [@var{LINKLABELS}]
@var{FILTER_ARGUMENTS} ::= sequence of chars (possibly quoted)
@var{FILTER} ::= [@var{LINKLABELS}] @var{FILTER_NAME} ["=" @var{FILTER_ARGUMENTS}] [@var{LINKLABELS}]
@var{FILTERCHAIN} ::= @var{FILTER} [,@var{FILTERCHAIN}]
@var{FILTERGRAPH} ::= [sws_flags=@var{flags};] @var{FILTERCHAIN} [;@var{FILTERGRAPH}]
@end example
@anchor{filtergraph escaping}
@section Notes on filtergraph escaping
Filtergraph description composition entails several levels of
escaping. See @ref{quoting_and_escaping,,the "Quoting and escaping"
section in the ffmpeg-utils(1) manual,ffmpeg-utils} for more
information about the employed escaping procedure.
A first level escaping affects the content of each filter option
value, which may contain the special character @code{:} used to
separate values, or one of the escaping characters @code{\'}.
A second level escaping affects the whole filter description, which
may contain the escaping characters @code{\'} or the special
characters @code{[],;} used by the filtergraph description.
Finally, when you specify a filtergraph on a shell commandline, you
need to perform a third level escaping for the shell special
characters contained within it.
For example, consider the following string to be embedded in
the @ref{drawtext} filter description @option{text} value:
@example
this is a 'string': may contain one, or more, special characters
@end example
This string contains the @code{'} special escaping character, and the
@code{:} special character, so it needs to be escaped in this way:
@example
text=this is a \'string\'\: may contain one, or more, special characters
@end example
A second level of escaping is required when embedding the filter
description in a filtergraph description, in order to escape all the
filtergraph special characters. Thus the example above becomes:
@example
drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
@end example
(note that in addition to the @code{\'} escaping special characters,
also @code{,} needs to be escaped).
Finally an additional level of escaping is needed when writing the
filtergraph description in a shell command, which depends on the
escaping rules of the adopted shell. For example, assuming that
@code{\} is special and needs to be escaped with another @code{\}, the
previous string will finally result in:
@example
-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
@end example
@chapter Timeline editing
Some filters support a generic @option{enable} option. For the filters
supporting timeline editing, this option can be set to an expression which is
evaluated before sending a frame to the filter. If the evaluation is non-zero,
the filter will be enabled, otherwise the frame will be sent unchanged to the
next filter in the filtergraph.
The expression accepts the following values:
@table @samp
@item t
timestamp expressed in seconds, NAN if the input timestamp is unknown
@item n
sequential number of the input frame, starting from 0
@item pos
the position in the file of the input frame, NAN if unknown
@item w
@item h
width and height of the input frame if video
@end table
Additionally, these filters support an @option{enable} command that can be used
to re-define the expression.
Like any other filtering option, the @option{enable} option follows the same
rules.
For example, to enable a blur filter (@ref{smartblur}) from 10 seconds to 3
minutes, and a @ref{curves} filter starting at 3 seconds:
@example
smartblur = enable='between(t,10,3*60)',
curves = enable='gte(t,3)' : preset=cross_process
@end example
See @code{ffmpeg -filters} to view which filters have timeline support.
@c man end FILTERGRAPH DESCRIPTION
@anchor{commands}
@chapter Changing options at runtime with a command
Some options can be changed during the operation of the filter using
a command. These options are marked 'T' on the output of
@command{ffmpeg} @option{-h filter=<name of filter>}.
The name of the command is the name of the option and the argument is
the new value.
@anchor{framesync}
@chapter Options for filters with several inputs (framesync)
@c man begin OPTIONS FOR FILTERS WITH SEVERAL INPUTS
Some filters with several inputs support a common set of options.
These options can only be set by name, not with the short notation.
@table @option
@item eof_action
The action to take when EOF is encountered on the secondary input; it accepts
one of the following values:
@table @option
@item repeat
Repeat the last frame (the default).
@item endall
End both streams.
@item pass
Pass the main input through.
@end table
@item shortest
If set to 1, force the output to terminate when the shortest input
terminates. Default value is 0.
@item repeatlast
If set to 1, force the filter to extend the last frame of secondary streams
until the end of the primary stream. A value of 0 disables this behavior.
Default value is 1.
@end table
@c man end OPTIONS FOR FILTERS WITH SEVERAL INPUTS
@chapter Audio Filters
@c man begin AUDIO FILTERS
When you configure your FFmpeg build, you can disable any of the
existing filters using @code{--disable-filters}.
The configure output will show the audio filters included in your
build.
Below is a description of the currently available audio filters.
@section acompressor
A compressor is mainly used to reduce the dynamic range of a signal.
Especially modern music is mostly compressed at a high ratio to
improve the overall loudness. It's done to get the highest attention
of a listener, "fatten" the sound and bring more "power" to the track.
If a signal is compressed too much it may sound dull or "dead"
afterwards or it may start to "pump" (which could be a powerful effect
but can also destroy a track completely).
The right compression is the key to reach a professional sound and is
the high art of mixing and mastering. Because of its complex settings
it may take a long time to get the right feeling for this kind of effect.
Compression is done by detecting the volume above a chosen level
@code{threshold} and dividing it by the factor set with @code{ratio}.
So if you set the threshold to -12dB and your signal reaches -6dB a ratio
of 2:1 will result in a signal at -9dB. Because an exact manipulation of
the signal would cause distortion of the waveform the reduction can be
levelled over the time. This is done by setting "Attack" and "Release".
@code{attack} determines how long the signal has to rise above the threshold
before any reduction will occur and @code{release} sets the time the signal
has to fall below the threshold to reduce the reduction again. Shorter signals
than the chosen attack time will be left untouched.
The overall reduction of the signal can be made up afterwards with the
@code{makeup} setting. So compressing the peaks of a signal about 6dB and
raising the makeup to this level results in a signal twice as loud than the
source. To gain a softer entry in the compression the @code{knee} flattens the
hard edge at the threshold in the range of the chosen decibels.
The filter accepts the following options:
@table @option
@item level_in
Set input gain. Default is 1. Range is between 0.015625 and 64.
@item mode
Set mode of compressor operation. Can be @code{upward} or @code{downward}.
Default is @code{downward}.
@item threshold
If a signal of stream rises above this level it will affect the gain
reduction.
By default it is 0.125. Range is between 0.00097563 and 1.
@item ratio
Set a ratio by which the signal is reduced. 1:2 means that if the level
rose 4dB above the threshold, it will be only 2dB above after the reduction.
Default is 2. Range is between 1 and 20.
@item attack
Amount of milliseconds the signal has to rise above the threshold before gain
reduction starts. Default is 20. Range is between 0.01 and 2000.
@item release
Amount of milliseconds the signal has to fall below the threshold before
reduction is decreased again. Default is 250. Range is between 0.01 and 9000.
@item makeup
Set the amount by how much signal will be amplified after processing.
Default is 1. Range is from 1 to 64.
@item knee
Curve the sharp knee around the threshold to enter gain reduction more softly.
Default is 2.82843. Range is between 1 and 8.
@item link
Choose if the @code{average} level between all channels of input stream
or the louder(@code{maximum}) channel of input stream affects the
reduction. Default is @code{average}.
@item detection
Should the exact signal be taken in case of @code{peak} or an RMS one in case
of @code{rms}. Default is @code{rms} which is mostly smoother.
@item mix
How much to use compressed signal in output. Default is 1.
Range is between 0 and 1.
@end table
@subsection Commands
This filter supports the all above options as @ref{commands}.
@section acontrast
Simple audio dynamic range compression/expansion filter.
The filter accepts the following options:
@table @option
@item contrast
Set contrast. Default is 33. Allowed range is between 0 and 100.
@end table
@section acopy
Copy the input audio source unchanged to the output. This is mainly useful for
testing purposes.
@section acrossfade
Apply cross fade from one input audio stream to another input audio stream.
The cross fade is applied for specified duration near the end of first stream.
The filter accepts the following options:
@table @option
@item nb_samples, ns
Specify the number of samples for which the cross fade effect has to last.
At the end of the cross fade effect the first input audio will be completely
silent. Default is 44100.
@item duration, d
Specify the duration of the cross fade effect. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
By default the duration is determined by @var{nb_samples}.
If set this option is used instead of @var{nb_samples}.
@item overlap, o
Should first stream end overlap with second stream start. Default is enabled.
@item curve1
Set curve for cross fade transition for first stream.
@item curve2
Set curve for cross fade transition for second stream.
For description of available curve types see @ref{afade} filter description.
@end table
@subsection Examples
@itemize
@item
Cross fade from one input to another:
@example
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac
@end example
@item
Cross fade from one input to another but without overlapping:
@example
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:o=0:c1=exp:c2=exp output.flac
@end example
@end itemize
@section acrossover
Split audio stream into several bands.
This filter splits audio stream into two or more frequency ranges.
Summing all streams back will give flat output.
The filter accepts the following options:
@table @option
@item split
Set split frequencies. Those must be positive and increasing.
@item order
Set filter order, can be @var{2nd}, @var{4th} or @var{8th}.
Default is @var{4th}.
@end table
@section acrusher
Reduce audio bit resolution.
This filter is bit crusher with enhanced functionality. A bit crusher
is used to audibly reduce number of bits an audio signal is sampled
with. This doesn't change the bit depth at all, it just produces the
effect. Material reduced in bit depth sounds more harsh and "digital".
This filter is able to even round to continuous values instead of discrete
bit depths.
Additionally it has a D/C offset which results in different crushing of
the lower and the upper half of the signal.
An Anti-Aliasing setting is able to produce "softer" crushing sounds.
Another feature of this filter is the logarithmic mode.
This setting switches from linear distances between bits to logarithmic ones.
The result is a much more "natural" sounding crusher which doesn't gate low
signals for example. The human ear has a logarithmic perception,
so this kind of crushing is much more pleasant.
Logarithmic crushing is also able to get anti-aliased.
The filter accepts the following options:
@table @option
@item level_in
Set level in.
@item level_out
Set level out.
@item bits
Set bit reduction.
@item mix
Set mixing amount.
@item mode
Can be linear: @code{lin} or logarithmic: @code{log}.
@item dc
Set DC.
@item aa
Set anti-aliasing.
@item samples
Set sample reduction.
@item lfo
Enable LFO. By default disabled.
@item lforange
Set LFO range.
@item lforate
Set LFO rate.
@end table
@section acue
Delay audio filtering until a given wallclock timestamp. See the @ref{cue}
filter.
@section adeclick
Remove impulsive noise from input audio.
Samples detected as impulsive noise are replaced by interpolated samples using
autoregressive modelling.
@table @option
@item w
Set window size, in milliseconds. Allowed range is from @code{10} to
@code{100}. Default value is @code{55} milliseconds.
This sets size of window which will be processed at once.
@item o
Set window overlap, in percentage of window size. Allowed range is from
@code{50} to @code{95}. Default value is @code{75} percent.
Setting this to a very high value increases impulsive noise removal but makes
whole process much slower.
@item a
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
controls quality of interpolated samples using neighbour good samples.
@item t
Set threshold value. Allowed range is from @code{1} to @code{100}.
Default value is @code{2}.
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.
@item b
Set burst fusion, in percentage of window size. Allowed range is @code{0} to
@code{10}. Default value is @code{2}.
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.
@item m
Set overlap method.
It accepts the following values:
@table @option
@item a
Select overlap-add method. Even not interpolated samples are slightly
changed with this method.
@item s
Select overlap-save method. Not interpolated samples remain unchanged.
@end table
Default value is @code{a}.
@end table
@section adeclip
Remove clipped samples from input audio.
Samples detected as clipped are replaced by interpolated samples using
autoregressive modelling.
@table @option
@item w
Set window size, in milliseconds. Allowed range is from @code{10} to @code{100}.
Default value is @code{55} milliseconds.
This sets size of window which will be processed at once.
@item o
Set window overlap, in percentage of window size. Allowed range is from @code{50}
to @code{95}. Default value is @code{75} percent.
@item a
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
quality of interpolated samples using neighbour good samples.
@item t
Set threshold value. Allowed range is from @code{1} to @code{100}.
Default value is @code{10}. Higher values make clip detection less aggressive.
@item n
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.
@item m
Set overlap method.
It accepts the following values:
@table @option
@item a
Select overlap-add method. Even not interpolated samples are slightly changed
with this method.
@item s
Select overlap-save method. Not interpolated samples remain unchanged.
@end table
Default value is @code{a}.
@end table
@section adelay
Delay one or more audio channels.
Samples in delayed channel are filled with silence.
The filter accepts the following option:
@table @option
@item delays
Set list of delays in milliseconds for each channel separated by '|'.
Unused delays will be silently ignored. If number of given delays is
smaller than number of channels all remaining channels will not be delayed.
If you want to delay exact number of samples, append 'S' to number.
If you want instead to delay in seconds, append 's' to number.
@item all
Use last set delay for all remaining channels. By default is disabled.
This option if enabled changes how option @code{delays} is interpreted.
@end table
@subsection Examples
@itemize
@item
Delay first channel by 1.5 seconds, the third channel by 0.5 seconds and leave
the second channel (and any other channels that may be present) unchanged.
@example
adelay=1500|0|500
@end example
@item
Delay second channel by 500 samples, the third channel by 700 samples and leave
the first channel (and any other channels that may be present) unchanged.
@example
adelay=0|500S|700S
@end example
@item
Delay all channels by same number of samples:
@example
adelay=delays=64S:all=1
@end example
@end itemize
@section aderivative, aintegral
Compute derivative/integral of audio stream.
Applying both filters one after another produces original audio.
@section aecho
Apply echoing to the input audio.
Echoes are reflected sound and can occur naturally amongst mountains
(and sometimes large buildings) when talking or shouting; digital echo
effects emulate this behaviour and are often used to help fill out the
sound of a single instrument or vocal. The time difference between the
original signal and the reflection is the @code{delay}, and the
loudness of the reflected signal is the @code{decay}.
Multiple echoes can have different delays and decays.
A description of the accepted parameters follows.
@table @option
@item in_gain
Set input gain of reflected signal. Default is @code{0.6}.
@item out_gain
Set output gain of reflected signal. Default is @code{0.3}.
@item delays
Set list of time intervals in milliseconds between original signal and reflections
separated by '|'. Allowed range for each @code{delay} is @code{(0 - 90000.0]}.
Default is @code{1000}.
@item decays
Set list of loudness of reflected signals separated by '|'.
Allowed range for each @code{decay} is @code{(0 - 1.0]}.
Default is @code{0.5}.
@end table
@subsection Examples
@itemize
@item
Make it sound as if there are twice as many instruments as are actually playing:
@example
aecho=0.8:0.88:60:0.4
@end example
@item
If delay is very short, then it sounds like a (metallic) robot playing music:
@example
aecho=0.8:0.88:6:0.4
@end example
@item
A longer delay will sound like an open air concert in the mountains:
@example
aecho=0.8:0.9:1000:0.3
@end example
@item
Same as above but with one more mountain:
@example
aecho=0.8:0.9:1000|1800:0.3|0.25
@end example
@end itemize
@section aemphasis
Audio emphasis filter creates or restores material directly taken from LPs or
emphased CDs with different filter curves. E.g. to store music on vinyl the
signal has to be altered by a filter first to even out the disadvantages of
this recording medium.
Once the material is played back the inverse filter has to be applied to
restore the distortion of the frequency response.
The filter accepts the following options:
@table @option
@item level_in
Set input gain.
@item level_out
Set output gain.
@item mode
Set filter mode. For restoring material use @code{reproduction} mode, otherwise
use @code{production} mode. Default is @code{reproduction} mode.
@item type
Set filter type. Selects medium. Can be one of the following:
@table @option
@item col
select Columbia.
@item emi
select EMI.
@item bsi
select BSI (78RPM).
@item riaa
select RIAA.
@item cd
select Compact Disc (CD).
@item 50fm
select 50µs (FM).
@item 75fm
select 75µs (FM).
@item 50kf
select 50µs (FM-KF).
@item 75kf
select 75µs (FM-KF).
@end table
@end table
@section aeval
Modify an audio signal according to the specified expressions.
This filter accepts one or more expressions (one for each channel),
which are evaluated and used to modify a corresponding audio signal.
It accepts the following parameters:
@table @option
@item exprs
Set the '|'-separated expressions list for each separate channel. If
the number of input channels is greater than the number of
expressions, the last specified expression is used for the remaining
output channels.
@item channel_layout, c
Set output channel layout. If not specified, the channel layout is
specified by the number of expressions. If set to @samp{same}, it will
use by default the same input channel layout.
@end table
Each expression in @var{exprs} can contain the following constants and functions:
@table @option
@item ch
channel number of the current expression
@item n
number of the evaluated sample, starting from 0
@item s
sample rate
@item t
time of the evaluated sample expressed in seconds
@item nb_in_channels
@item nb_out_channels
input and output number of channels
@item val(CH)
the value of input channel with number @var{CH}
@end table
Note: this filter is slow. For faster processing you should use a
dedicated filter.
@subsection Examples
@itemize
@item
Half volume:
@example
aeval=val(ch)/2:c=same
@end example
@item
Invert phase of the second channel:
@example
aeval=val(0)|-val(1)
@end example
@end itemize
@anchor{afade}
@section afade
Apply fade-in/out effect to input audio.
A description of the accepted parameters follows.
@table @option
@item type, t
Specify the effect type, can be either @code{in} for fade-in, or
@code{out} for a fade-out effect. Default is @code{in}.
@item start_sample, ss
Specify the number of the start sample for starting to apply the fade
effect. Default is 0.
@item nb_samples, ns
Specify the number of samples for which the fade effect has to last. At
the end of the fade-in effect the output audio will have the same
volume as the input audio, at the end of the fade-out transition
the output audio will be silence. Default is 44100.
@item start_time, st
Specify the start time of the fade effect. Default is 0.
The value must be specified as a time duration; see
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
If set this option is used instead of @var{start_sample}.
@item duration, d
Specify the duration of the fade effect. See
@ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}
for the accepted syntax.
At the end of the fade-in effect the output audio will have the same
volume as the input audio, at the end of the fade-out transition
the output audio will be silence.
By default the duration is determined by @var{nb_samples}.
If set this option is used instead of @var{nb_samples}.
@item curve
Set curve for fade transition.
It accepts the following values:
@table @option
@item tri
select triangular, linear slope (default)
@item qsin
select quarter of sine wave
@item hsin
select half of sine wave
@item esin
select exponential sine wave
@item log
select logarithmic
@item ipar
select inverted parabola
@item qua
select quadratic
@item cub
select cubic
@item squ
select square root
@item cbr
select cubic root
@item par
select parabola
@item exp
select exponential
@item iqsin
select inverted quarter of sine wave
@item ihsin
select inverted half of sine wave
@item dese
select double-exponential seat
@item desi
select double-exponential sigmoid
@item losi
select logistic sigmoid
@item nofade
no fade applied
@end table
@end table
@subsection Examples
@itemize
@item
Fade in first 15 seconds of audio:
@example
afade=t=in:ss=0:d=15
@end example