c - 如何在 FFmpeg 中模拟 OpenFile?

标签 c ffmpeg buffer hook

大多数gif捕捉软件都是捕捉屏幕,然后将其一帧一帧的图片文件保存在磁盘上,然后读入内存并组合成gif,整个过程非常缓慢。

我想到了用DirectX捕获屏幕(这样我们也可以更快地捕获directx窗口,因为它直接操作屏幕d3d设备)API来获取位图,然后将它们保存到内存(例如缓冲区),然后传递ffmpeg 的内存位置来生成视频,因此我们不需要磁盘存储作为中间缓冲区,因此速度可能会快十倍,因为磁盘现在是 PC 上最慢的部分。

directx截屏部分已经有了,但是我发现ffmpeg使用OpenFile来读取图片文件,所以这里可以模拟OpenFile吗? 如果答案是肯定的,我们该怎么做?

最佳答案

您可以打开命名管道并将其用作源。

一个例子: ffmpeg -f rawvideo -vcodec ravideo -s $width$x$height$ -r $framerate -pix_fmt $pixelFormat$ -i "\\.\pipe\$pipeName$"Output.gif

您必须修复要提供给 FFmpeg 的帧的格式,因此需要 -s-pix_fmt 参数。

关于c - 如何在 FFmpeg 中模拟 OpenFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57035312/

相关文章:

OpenGL:为什么 glMapNamedBuffer() 返回 GL_INVALID_OPERATION?

c - 段错误(核心转储)- 无法运行 lldb

python - 从共享库中获取枚举定义

python - 从一组相似图像中丢弃图像

command-line - ffmpeg 部分转码使用 -ss 和 -to

c++ - 如果整数溢出, (unsigned int) * (int) 的结果是什么?无符号或整数?

c - 格式化文档的 C 代码

c - While循环只发生一次

video - 使用 ffmpeg 将图像序列转换为视频时颜色困惑

exception - Gradle 构建/测试失败 - kryo.KryoException : Buffer overflow