【问题标题】:Creating a video from data of server-side script从服务器端脚本的数据创建视频
【发布时间】:2016-03-08 12:48:26
【问题描述】:

我的计划是在我的网页上显示的视频中显示服务器端脚本生成的数据。到目前为止,我的方法如下:

  1. C 脚本中的三维整数数组用于累积图像数据。尺寸包括宽度、宽度和颜色(R、G 和 B)。
  2. 数组被写入 ppm 文件。
  3. 下一张图片累积写入等。
  4. 使用 ffmpeg,脚本将 ppm 文件合并为 mp4 视频。

基本上这是可行的,但当然更快会更好。我将不胜感激有关根本不同方法的建议以及有关以下详细信息的帮助:

  • 是否有像 ppm 这样简单的文件格式,它使用 HEX 代码而不是三元组来表示颜色?这将减少我的数组的大小以及写入操作的数量。
  • 如果我使用 fprintf 操作将每个值打印到文件中而不是将行累积到字符串中,我会浪费很多时间吗?还是编译器会优化这种写入序列?

【问题讨论】:

  • 欢迎来到 SO。请考虑将您的帖子分成多个问题,并向我们展示您迄今为止尝试过的代码。

标签: c arrays video ffmpeg ppm


【解决方案1】:

根据所需的视频长度,动画 gif 可能比视频格式容易得多。你可能想看看 github 上的 gif-Animation 库https://extrapixel.github.io/gif-animation/

对于其他(更多与 C 相关的)问题: fprintf() 进行 formatted 输出,这肯定比二进制输出慢,因此 ppm(文本)格式并不是特别以速度着称的。您可能想要查找二进制格式(例如上面的 .gif)和该格式的匹配库。应该快得多。

fprintf() 缓冲输出,因此,除了增加额外的开销之外,将数据累积到字符串中并不会更快。

编辑:鉴于您提到的大小和运行时间,您最好的选择可能是写入 ffmpeg 能够消化的简单二进制像素格式 - .XWD 或 .PNG 可能是一个不错的选择,因为有经过充分测试可用的库,允许您绘制并存储您绘制的设备相关位图到此类文件。

二进制格式只需存储比基于 ASCII 的数据少得多的数据 - 假设一个字节是二进制的一个字节,而 ASCII 至少有两个(根据格式可能更多)。而且转换需要时间....

【讨论】:

  • 非常感谢。长度应该达到 5 分钟左右,分辨率可能为 640x320。这部分取决于产出的产出情况。所以我认为 GIF 可能不是一个选择。我将研究二进制输出。 PPM 非常方便,因为我是逐像素生成图片的,虽然大约 90% 的背景都是相同的颜色。只有“有趣”的部分是逐像素绘制的。
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2011-04-17
  • 2018-04-18
  • 1970-01-01
  • 2011-05-30
  • 2010-12-09
  • 1970-01-01
  • 2011-04-24
相关资源
最近更新 更多