[FFmpeg-devel] [PATCH 2/3] lavfi/ebur128: add metadata injection. - volnorm.patch (0/1)

Clément Bœsch ubitux at gmail.com
Fri May 3 14:10:36 CEST 2013


On Fri, May 03, 2013 at 02:07:49PM +0200, Clément Bœsch wrote:
> On Wed, May 01, 2013 at 10:10:54PM +0200, Jan Ehrhardt wrote:
> [...]
> > The question arose: how to minimize the adjustments at the beginning of
> > a video? I went back to f_ebur128.c and inserted another variable to the
> > metadata: the pts. I could use the pts in af_volume.c to maximize the
> > change in loudness during the initial seconds. My arbitrary choice:
> > allow -1/+1 after the first second, -2/+2 after the second second,
> > -20/+20 after 20 seconds or any longer duration. Of course, it is
> > possible to lengthen the initial duration to, say, a minute and lower
> > the maximum adjustment to -10/+10. But the idea is clear. Essential part
> > of the patch:
> > 
> >     if (vol->metadata) {
> >         double loudness, new_volume, pts, timestamp, mx;
> >         AVDictionaryEntry *t, *e;
> >         t = av_dict_get(buf->metadata, "lavfi.r128.pts", NULL, 0);
> >         mx = 20; 
> >         if (t) {
> >             pts = av_strtod(t->value, NULL);
> >             timestamp = pts / 48000; /* assume 48kHz */
> >             mx = fmin(mx, timestamp);
> >         }
> 
> volume has access to the frame pts, I don't think you need to use the
> metadata for this.
> 
> >         e = av_dict_get(buf->metadata, vol->metadata, NULL, 0);
> >         if (e) {
> >             loudness = av_strtod(e->value, NULL);
> >             new_volume = fmax(-mx,fmin(mx,(-23 - loudness)));
> >             set_fixed_volume(vol, pow(10, new_volume / 20));
> >         }
> >     }
> > 
> > The mx variable defines the min/max adjustment. By setting an absolute
> > maximum of 20 and by dividing the pts by 48k, I got the described setup
> > of -1/+1 per second.
> > 
> 
> Normalizing the beginning is indeed slightly tricky; the curve Nicolas is
> proposing might be a bit more appropriate. Note that this could be
> user configurable with another expression, but possibly overkill.
> 
> Have you tried to print/graph the new_volume values without the time
> bounding code with various samples? This could help defining a generic
> opposite time curve. Note that it of course depends on what loudness score
> you select.
> 

Note that you could also not check the adjustement value but the loudness
value directly; basically if it's assumed to be silence (< 69), you just
pass through.

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130503/2d200b05/attachment.asc>


More information about the ffmpeg-devel mailing list