不规则顺序的PNG图像转换为FFMPEG视频

3
我将制作一段视频,其中包含一系列的屏幕截图(.png文件)。每个截图都有与之关联的时间戳信息,用于记录它们的拍摄时间。截图之间的时间间隔可能不同,并且希望在视频中保留这种差异。
是否有一种方法可以使用单个ffmpeg命令/API,向其提供图像序列+时间(或帧)偏移量,并获得一个视频文件作为输出?到目前为止,我必须为每个图像生成自定义长度的短视频文件,然后手动合并它们:
ffmpeg -y -loop 1 -i image1.png -c:v libx264 -t 1.52 video1.avi
ffmpeg -y -loop 1 -i image2.png -c:v libx264 -t 2.28 video2.avi
...
ffmpeg -y -loop 1 -i imageN.png -c:v libx264 -t 1.04 videoN.avi


ffmpeg -i "concat:video1.avi|video2.avi|...videoN.avi" -c copy output.avi

这还可以,虽然间隔较大,但整个方法对我来说有点脆弱。


你能否按时间戳对图像进行数值排序,然后我们可以使用FFmpeg中的某些命令创建视频文件。 - shri
@shri 是的,我可以以任何方式操纵数据。 - Maxim Kornienko
2个回答

1
请使用合并分离器

enter image description here
示例使用2、4和0.25秒。

  1. Make a text file indicating the desired duration per file:

    file 'image1.png'
    duration 1.52
    file 'image2.png'
    duration 2.28
    file 'image3.png'
    duration 1.04
    

    You may have to repeat the last file and duration lines to get it to display the last frame.

  2. Run the ffmpeg command:

    ffmpeg -f concat -i input.txt -c:v libx264 -pix_fmt yuv420p -movflags +faststart output.mp4
    

1
请问为什么最后一行需要重复呢?假设我只有一个png文件。如果不重复,整个电影除了第一帧都是黑色的。这真是奇怪的行为。 - Maxim Kornienko
@MaximKornienko,您能展示一下您的命令和完整的控制台输出吗?一个 Pastebin 的链接会很不错。 - llogan
我知道我来晚了,但是为什么要重复最后一帧的原因在文档中有解释:这只是ffmpeg的一个怪癖。 - vatbub

-1
如果您可以根据时间戳值对图像进行排序,并且这些图像具有相同的尺寸,则可以使用以下命令获取视频:

ffmpeg -framerate X -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

请参考以下网址,其中提供了各种命令选项以生成视频:

FFmpeg Wiki:从图像创建视频幻灯片


1
这难道不会导致所有图像在视频中具有相同的间隔吗? - Maxim Kornienko
是的,因为帧速率将基于x值。但也提供了另一个选项。“ffmpeg还支持类似bash的通配符(*表示任意数量的任何字符)。如果您的图像是顺序的,但不一定按数字顺序排列,那么这非常有用,就像前面的示例一样。”在这种情况下,您可以尝试在不更改顺序的情况下输入并尝试它。 - shri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接