如何将opencv视频发送到ffmpeg
How to send opencv video's to ffmpeg
我正在尝试将处理后的opencv Mat作为视频发送到ffmpeg。我正在对帧进行编码并将其写入 std 输出,然后将其管道传输到 ffmpeg。这是我的代码。
C++:
if(!cap.isOpened()) {
cout << "Video not accessible" << endl;
return -1;
} else {
cout << "Video is accessible" << endl;
}
while (true) {
cap >> frame;
//some processing
cv::imencode(".jpg", frame, buff);
for (i = buff.begin(); i != buff.end(); ++i)
std::cout << *i ;
}
我的输入视频分辨率是 640x418。我不改变视频大小
构建后,我使用以下命令执行。
./a.out | ffmpeg -f rawvideo -pix_fmt bgr24 -s 640x418 -r 30 -i - -an -f mpegts udp://0.0.0.0:8182
还有这个
./a.out | ffmpeg -i pipe:0 -f rawvideo -pix_fmt bgr24 -s 640x418 -r 30 -i - -an -f mpegts udp://0.0.0.0:8182
然而,这些似乎都不起作用。
请帮忙。
不确定 Jahan 是否仍然对使用管道感兴趣,但这里有一个迟来的答案:
- 您写入 stdout 的是图像,而不是视频,因此输入格式应该是
-f jpeg_pipe
而不是rawvideo
. - 输入源应
-i pipe:
(包括冒号) - 管道中不需要编码;而是在ffserver配置中指定编码。对于图像帧,我发现使用流类型 mjpg 很简单。
- 在opencv中更简单的写入可以是:
fwrite (buff.data(), buff.size(), 1, stdout)
同样的问题...同样的答案...我希望这个答案能帮助你。
在这个程序中,我以 20 fps 的速度制作屏幕副本(RGB 数据)并将图像发送到 ffmpeg。 我不使用管道,而是使用插座。我使用这个命令行:
ffmpeg -f rawvideo -pixel_format rgb24 -video_size 640x480 -i "tcp://127.0.0.1:2345" -codec:v libx264 -pix_fmt yuv420p Video.mp4
运行 FFMPEG,然后使用套接字将数据发送到端口 2345
sock->Write(b.GetData(), nb);
我不编码帧它是原始数据
相关文章:
- FFmpeg——使用硬件加速进行视频解码
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- FFmpeg原始视频大小参数
- C++ ffmpeg 视频缺少帧,无法在 Quicktime 中播放
- 如何将视频级别分配给 ffmpeg 中的结构 AVCodecContext
- 如何使用FFMPEG从编码的视频中提取AVPACKET的重要信息
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- ffmpeg/c++ 使用 ffmpeg 对视频帧的附加信息进行编码
- 使用 ffmpeg 将平面 RGB 图像组合成无损视频
- 如何使用C 中的FFMPEG获取视频fps
- C++/C FFmpeg 伪影跨视频帧构建
- 如何使用FFMPEG与C拦截编码的视频数据
- 使用FFMPEG编写多线程视频和音频数据包
- 使用最新的 ffmpeg API (2017) 创建视频
- 视频太快 FFmpeg
- 如何将opencv视频发送到ffmpeg
- FFMPEG如何有效地解码视频框架
- FFmpeg + OpenAL - 播放视频中的流声音不起作用
- ffmpeg视频输出被去饱和
- 使用PTS同步FFMPEG视频帧