【问题标题】:FFMpeg Continuous Real-time Image to Video EncodingFFMpeg 连续实时图像到视频编码
【发布时间】:2012-05-13 07:48:21
【问题描述】:

我正在尝试使用 FFMpeg 获取图像文件流并将它们转换为视频。现在,我已经成功地做到了这一点,但前提是我已经捕获了我想要的所有图像。我想做的是将图像保存到磁盘(实时录像机)时将其转换为视频。目前,当我在仍在抓取帧的同时调用 FFMpeg 时,它只对调用时存在的图像数量进行编码。如果每次抓取图像时都调用 FFMpeg,它会用大量进程淹没 CPU。理想情况下,FFMpeg 将继续对图像进行编码,直到没有更多图像被捕获(即,检查自第一次调用以来是否有更多图像文件)。是否存在我缺少的 FFMpeg 的论点,或者这不可能?或者是通过弄乱图书馆来做到这一点的唯一方法?

【问题讨论】:

  • 您的目标是什么视频格式?并非所有格式都支持这样的编码。你打算对关键帧做什么?图像之间的时间与视频的长度有关,还是您在制造某种时间间隔?
  • 我最初计划使用 avi,但实际上任何广泛使用的格式都可以正常工作。现在,我每秒抓取图像 25 次 (25 fps),这样它就可以轻松地从它们制作 25 fps 的视频,它可以实时播放编码的视频。目前,我的关键帧是每 1 秒视频(每 25 帧)强制执行一次。

标签: ffmpeg unity3d unityscript


【解决方案1】:

一个解决方案,但不是我喜欢的一个是: 在 Mpeg2 VOB 中编码基本视频。 每 X 帧编码最后 X 帧的新视频。 由于 VOB 文件没有文件头,因此您只需将新文件的二进制文件附加到现有 VOB 即可。 FFMPEG 只需要在几帧上运行。其他一些视频格式也可以使用。

【讨论】:

  • 按照这些思路进行了调查,但 FFMpeg 无法从图像序列中的随机数进行编码(即,它始终必须从 img000 开始;而不是 img405...)。因此,在这种情况下你能做的最好的事情是每次调用 ffmpeg 时重命名图像序列,以便它们再次从 0 开始,然后添加它每次通过时创建的后续 .vob一定数量的图像。这对于实时编码来说是不切实际的,因为它会产生很多进程并且不能足够快地完成所有这些。
  • 我会在处理完文件后将它们移动到不同的目录。
猜你喜欢
  • 2018-05-29
  • 2020-07-31
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2012-06-23
相关资源
最近更新 更多