I have a directory full of images following the pattern
, where
represents milliseconds elapsed since the fi
Following LordNeckbeard's suggestion to supply the duration
directive to ffmpeg's concat demuxer using the time duration syntax, input.txt
looks like this:
file '0.png'
duration 0.097
file '97.png'
duration 0.081
file '178.png'
duration 0.064
file '242.png'
duration 0.054
file '296.png'
duration 0.067
file '363.png'
Now ffmpeg handles the variable framerate.
ffmpeg -f concat -i input.txt output.webm
Here is the C# snippet that constructs input.txt
:
Frame previousFrame = null;
foreach (Frame frame in frames)
{
if (previousFrame != null)
{
TimeSpan diff = frame.ElapsedPosition - previousFrame.ElapsedPosition;
writer.WriteLine("duration {0}", diff.TotalSeconds);
}
writer.WriteLine("file '{0}'", frame.FullName);
previousFrame = frame;
}
Appears your images are non standard frame rate...One option would be to duplicate the appropriate image "once per millisecond" [i.e. for
file '0.png'
file '97.png'
duplicate file 0.png 96 times, so it becomes 0.png 1.png 2.png etc. (or use symlinks, if on linux).
Then you can combine them using the normal image inputter [with input rate of 1ms/frame]. https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images