Hi Balint,

2018.09.06. 22:20 keltezéssel, Marton Balint írta:

On Sat, 1 Sep 2018, Bodecs Bela wrote:

Hi Balint,


2018.08.25. 20:35 keltezéssel, Marton Balint írta:
To delay filtering until a given wallclock timestamp.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
  doc/filters.texi         |  36 ++++++++++
  libavfilter/Makefile     |   2 +
  libavfilter/allfilters.c |   2 +
  libavfilter/f_cue.c      | 182 +++++++++++++++++++++++++++++++++++++++++++++++
  libavfilter/version.h    |   2 +-
  5 files changed, 223 insertions(+), 1 deletion(-)
  create mode 100644 libavfilter/f_cue.c

diff --git a/doc/filters.texi b/doc/filters.texi
index 32c95b591c..79eec0c808 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -551,6 +551,11 @@ Set LFO range.
  Set LFO rate.
  @end table

+@section acue
+
+Delay audio filtering until a given wallclock timestamp. See the @ref{cue}
+filter.
+
  @section adeclick
  Remove impulsive noise from input audio.

@@ -6987,6 +6992,37 @@ indicates 'never reset', and returns the largest area encountered during
  playback.
  @end table

+@anchor{cue}
+@section cue
+
+Delay video filtering until a given wallclock timestamp. The filter first
+passes on @option{preroll} amount of frames, then it buffers at most
+@option{buffer} amount of frames and waits for the cue. After reaching the cue +it forwards the buffered frames and also any subsequent frames coming in its
+input.
+
+The filter can be used synchronize the output of multiple ffmpeg processes for +realtime output devices like decklink. By putting the delay in the filtering +chain and pre-buffering frames the process can pass on data to output almost
+immediately after the target wallclock timestamp is reached.
+
+Perfect frame accuracy cannot be guaranteed, but the result is good enough for
+some use cases.

just for my curiousity, will you please give an example/use_case how to use these filters?

Here is a shell script:

#!/bin/bash
UNIX_TIMESTAMP=`date +%s`
TS=$((UNIX_TIMESTAMP*1000000 + 2500000))
ffmpeg -nostdin -nostats -stream_loop -1 -i input1.mp4 \
 -vf "format=uyvy422,cue=$TS:preroll=0.5:buffer=0.5" \
 -af "acue=$TS:preroll=0.5:buffer=0.5" -f decklink "DeckLink Duo (1)" &
ffmpeg -nostdin -nostats -stream_loop -1 -i input2.mp4 \
 -vf "format=uyvy422,cue=$TS:preroll=0.5:buffer=0.5" \
 -af "acue=$TS:preroll=0.5:buffer=0.5" -f decklink "DeckLink Duo (2)" &
ffmpeg -nostdin -nostats -stream_loop -1 -i input3.mp4 \
 -vf "format=uyvy422,cue=$TS:preroll=0.5:buffer=0.5" \
 -af "acue=$TS:preroll=0.5:buffer=0.5" -f decklink "DeckLink Duo (3)" &
ffmpeg -nostdin -nostats -stream_loop -1 -i input4.mp4 \
 -vf "format=uyvy422,cue=$TS:preroll=0.5:buffer=0.5" \
 -af "acue=$TS:preroll=0.5:buffer=0.5" -f decklink "DeckLink Duo (4)" &

Thank you.

what about to create a new parameter for the filters: relcue/arelcue ?

relcue would be a relative value to current timestamp. This way the shell variable will be unneeded.

usage of cue and relcue would be mutally esclusive parameters.

We are doing something similar to drive 16 TVs in a studio set simultaneously.

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

bb

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to