我不熟悉python(2.7)和opencv(3.0)(以及一般的视频流/编写),所以请原谅。
我使用logitech c920作为我的网络摄像头,它可以流式传输h264格式的压缩视频,因此我尝试编写一个简单的应用程序,设置VideoCapture实例的4个属性(fourcc到h264;宽度到1920;高度到1080;fps到30),然后将视频记录到名为test的上一级目录中。mp4并在我的屏幕上显示录音。以下是代码:
import sys
import cv2 as cv
cap = cv.VideoCapture(0)
fourcc = cv.VideoWriter_fourcc('H','2','6','4')
cap.set(6, fourcc)
cap.set(3,1920)
cap.set(4,1080)
cap.set(5, 30)
vid = cv.VideoWriter('../test.mp4', fourcc, 20.0, (640,480))
print vid.isOpened() #returns false :(
while (cap.isOpened()):
ret, frame = cap.read()
if (ret == True):
#gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
vid.write(frame)
cv.imshow('window', frame)
if (cv.waitKey(1) & 0xFF == ord('q')):
break
cap.release()
vid.release()
cv.destroyWindow('window')
cv.imshow(窗口,框架)工作正常,属性都设置好了;然而,vid.isOpen()返回false,所以很明显我在上面做错了什么。如果我通过-1为Fourcc,我被允许选择从编解码器和i420的列表是可用的,并说(对于罗技相机)和vid.is打开()返回true如果我改变文件扩展名从mp4到avi(我猜这意味着i420不能存储为. avi?),然而,test.avi总是巨大的,看起来很原始,几秒钟的测试视频100MB,不会打开。
如果能帮上忙就太好了非常感谢
如果您通过pip安装opencv python安装了这个包,那么x264就不支持编码,因为它是在GPL许可下安装的。升级FFmpeg不会有帮助,因为opencv python附带了自己的FFmpeg。
您必须手动编译OpenCV才能获得对H264编码的支持。
Github上的相关问题:https://github.com/skvark/opencv-python/issues/100#issuecomment-394159998
所以到目前为止我发现的变通方法不是那么有效,但是它在Ubuntu 16.04上对我有效。定期编写视频后,我使用H264编码器再次转换它,最终的视频大小比我单独从opencv获得的要小得多。
以下是解决方法:
import os # We will use it to access the terminal
# Write the video normally using mp4v and make the extension to be '.mp4'
# Note: the output using "mp4v" coder may be efficient for you, if so, you do not need to add the command below
cv2.VideoWriter('Video.mp4',cv2.VideoWriter_fourcc(*"mp4v"), NewFPS, (width,height))
# When your video is ready, just run the following command
# You can actually just write the command below in your terminal
os.system("ffmpeg -i Video.mp4 -vcodec libx264 Video2.mp4")
在通过“cv2”保存视频文件的过程中,我遇到了一个奇怪的问题。如果视频捕获发生在网络摄像头上,则此代码运行良好,但如果视频捕获来自文件(例如cap=cv2.VideoCapture(“test.avi”)),则会形成一个没有任何流的空文件。 我试图改变输入视频文件的格式,如。阿维。ts和输出也一样,但没有任何变化 谁知道为什么这个问题发生在我身上?
我有一个程序从一个文本文件(目前有653行长)中读取,所有文件都用逗号分隔。但当我将文件保存到新位置时,它只保存了490行。新创建的文本文件中的最后一行似乎也被切成了两半。有什么问题吗? 这是我用来打开和排序列表中数据的代码: 以下是我用来保存文件的内容:
我使用的是Eclipselink JPA,有一组DB实体,我想写入一个文件,以防我的DB连接在后续查询中不可用。我想使用Moxy简单地封送我的整个结果集,然后稍后取消对该文件的封送,从而重新创建我的原始结果集(这是我的JPA实体对象)。由于Eclipselink和Moxy在某种程度上是集成的,因此我想在我的JPA代码中了解一下,例如: 感谢您提供的任何帮助。
我读了一个word文档,想用Java写到另一个word文件中。我想要读取的文档中的内容的样式(字体、粗体、斜体、标题等)被写入,因为它是创建的新文档。我可以复制内容,但不能复制格式样式。 我得到的答案是复制相同格式的文本,但我无法复制数字。我执行了以下代码:
问题内容: 如何使用框架有效地从大文件读取并将大数据写入文件。 我工作,并和曾尝试类似如下: 谁能告诉我,如果我的文件大小超过2 GB,我应该遵循相同的步骤吗? 如果大量的书面操作,我想在写作时做类似的事情,该怎么办? 问题答案: 请注意,您可以像示例代码那样简单地用于复制文件,只是速度更快,而且仅一行代码。 否则,如果您已经打开了两个文件通道,则可以使用 将该通道的全部内容传输到该通道。请注意,
下面是以下代码,它使用BufferedImage读取RGB值,然后简单地将它们再次写回文件。生成的图像是完美的,看起来很好。不用担心。 我运行了一个打印测试,打印出前10个RBG int值。这是为了测试“test.png”文件,然后测试结果图像——“new-test . png”。出于某种原因,我得到了不同的RBG值之间的两个文件。 例如(前3个RGB int值) test.png:-167042