如何从带时间戳的图像列表中呈现视频?

时间:2014-08-01 05:17:18

标签: ffmpeg video-capture frame-rate

我在模式<timestamp>.png后面有一个完整的图像目录,其中<timestamp>表示自第一张图像以来经过的毫秒数。 input.txt包含有趣图片列表:

file '0.png'
file '97.png'
file '178.png'
file '242.png'
file '296.png'
file '363.png'
...

我正在使用ffmpeg将这些图像连接成一个视频:

ffmpeg -r 15 -f concat -i input.txt output.webm

如何告诉ffmpeg将每个帧放在其实际位置而不是使用恒定的帧速率?

2 个答案:

答案 0 :(得分:14)

在LordNeckbeard建议使用concat demuxer向ffmpeg的time duration syntax提供duration指令后,input.txt如下所示:

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'

现在ffmpeg处理变量帧速率。

ffmpeg -f concat -i input.txt output.webm

以下是构建input.txt

的C#代码段
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;
}

答案 1 :(得分:1)

您的图像显示为非标准帧速率...一种选择是“每毫秒一次”复制适当的图像[即对

 file '0.png'
 file '97.png'

重复文件0.png 96次,所以它变成0.png 1.png 2.png等(或者使用符号链接,如果在linux上)。

然后您可以使用普通图像输入器[输入速率为1ms /帧]将它们组合在一起。 https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images