【问题标题】:ffmepg video from uneven sequence of png images来自不均匀的png图像序列的ffmpeg视频
【发布时间】:2015-05-27 02:05:44
【问题描述】:

我将使用一系列屏幕截图(.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 是的,我可以用任何方式操作数据

标签: video ffmpeg screencast


【解决方案1】:

使用concat demuxer


使用 2、4 和 0.25 秒的示例。

  1. 制作一个文本文件,指示每个文件所需的持续时间:

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

    您可能需要重复最后的 fileduration 行才能显示最后一帧。

  2. 运行ffmpeg 命令:

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

【讨论】:

  • 请您解释一下为什么要重复最后一行的原因?假设我有一个 png 文件。我必须重复它,否则整部电影都是黑色的,除了第一帧。这真是奇怪的行为。
  • @MaximKornienko 你能显示你的命令和完整的控制台输出吗?一个指向 pastebin 的链接会很好。
【解决方案2】:

如果您可以根据时间戳值对图像进行排序,并且图像大小相同,则可以通过以下命令获取视频:

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

请参考下面的网址,它为您提供了各种命令选项来生成视频:

FFmpeg Wiki: Create a video slideshow from images

【讨论】:

  • 这不会导致视频中的所有图像都具有相同的间隔吗?
  • 是的,因为帧速率将基于 x 值。但还提供了另一种选择。 “ffmpeg 还支持 bash 样式的通配符(* 表示任意数量的任意字符)。如果您的图像是连续的,但不一定像前面的示例中那样按数字顺序排列,这很有用。”在这种情况下,您可以尝试在不更改顺序的情况下提供输入并尝试一下。
猜你喜欢
  • 2019-05-03
  • 2016-05-03
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2021-11-21
  • 2016-12-09
相关资源
最近更新 更多