You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenCV中录制1080p视频同时显示720p画面?

实现录制1080p视频同时显示720p画面的方案

要实现录制1080p视频到文件,同时向用户展示1280×720画面,只需在显示环节对处理后的1080p帧单独做缩放处理,录制流程保持不变即可。

修改要点

  • 保留原视频录制逻辑:确保out.write()写入的是处理后的1080p原始帧
  • 在显示前添加帧缩放操作:使用cv2.resize()将帧缩放到1280×720后再展示

修改后的完整代码

import cv2
import numpy as np
# 假设你已定义CFEVideoConf和image_resize函数
cap = cv2.VideoCapture('rtsp://secret:secret@192.168.1.64/1')

filename = user_id +'.mp4' # 支持.avi/.mp4格式
frames_per_seconds = 25 # 电影标准帧率
config = CFEVideoConf(cap, filepath = filename, res='1080p')
out = cv2.VideoWriter(filename, config.video_type, frames_per_seconds, config.dims)
print(config.dims)
img_path = 'ap_logo.png'
logo = cv2.imread(img_path, -1)
watermark = image_resize(logo, height=50)
watermark = cv2.cvtColor(watermark, cv2.COLOR_BGR2BGRA)

while(True):
    ret, frame = cap.read()
    if not ret:
        break  # 读取帧失败直接退出循环
    
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)

    frame = cv2.flip(frame, 1)
    frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)

    frame_h, frame_w, frame_c = frame.shape
    # 叠加带Alpha通道的水印
    overlay = np.zeros((frame_h, frame_w, 4), dtype='uint8')

    watermark_h, watermark_w, watermark_c = watermark.shape
    for i in range(0, watermark_h):
        for j in range(0, watermark_w):
            if watermark[i, j][3] != 0:
                h_offset = frame_h - watermark_h
                w_offset = frame_w - watermark_w
                overlay[h_offset + i, w_offset + j] = watermark[i, j]

    cv2.addWeighted(overlay, 0.25, frame, 1.0, 0, frame)

    # 转换回BGR格式用于录制和显示
    frame_bgr = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
    
    # 录制1080p原始帧
    out.write(frame_bgr)
    
    # 缩放帧到1280×720用于屏幕显示
    display_frame = cv2.resize(frame_bgr, (1280, 720), interpolation=cv2.INTER_AREA)
    cv2.imshow('Frame', display_frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放所有资源
cap.release()
out.release()
cv2.destroyAllWindows()

关键细节说明

  • cv2.resize()的第二个参数为**(宽度, 高度)**,严格对应需求的1280×720
  • 使用cv2.INTER_AREA插值方法,适合高分辨率转低分辨率,能保证画面清晰度
  • 拆分录制与显示的帧处理逻辑,避免缩放后的低分辨率帧被写入文件,确保录制质量

内容的提问来源于stack exchange,提问作者Bireysel Finans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:31:11