在使用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