This filter graph is expected to have loop, whose purpose is to
accumulate output from first graph part. Initial part has format of
1-column (1xH) image, while accumulator image has multiple columns.
Loop:
- Initial image is overlaid to right accumulator column,
- entire accumulator is shifted to left

However, it seems, now I don't even understand, how to set size for
accumulator. When I used blend filter instead of overlay (though it's
not right choice for sources with different size), source from loop had
0x0 size according to blend error output.

When I inserted scale, in hope to get right size before it's first used
as base, it itself was dissatisfied due to srcw and srch = 0.

When I replaced blend with overlay, it was ok with 0x0 frames, but than
other filters after split told about 0x0 frames.

There's my last attempt:

####################################
w=480; h=64
stdbuf -o0 yes | LANG=C stdbuf -o0 awk '{
    v = v + 0.01
    printf "%c", int((sin(v) + 1)/2 * 255)
}' \
| stdbuf -o0 ffmpeg -nostdin -v verbose \
-f rawvideo -pixel_format gray -video_size 1x1 -codec:v rawvideo -i - \
  -vf "
      scale@in = 1 : 255 : flags = neighbor,
      geq@bar = lum =' if( gt(Y, H - p(X,Y)), 80 ) ',
      scale@bar = 0 : $h
  [new];

  [accum_in]
      convolution = 1 0 0 : 0mode = row
  [accum_out];

  [accum_out] [new]
      overlay = W-1 : shortest = true,
      scale = $w : $h : flags = neighbor,
      split = 2
  [accum_in] [sink];

  [sink] scale@sink = flags = neighbor, format = gray
" -vcodec rawvideo -f rawvideo - \
| SDL_AUDIODRIVER=alsa ffplay -v quiet -s ${w}x${h} -pix_fmt gray
-vcodec rawvideo -f rawvideo -framerate 20000 -
####################################

Output:

####################################
Input #0, rawvideo, from 'pipe:':
  Duration: N/A, start: 0.000000, bitrate: 0 kb/s
  Stream #0:0: Video: rawvideo, 1 reference frame (Y800 / 0x30303859),
gray, 1x1, 0 kb/s, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
[scale@in @ 0x56062520d9a0] w:1 h:255 flags:'neighbor' interl:0
[scale@bar @ 0x560625283e40] w:0 h:64 flags:'bicubic' interl:0
[scale@sink @ 0x5606252857a0] w:iw h:ih flags:'neighbor' interl:0
[graph 0 input from stream 0:0 @ 0x560625285fb0] w:1 h:1 pixfmt:gray
tb:1/25 fr:25/1 sar:0/1
[Parsed_split_5 @ 0x560625284ba0] circular filter chain detected
[scale@in @ 0x56062520d9a0] w:1 h:1 fmt:gray sar:0/1 -> w:1 h:255
fmt:gray sar:0/1 flags:0x10
[scale@bar @ 0x560625283e40] w:1 h:255 fmt:gray sar:0/1 -> w:1 h:64
fmt:yuva420p sar:0/1 flags:0x4
[Parsed_overlay_4 @ 0x560625284cf0] main w:0 h:0 fmt:yuva420p overlay
w:1 h:64 fmt:yuva420p
[Parsed_overlay_4 @ 0x560625284cf0] [framesync @ 0x560625284dc8]
Selected 1/25 time base
[Parsed_overlay_4 @ 0x560625284cf0] [framesync @ 0x560625284dc8] Sync
level 2
[swscaler @ 0x5606252ae2d0] Value 0.000000 for parameter 'srcw' out of
range [1 - 2.14748e+09]
[swscaler @ 0x5606252ae2d0] Value 0.000000 for parameter 'srch' out of
range [1 - 2.14748e+09]
[swscaler @ 0x5606252ae2d0] Value 0.000000 for parameter 'dstw' out of
range [1 - 2.14748e+09]
[swscaler @ 0x5606252ae2d0] Value 0.000000 for parameter 'dsth' out of
range [1 - 2.14748e+09]
[scale@sink @ 0x5606252857a0] w:0 h:0 fmt:yuva420p sar:0/0 -> w:0 h:0
fmt:gray sar:0/0 flags:0x10
[Parsed_convolution_3 @ 0x5606252845d0] [IMGUTILS @ 0x7ffe3b0646c0]
Picture size 0x0 is invalid
Error reinitializing filters!
####################################

Btw, one good reason to use ffplay for display instead of ffmpeg cmd
ending with -f opengl, is that it allowes to do benchmarks by setting
unreachable framemates.

It only can run if I inserd ", nullsink, nullsrc = ${w}x${h}" after
convolver, so this really forces accumulator frame size for overlay,
though yet makes accumulator noop. However, it works - with given size
it makes 1670fps.

In comparison - version, where all history is fed by awk, with geq
forced to process all 480 columns, it only could do 70fps.

ffmpeg manual states, that cyclic graphs are possible. Well, at least
it doesn't refuse to proceed after "circular filter chain detected" :)

So, is there way to set accumulator size (after convolution) before it's
used in overlay? (just for overlay, before first loop iteration)
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to