如何使用ffmpeg将原始视频通过管道传输到v4l2loopback?

问题描述 投票:0回答:1

我正在尝试使用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]无法为''找到合适的输出格式:无效的参数

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

谢谢。

python opencv ffmpeg v4l2
1个回答
1
投票

我在这里看到两个问题:

  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

更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.