OpenCV python编解码器以html格式显示视频mp4
因此,我目前正在Keras中编写一个yolo模型,它对视频执行对象检测,使用一个videowriter逐帧写入输出(带有边界框)。输入和输出都是.mp4格式,我使用的编解码器是(*mp4v)。但我需要在html文件(来自s3的帧源)中播放此视频,但html视频仅支持h264编码的视频。我使用的是MacBookPro,代码将部署在docker中,两者都没有此编解码器。然后,我使用moviepy.video_writer()将此视频转换为h264编解码器(指定为参数),但视频从我开始绘制绑定框的部分中断。在这种情况下我该怎么办。是否有其他方法可以使用此编解码器在html上播放视频OpenCV python编解码器以html格式显示视频mp4,python,opencv,Python,Opencv,因此,我目前正在Keras中编写一个yolo模型,它对视频执行对象检测,使用一个videowriter逐帧写入输出(带有边界框)。输入和输出都是.mp4格式,我使用的编解码器是(*mp4v)。但我需要在html文件(来自s3的帧源)中播放此视频,但html视频仅支持h264编码的视频。我使用的是MacBookPro,代码将部署在docker中,两者都没有此编解码器。然后,我使用moviepy.video_writer()将此视频转换为h264编解码器(指定为参数),但视频从我开始绘制绑定框的部分
def detect_video(in_path, out_path, name, save_as):
y = load_model()
download_file(name)
vid = cv2.VideoCapture(in_path)
if not vid.isOpened():
raise IOError("Couldn't open webcam or video")
video_FourCC = int(vid.get(cv2.CAP_PROP_FOURCC))
video_fps = vid.get(cv2.CAP_PROP_FPS)
video_size = (int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print("!!! TYPE:", type(out_path), type(video_FourCC), type(video_fps), type(video_size))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fourcc = cv2.VideoWriter_fourcc(*'pim1')
# fourcc = cv2.VideoWriter_fourcc(*'hvc1')
# fourcc = cv2.VideoWriter_fourcc(*'H264')
# fourcc = cv2.CV_FOURCC(*'H264')
out = cv2.VideoWriter(out_path, -1, video_fps, video_size)
isOutput = True if out_path != "" else False
accum_time = 0
curr_fps = 0
fps = "FPS: ??"
return_value, frame = vid.read()
while True & (frame is not None):
print(frame)
image = Image.fromarray(frame)
image,annotations = y.detect_image(image)
result = np.asarray(image)
cv2.putText(result, text=fps, org=(3, 15), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.50, color=(255, 0, 0), thickness=2)
# cv2.namedWindow("result", cv2.WINDOW_NORMAL)
# cv2.imshow("result", result)
if isOutput:
out.write(result)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
return_value, frame = vid.read()
out.release()
vid.release()
acl = "public-read"
s3_client.upload_file(out_path, bucket, "pre-conv"+save_as, ExtraArgs={
"ACL": "public-read",
"ContentType": "video/mp4"
})
import moviepy.editor as moviepy
clip = moviepy.VideoFileClip(out_path)
clip.write_videofile(out_path)
s3_client.upload_file(out_path, bucket, save_as, ExtraArgs={
"ACL": "public-read",
"ContentType": "video/mp4"
})
os.remove(in_path)
os.remove(out_path)
os.remove("model_data/yolo.h5")
这可能有助于您安装ffmpeg
。然后可以使用h264
编码。