Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

VLC:

Tools > Effects and Filters > Video Effects > Advanced > Anti-Flickering

Tools > Preferences > Show settings: All > Search: antiflicker

  mpv --vf=deflicker,scale=960x540,pixscope 'https://github.com/apple/VideoFlashingReduction/blob/main/VideoFlashingReduction_Mathematica/Resources/movie.mp4?raw=true'
(generate test video):

  ffplay -f lavfi -i "color=777777[x],color=cccccc,
    [x]framepack=frameseq,settb=AVTB,
    setpts=N/TB/${flickerrate:-12},framerate=${interpolated:-24},
    deflicker=size=5:mode=am,scale=640x480,pixscope"
antiflicker and deflicker are different implementations


Doh! there's a better filter for this: photosensitivity. It detects local brightness changes that sum to 0, unlike deflicker and apparently the Apple algorithm.

drawgraph can be bodged to convert metadata to frames, and signalstats the opposite. This enables silly things like a self-contained filtergraph mimicking Apple's demo with plots and usable in mpv.

  frames=5
  sensitivity=1.5
  dim_range=2
  dim_intercept=-0.4
  smoothing=10
  smoothtype=am
  decay=0.9
  min_contrast=0.0
  min_brightness=0.0
  min_saturation=0.0
  
  ffplay -vf "split[original],  crop=640:360:0:0,
  split=5[i1][i2][i3][i4][i5];
  [i1]photosensitivity=$frames :$sensitivity,
    drawgraph='bg=black@0 :r=60 :s=1x1 :m1=lavfi.photosensitivity.factor
        :fg1=0x010101*round(0xff*clip(VAL*$dim_range+$dim_intercept,0,1))',
 split[sensedat],  deflicker=$smoothing :$smoothtype,
 negate,  lagfun=$decay,  negate,  split[mit1][mit2];
      [mit1][i2]scale2ref[mask][i2];  [i2][mask]alphamerge[m];
      [mit2]signalstats[mitdat];
  [i3]eq=$min_contrast :$min_brightness :${min_saturation}[a];
    [a][m]overlay,  split[output1][output2];
  [sensedat]drawgraph=lavfi.photosensitivity.badness :0xffff0000
      :bg=white :r=60 :slide=scroll :size=512x256 :min=0 :max=7[bad];
    [bad][i5]scale2ref[badout][reuse];
      [badout]drawtext=fontcolor=2222dd:text='frame     %{metadata\:lavfi.photosensitivity.frame-badness}'[badout];
      [badout]drawtext=fontcolor=0000ff:y=1.2*lh:text='badness %{metadata\:lavfi.photosensitivity.badness}'[badout];
      [badout]drawtext=fontcolor=777700:y=2.4*lh:text='factor      %{metadata\:lavfi.photosensitivity.factor}'[badout];
    [mitdat]drawgraph=lavfi.signalstats.YAVG :0xff00ccdd
        :bg=00000000 :r=60 :slide=scroll :size=512x256 :min=0 :max=255,  vflip[factor];
    [factor][badout]scale2ref[factorout][badout];
      [factorout]drawtext=fontcolor=999900:y=3.6*lh:text='smoothed %{metadata\:lavfi.signalstats.YAVG}'[factorout];
    [badout][factorout]overlay[rplot];
  [i4]signalstats,  drawgraph=lavfi.signalstats.YAVG :0xffff0000
      :bg=white :r=60 :slide=scroll :size=512x256 :min=0 :max=255[lum];
    [lum][reuse]scale2ref[lumout][reuse];
      [lumout]drawtext=fontcolor=ff0000:text='%{pts\:hms} %{pts} %{eif\:n\:d\:5}'[lumout];
      [lumout]drawtext=fontcolor=0000ff:y=1.2*lh:text='avg luma %{metadata\:lavfi.signalstats.YAVG}'[lumout];
  [output1]signalstats,  drawgraph=lavfi.signalstats.YAVG :0xff00ccdd
      :bg=00000000 :r=60 :slide=scroll :size=512x256 :min=0 :max=255[mlum];
    [mlum][lumout]scale2ref[mlumout][lumout];
      [mlumout]drawtext=fontcolor=999900:y=2.4*lh:text='mitigated %{metadata\:lavfi.signalstats.YAVG}'[mlumout];
    [lumout][mlumout]overlay[lplot];
  [reuse][output2][rplot][lplot]xstack=4 :0_0|w0+30_0|w0+30_h0+20|0_h0+20,  [original]hstack" \
  'https://web.archive.org/web/0id_/https://developer.apple.com/accessibility/downloads/video-flashing-reduction-fig12.mp4'




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: