繁体   English   中英

如何使用 ffmpeg 将 rawvideo 传送到 v4l2loopback?

[英]How to pipe rawvideo to v4l2loopback using ffmpeg?

我正在尝试通过 Python 中的 OpenCV 处理视频,然后将每一帧发送到虚拟摄像机(即 v4l2loopback)。 我看到有人问到 OpenCV 输出在哪里通过管道传输到 ffmpeg 并保存到文件中的问题,以及使用 ffmpeg 将视频文件通过管道传输到 v4l2 的其他问题,但没有问题这两者在哪里结合。 我可以单独做以上两件事中的任何一件,但不能结合起来。

我的 Python 代码使用一个子进程将每个帧通过管道传输到 ffmpeg。 用于将 OpenCV 的输出通过管道传输到 .mp4 文件的 ffmpeg 命令是

ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast output.mp4

这有效,我已经对其进行了测试。

将视频文件通过管道传输到 v4l2 虚拟摄像机的 ffmpeg 命令是

ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0

这也有效,我已经对其进行了测试。

我尝试结合上述两个命令并想出了

ffmpeg -y -f rawvideo -vcodec rawvideo -s 1280x720 -pix_fmt bgr24 -i - -vcodec libx264 -crf 0 -preset fast -map 0:v -f v4l2 /dev/video0

但我收到以下错误

[NULL @ 0x55a12fcc60] 无法为 '' 找到合适的输出格式:无效参数

如果有人能帮我解决这个问题,我会很高兴。

谢谢。

我在这里看到两个问题:

  1. Unable to find a suitable output format错误可能来自代码中命令中的引用/转义问题。 从命令行界面运行相同的命令会正确执行。

  2. 修复引用问题后,您将收到另一个错误: V4L2 output device supports only a single raw video stream 这意味着您不能使用 libx264 输出到 v4l2。 所以改为让它自动选择 rawvideo 输出:

    ffmpeg -y -f rawvideo -video_size 1280x720 -pixel_format bgr24 -i - -f v4l2 /dev/video0

如果颜色看起来不对,请使用不同的-pixel_format值(请参阅ffmpeg -pix_fmts ),或者播放器不支持 v4l2 使用的输出像素格式。 在这种情况下,添加-vf format=yuv420p输出选项(在-i之后和/dev/video0之前的任何位置)。

更多信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM