Python 将opencv帧写入HLS段文件时出错
我正在通过opencv处理hls视频片段。我的目的是创建另一个具有已处理帧的段文件。经过一些研究,我发现可以使用gstreamer管道来实现。我按照样品做,但对我不起作用 代码示例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
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的方法