[FFmpeg-devel] [PATCH v2] avcodec/noise_bsf: add expr support

Gyan Doshi ffmpeg at gyani.pro
Thu Jul 29 19:36:25 EEST 2021



On 2021-07-29 15:31, Gyan Doshi wrote:
>
>
> On 2021-07-29 02:33, Michael Niedermayer wrote:
>> On Wed, Jul 28, 2021 at 09:56:35AM +0530, Gyan Doshi wrote:
>>> ---
>>>   doc/bitstream_filters.texi |  64 ++++++++++++---
>>>   libavcodec/noise_bsf.c     | 161 
>>> +++++++++++++++++++++++++++++++++----
>>>   tests/fate/matroska.mak    |   2 +-
>>>   3 files changed, 199 insertions(+), 28 deletions(-)
>>>
>>> diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi
>>> index d10842ae47..46e4869f80 100644
>>> --- a/doc/bitstream_filters.texi
>>> +++ b/doc/bitstream_filters.texi
>>> @@ -534,20 +534,62 @@ container. Can be used for fuzzing or testing 
>>> error resilience/concealment.
>>>   Parameters:
>>>   @table @option
>>>   @item amount
>>> -A numeral string, whose value is related to how often output bytes 
>>> will
>>> -be modified. Therefore, values below or equal to 0 are forbidden, and
>>> -the lower the more frequent bytes will be modified, with 1 meaning
>>> -every byte is modified.
>>> - at item dropamount
>>> -A numeral string, whose value is related to how often packets will 
>>> be dropped.
>>> -Therefore, values below or equal to 0 are forbidden, and the lower 
>>> the more
>>> -frequent packets will be dropped, with 1 meaning every packet is 
>>> dropped.
>>> +Accepts an expression whose evaluation per-packet determines how 
>>> often bytes in that
>>> +packet will be modified. A value below 0 will result in a variable 
>>> frequency.
>>> +Default is 0 which results in no modification. However, if neither 
>>> amount or drop is specified,
>>> +amount will be set to @var{-1}. See below for accepted variables.
>>> + at item drop, dropamount
>>> +Accepts an expression evaluated per-packet whose value determines 
>>> whether that packet is dropped.
>>> +Evaluation to a positive value results in the packet being dropped. 
>>> Evaluation to a negative
>>> +value results in a variable chance of it being dropped, roughly 
>>> inverse in proportion to the magnitude
>>> +of the value. Default is 0 which results in no drops. See below for 
>>> accepted variables.
>>>   @end table
>>>   -The following example applies the modification to every byte but 
>>> does not drop
>>> -any packets.
>>> +Both @code{amount} and @code{drop} accept expressions containing 
>>> the following variables:
>>> +
>>> + at table @samp
>>> + at item n
>>> +The index of the packet, starting from zero.
>>> + at item tb
>>> +The timebase for packet timestamps.
>>> + at item pts
>>> +Packet presentation timestamp.
>>> + at item dts
>>> +Packet decoding timestamp.
>>> + at item nopts
>>> +Constant representing AV_NOPTS_VALUE.
>>> + at item startpts
>>> +First non-AV_NOPTS_VALUE PTS seen in the stream.
>>> + at item startdts
>>> +First non-AV_NOPTS_VALUE DTS seen in the stream.
>>> + at item duration
>>> + at itemx d
>>> +Packet duration, in timebase units.
>>> + at item pos
>>> +Packet position in input; may be -1 when unknown or not set.
>>> + at item size
>>> +Packet size, in bytes.
>>> + at item key
>>> +Whether packet is marked as a keyframe.
>>> + at item state
>>> +A pseudo random integer, primarily derived from the content of 
>>> packet payload.
>>> + at end table
>>> +
>>> + at subsection Examples
>>> +Apply modification to every byte but don't drop any packets.
>>> + at example
>>> +ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
>>> + at end example
>>> +
>>> +Drop every video packet not marked as a keyframe after timestamp 
>>> 30s but do not
>>> +modify any of the remaining packets.
>>> + at example
>>> +ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' 
>>> output.mkv
>>> + at end example
>>> +
>>> +Drop one second of audio every 10 seconds and add some random noise 
>>> to the rest.
>>>   @example
>>> -ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
>>> +ffmpeg -i INPUT -c copy -bsf:a 
>>> noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
>>>   @end example
>>>     @section null
>>> diff --git a/libavcodec/noise_bsf.c b/libavcodec/noise_bsf.c
>> Thanks for implementing eval support
>
> Will apply tonight if no further comments.

Pushed as 23da5caf094a7c20dd3cd59ebd2ddd8b0f5950fc

Thanks,
Gyan


More information about the ffmpeg-devel mailing list