python - 无法将流输出 (h264) 保存到文件
问题描述
我有一个带有picamera-h264-web-streaming的覆盆子相机,并且遇到了无法将每一帧保存到我的覆盆子上的自定义视频文件的问题。我需要我的视频文件作为 h264 编解码器,但 mp4 也可以。每 15 分钟它应该创建一个新视频。流不会停止,所以我只更改文件名。
实际上,我将每个帧作为字节附加到文件中,并在录制为 mp4 后将其转换。我认为元文件或某些东西丢失了,因为所有视频都没有前 10-20 秒的记录。
通过使用 ffmpeg 进行转换,我得到以下错误: 转换错误
原始流输出.py:
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = BytesIO()
self.condition = Condition()
self.separator = b'\x00\x00\x00\x01'
def write(self, buf):
if buf.startswith(self.separator):
self.buffer.seek(0)
with self.condition:
self.frame = self.buffer.read()
self.condition.notify_all()
self.buffer.seek(0)
self.buffer.truncate()
return self.buffer.write(buf)
流式传输和录制 output.py
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = BytesIO()
self.condition = Condition()
self.separator = b'\x00\x00\x00\x01'
self.name = "/tmp/empty_video.h264"
def setName(self, name):
self.name = name
def write(self, buf):
if buf.startswith(self.separator):
self.buffer.seek(0)
with self.condition:
self.frame = self.buffer.read()
# MY CHANGES!!!
self.writeToFile(self.frame)
# END
self.condition.notify_all()
self.buffer.seek(0)
self.buffer.truncate()
return self.buffer.write(buf)
def writeToFile(self, frame):
with open(self.name, "ab") as file:
file.write(frame)
我已经尝试过 OpenCV,但这会引发以下异常:
Expected Ptr<cv::UMat> for argument 'image'
使用 OpenCV 的代码:
self.myFile = cv2.VideoWriter(filename, cv2.VideoWriter_fourcc(*'H264'), 15, (704, 576))
有人建议吗?
解决方案
推荐阅读
- android - 任务 ':app:processDebugMainManifest' 执行失败。> 清单合并失败并出现多个错误,请参阅日志
- python - 为什么没有正在运行的进程,却报错说“cuda out of memory”?
- windows - Github 自动添加 10,000 个系统文件到我的 github 更改中
- r - 有没有办法用数据框列中的 NULL 表达式替换“-”(包括括号“”)的字符值?
- python - python中有没有办法解压缩类似于javascript中的传播运算符的列表?
- python - 如何将符号 sympy ODE 系统转换为矩阵形式?
- python - 在python中旋转图像的最快方法是什么?
- .net - Chrome 未在 Gitlab 管道中使用 selenium 在 Windows Docker Image 中启动
- c# - WinForms:如何显示 Usb3 Vision 网络摄像头的输出
- excel - 将范围转换为表格