从服务器端脚本的数据创建视频

标签 c arrays video ffmpeg ppm

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

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

基本上这是可行的,但当然更快会更好。我希望能够提出根本不同的方法的建议以及有关以下细节的帮助:

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

最佳答案

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

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

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

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

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

关于从服务器端脚本的数据创建视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867843/

相关文章:

c - 递归矩阵的行列式

c - 使用 Structure 打印五个成员高度中的第 n 个成员

c - 在 C 中分配指针的不同方法,使用 & 或 *?

java - 如何将这种类型的数据处理成Array - JAVA

javascript - 更改匹配列表中项目的颜色

python - 如何使用OpenCV从mp4从mp4创建帧数组

javascript - React 播放器缩略图

c# - 从 C# 调用 c 方法

javascript - 如何从 Google Picker API 获取多张选中的图片

php - 从视频中提取特定帧的最快方法(PHP/ffmpeg/任何东西)