【发布时间】:2021-06-12 18:01:56
【问题描述】:
我想将图像传送到虚拟视频设备(例如 /dev/video0),图像是在具有所需帧速率的循环内创建的。
在这个最小的例子中,我只有两个数组在 cv2 窗口中交替出现。现在我正在寻找一个很好的解决方案来将数组通过管道传输到虚拟设备。
我看到ffmpeg-python 可以与ffmpeg.run_async() 异步运行,但到目前为止我无法用这个包做任何事情。
没有 ffmpeg 的示例代码:
#!/usr/bin/env python3
import cv2
import numpy as np
import time
window_name = 'virtual-camera'
cv2.namedWindow(window_name, cv2.WINDOW_GUI_EXPANDED)
img1 = np.random.uniform(0, 255, (1080, 1440, 3)).astype('uint8')
img2 = np.random.uniform(0, 255, (1080, 1440, 3)).astype('uint8')
for i in range(125):
time.sleep(0.04)
if i % 2:
img = img1
else:
img = img2
cv2.imshow(window_name, img)
cv2.waitKey(1)
cv2.destroyAllWindows()
【问题讨论】:
-
这能回答你的问题吗? Pipe opencv images to ffmpeg using python
-
接受的答案来自 2015 年,并使用 ffmpeg 作为子进程。我希望我可以避免这种情况并改用 ffmpeg-python。遗憾的是,该链接上的最后一个答案尚未完成。目标是视频设备,在
vidgear包中,您必须命名一个输出,在示例中为“output.mp4”,这不是我想要的,或者至少它令人困惑。 -
好吧,我一开始没想到你想用 ffmpeg-python 来做这个。
-
但是你为什么要在那里传输图像呢?
-
我从另一个 python API 获取数组,并希望在扫描 /dev/video* 设备的不同 3rd 方应用程序(实时图片)中使用它们。所以我必须在这些边界之间工作。
标签: python-3.x ffmpeg v4l2 python-imageio ffmpeg-python