我正在为我的视频映射集制作流生成器,但我无法使图像稳定。 我打开一个带有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流查看器。
结果是一个正确的彩色和大小的图像,但它从左到右跳过每一帧,并且总是向左跳多一点,所以你得到一个滑动和跳跃的视频结果。 我做错了什么?
致以最诚挚的问候,
Harriebo
ps:如果你想查看结果检查:link到目前为止,LiVES,puredate,gem视频映射设置正在使用v4l2流。
答案 0 :(得分:1)
所以我得到了一些工作,但不确定它是否正确。我需要为稳定的视频流做些什么:
1)不要使用自定义分辨率,它们会变得混乱。
2)每帧发送两次。我认为这与隔行扫描/顶部/底部框架有关。
3)对于640x480移位所有像素在阵列左侧260个空格,否则图像不直,不适用于1024x768 doh ...不知道为什么会这样。
4)播放的帧速率略低,因为程序可以生成。
毕竟它每10秒保持99%稳定。左右有一个车架。我认为必须这样做,程序生成的帧速率不是100%稳定。
关于为什么或如何更好地做到这一点的建议仍然受到欢迎。