使用opencv-python对h246视频进行处理遇到级别限制

文章介绍了如何使用Python和OpenCV处理视频,包括获取视频编解码器,单线程和多线程处理多个视频。然而,在尝试使用H264编码时遇到了OpenH264错误,涉及参数验证失败和初始化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os
import cv2
import threading


# 获取视频编解码器
# 获取视频编解码器
def get_video_codec():
    # 使用 H264 (High) 编解码器
    fourcc = cv2.VideoWriter_fourcc(*'avc1')
    return fourcc


# 处理单个视频的函数
def process_video(video_path, output_folder):
    cap = cv2.VideoCapture(video_path)

    fps = cap.get(cv2.CAP_PROP_FPS)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 获取视频编解码器
    fourcc = get_video_codec()

    video_name = os.path.splitext(os.path.basename(video_path))[0]
    output_video_path = os.path.join(output_folder, 'output_' + video_name + '.MP4')

    out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))

    while cap.isOpened():
        ret, frame = cap.read()

        if not ret:
            break

        # 在视频帧的左下角区域填充纯黑色
        frame[-70:, 600:1200] = [0, 0, 0]  # 左下角区域为600x60的区域

        out.write(frame)

    cap.release()
    out.release()


# 多线程处理多个视频
def process_videos_in_parallel(video_list, output_folder):
    threads = []
    for video_path in video_list:
        thread = threading.Thread(target=process_video, args=(video_path, output_folder))
        threads.append(thread)
        thread.start()

    for thread in threads:
        thread.join()


# 主函数
if __name__ == "__main__":
    video_folder = r'F:\test_input'
    output_folder = r'F:\test_output'

    video_list = [os.path.join(video_folder, video) for video in os.listdir(video_folder) if video.endswith('.MP4')]

    process_videos_in_parallel(video_list, output_folder)

但是一直报错

	OpenH264 Video Codec provided by Cisco Systems, Inc.

[libopenh264 @ 0000017b4d4d3680] [OpenH264] this = 0x0000017B4A5945B0, Error:ParamValidationExt(), width > 0, height > 0, width * height <= 9437184, invalid 5120 x 2160 in dependency layer settings!
[libopenh264 @ 0000017b4d4d3680] [OpenH264] this = 0x0000017B4A5945B0, Error:WelsInitEncoderExt(), ParamValidationExt failed return 2.
[libopenh264 @ 0000017b4d4d3680] [OpenH264] this = 0x0000017B4A5945B0, Error:CWelsH264SVCEncoder::Initialize(), WelsInitEncoderExt failed.
[libopenh264 @ 0000017b4d4d3680] Initialize failed

python是3.10版本,opencv是4.9版本,也导入了openh264-1.8.0-win64.dll
下面是我的视频信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isomavc1mp42
    creation_time   : 2024-02-01T10:02:42.000000Z
  Duration: 00:01:00.00, start: 0.000000, bitrate: 32280 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709, progressive), 5120x2160, 32003 kb/s, 25 fps, 25 tbr, 92400 tbn (default)
    Metadata:
      creation_time   : 2024-02-01T10:02:42.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : h264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 64 kb/s (default)
    Metadata:
      creation_time   : 2024-02-01T10:02:42.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值