x子涵 2024-03-22 13:28 采纳率: 25%
浏览 63

在使用opencv-python对h264视频文件进行处理遇到级别限制

在使用opencv-python对h264视频文件进行处理遇到级别限制

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]
At least one output file must be specified


  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-22 13:37
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 使用opencv-python对h264视频文件进行处理,报错为OpenH264 Video Codec provided by Cisco Systems, Inc.的错误。 解决方法: 错误信息中明确指出,视频大小必须大于0,而当前视频大小为5120 x 2160,因此可能是视频大小不符合要求导致的错误。可以尝试更改视频大小,使其符合要求。代码中处理视频的函数process_video中有获取视频大小的代码,可以在此处进行修改。例如,将视频大小改为1280 x 720:
    width = 1280
    height = 720
    

    同时,也可以尝试更新opencv-python和openh264-1.8.0-win64.dll的版本。可以使用以下代码查看当前opencv-python的版本:

    import cv2
    print(cv2.__version__)
    

    可以通过pip进行更新操作:

    pip install --upgrade opencv-python
    

    最后,可以尝试使用其它视频文件进行处理,以确认是否是视频文件本身的问题导致的错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日

悬赏问题

  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错