News for hackers. Stuff that matters.
Re:Apple Detection of Flashing Lights by mgdlbp on Monday March 27, 2023 @09:46PM (#35334783)
VLC: Tools > Effects and Filters > Video Effects > Advanced > Anti-Flickering

VLC: 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
Re:Apple Detection of Flashing Lights by mgdlbp on Wednesday March 29, 2023 @06:28PM (#35364754)
Doh! there's a better filter for this: photosensitivity. It detects local brightness changes that sum to 0, unlike deflicker and the Apple implementation (??).

drawgraph is a useful bodge to convert metadata to frames. This enables silly things like mimicking the Apple demo, including graphs.

  frames=5
  sensitivity=1.5
  dim_range=2
  dim_intercept=-0.4
  smoothing=10
  smoothtype=am
  persistence=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=$persistence,  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://developer.apple.com/accessibility/downloads/video-flashing-reduction-fig12.mp4'