Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将opencv帧写入HLS段文件时出错_Python_Opencv_Ffmpeg_Gstreamer - Fatal编程技术网

Python 将opencv帧写入HLS段文件时出错

Python 将opencv帧写入HLS段文件时出错,python,opencv,ffmpeg,gstreamer,Python,Opencv,Ffmpeg,Gstreamer,我正在通过opencv处理hls视频片段。我的目的是创建另一个具有已处理帧的段文件。经过一些研究,我发现可以使用gstreamer管道来实现。我按照样品做,但对我不起作用 代码示例 vs = cv2.VideoCapture(video) fourcc = cv2.VideoWriter_fourcc(*"MJPG") writer = cv2.VideoWriter("appsrc num-buffers=100 ! x264enc ! queu

我正在通过opencv处理hls视频片段。我的目的是创建另一个具有已处理帧的段文件。经过一些研究,我发现可以使用gstreamer管道来实现。我按照样品做,但对我不起作用

代码示例

   vs = cv2.VideoCapture(video)
   fourcc = cv2.VideoWriter_fourcc(*"MJPG")
   writer = cv2.VideoWriter("appsrc num-buffers=100 ! x264enc ! queue ! mpegtsmux name=mux ! filesink location="+outpath, fourcc, 30, (W, H), True)
   while True:
       frame = vs.read()
       frame = frame[1]
       frame = imutils.resize(frame, width=500)
       rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
       writer.write(frame)
错误

OpenCV: FFMPEG: tag 0x47504a4d/'MJPG' is not supported with codec id 7 and format 'mpegts / MPEG-TS (MPEG-2 Transport Stream)'
[ERROR:0] global /private/var/folders/nz/vv4_9tw56nv9k3tkvyszvwg80000gn/T/pip-req-build-gi6lxw0x/opencv/modules/videoio/src/cap.cpp (563) open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.4.0) /private/var/folders/nz/vv4_9tw56nv9k3tkvyszvwg80000gn/T/pip-req-build-gi6lxw0x/opencv/modules/videoio/src/cap_images.cpp:267: error: (-215:Assertion failed) number < max_number in function 'icvExtractPattern'
OpenCV:FFMPEG:tag 0x47504a4d/'MJPG'不受编解码器id 7和格式“mpegts/MPEG-TS(MPEG-2传输流)”的支持
[错误:0]global/private/var/folders/nz/vv4_9tw56nv9k3tkvyszvgwg8000gn/T/pip-req-build-gi6lxw0x/opencv/modules/videoio/src/cap.cpp(563)openvideoio(CV_图像):引发的opencv异常:
OpenCV(4.4.0)/private/var/folders/nz/vv4_9tw56nv9k3tkvyszvg800000gn/T/pip-req-build-gi6lxw0x/OpenCV/modules/videoio/src/cap_images.cpp:267:错误:(-215:断言失败)编号<函数“icvExtractPattern”中的最大编号

我尝试了不同的可能的编解码器组合(“MJPG”、“MPV4”、“MPEG”等),但到目前为止没有成功:(.非常感谢您的帮助/建议。谢谢!

对于
x264enc
您需要定义
fourcc

  • 如果已安装
    x264

    fourcc = cv2.VideoWriter_fourcc(*'x264')
    
    

在我的情况下,
mp4v
起了作用

import cv2

vs = cv2.VideoCapture("video.mp4")

fourcc = cv2.VideoWriter_fourcc(*'mp4v')

W = int(vs.get(cv2.CAP_PROP_FRAME_WIDTH))
H = int(vs.get(cv2.CAP_PROP_FRAME_HEIGHT))

writer = cv2.VideoWriter("result.mp4", fourcc, 30.0, (W, H), True)

while True:
    ret, frame = vs.read()
    if ret:
        writer.write(frame)
    else:
        break

vs.release()
writer.release()

对于
x264enc
您需要定义
fourcc

  • 如果已安装
    x264

    fourcc = cv2.VideoWriter_fourcc(*'x264')
    
    

在我的情况下,
mp4v
起了作用

import cv2

vs = cv2.VideoCapture("video.mp4")

fourcc = cv2.VideoWriter_fourcc(*'mp4v')

W = int(vs.get(cv2.CAP_PROP_FRAME_WIDTH))
H = int(vs.get(cv2.CAP_PROP_FRAME_HEIGHT))

writer = cv2.VideoWriter("result.mp4", fourcc, 30.0, (W, H), True)

while True:
    ret, frame = vs.read()
    if ret:
        writer.write(frame)
    else:
        break

vs.release()
writer.release()

我也试过“mpegts”和“MPEG-TS”,但在这种情况下我得到了下面的错误。回溯(最后一次调用):文件“processor.py”,第201行,fourcc=cv2。VideoWriter_fourcc(*“mpegts”)类型错误:VideoWriter_fourcc()最多接受4个参数(给定6个),我也试过“mpegts”和“MPEG-TS”,但在这种情况下我得到了下面的错误。回溯(最后一次调用):文件“processor.py”,第201行,fourcc=cv2。VideoWriter_fourcc(*“mpegts”)类型错误:VideoWriter_fourcc()最多接受4个参数(给定6个参数)mp4v工作!MPEG-TS与mp4相同吗?我可以在HLS流媒体中使用.mp4吗?很高兴,如果我能帮忙的话:),嗯,MPEG传输流的工作原理可能与
.mp4
相同。如果不行,您可以
MJPG
而不是
mp4v
。avi
而不是
。mp4
我尝试过,但mp4在流媒体中不起作用。还有其他转换为MPEG-TSmp4v的方法吗?MPEG-TS与mp4相同吗?我可以在HLS流媒体中使用.mp4吗?Glad、 如果我能帮忙的话:),那么,MPEG传输流的工作原理可能与
.mp4
相同。如果没有,你可以用
MJPG
代替
mp4v
.avi
代替
。mp4
我试过了,但mp4在流媒体中不起作用。任何其他转换为MPEG-TS的方法