我正在为我的视频映射集开发流生成器,但我无法使图像稳定。 我用 python-v4l2 打开一个 v4l2loopback 设备并通过它基于 png 生成视频流,因此可以在我的 vj 集中生成实时视频,并且仍然可以对它们进行视频映射并应用效果。
测试用例: 1)加载v4l2loopback模块
2) 运行 python:
import fcntl, numpy
from v4l2 import *
from PIL import Image
height = 600
width = 634
device = open('/dev/video4', 'wr')
print(device)
capability = v4l2_capability()
print(fcntl.ioctl(device, VIDIOC_QUERYCAP, capability))
print("v4l2 driver: " + capability.driver)
format = v4l2_format()
format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT
format.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB32
format.fmt.pix.width = width
format.fmt.pix.height = height
format.fmt.pix.field = V4L2_FIELD_NONE
format.fmt.pix.bytesperline = format.fmt.pix.width * 4
format.fmt.pix.sizeimage = format.fmt.pix.width * format.fmt.pix.height * 4
format.fmt.pix.colorspace = V4L2_COLORSPACE_SRGB
print(fcntl.ioctl(device, VIDIOC_S_FMT, format))
img = Image.open('img/0.png')
img = img.convert('RGBA')
while True:
device.write(numpy.array(img))
3) 运行 Cheese 或其他 v4l2 流查看器。
结果是一幅颜色和大小都合适的图像,但它在每一帧都从左到右跳动,并且总是向左跳动一点,因此您会得到滑动和跳跃的视频效果。 我做错了什么?
最好的问候,
clown
ps:如果您想查看结果,请检查:link到目前为止,LiVES、puredate、gem 视频映射设置与 v4l2 流配合得很好。
请您参考如下方法:
所以我得到了一种工作,但不确定它是否是正确的方法。我需要为稳定的视频流做些什么:
1) 不要使用自定义分辨率,它们会变得困惑。
2) 每帧发送两次。我认为这与隔行扫描/顶部/底部框架有关。
3) 对于 640x480,将所有像素向阵列左侧移动 260 个空格,否则图像不直,对于 1024x768 doh...不知道为什么会这样。
4) 播放帧率略低于程序生成的帧率。
毕竟它每 10 秒稳定 99%。大约有一个 buggy 框架。我认为程序生成的帧率不是 100% 稳定的。
仍然欢迎就为什么或如何做得更好提出建议。
