Overlay video after set time offset with FFmpeg

Future Optical picture Future Optical · Nov 15, 2011 · Viewed 10.1k times · Source

I'm trying to add overlays to an input video with ffmpeg that appear some time after the video starts.

The basic way to add an overlay is:

ffmpeg -i in.avi -vf "movie=overlay.avi [ovl]; [in][ovl] overlay" out.avi

But this adds the overlay video (or image) from the start of the input video until one of the videos ends.

I know how to offset the overlay video using movie=overlay.avi:seek_point=1.4, but what about an offset on the input video?

I could always clip the video to the desired point, add overlay on the second clip, then stitch the two but that's not very efficient.

Answer

blahdiblah picture blahdiblah · Aug 4, 2012

Expanding on arttronics' insightful, but speculative answer, video can indeed be easily be overlaid offset using the -itsoffset flag.

The -itsoffset flag works like so:

-itsoffset offset (input)

Set the input time offset in seconds. [-]hh:mm:ss[.xxx] syntax is also supported. The offset is added to the timestamps of the input files. Specifying a positive offset means that the corresponding streams are delayed by offset seconds.

(NB: Despite the phrase "input files", the flag actually applies only to the input immediately following it. Note also this bug about offsets not applying to audio streams. H/T attronics.)

So overlaying with an offset is as simple as:

ffmpeg -i bg.avi -itsoffset 2 -i over.avi -filter_complex overlay out.avi

This works regardless of the container type.