import os import numpy as np def yuv420p_to_nv12(y_frame, u_frame, v_frame, width, height): # 计算 U 和 V 分量的长度 uv_length = width * height // 4 # 将 Y、U、V 分量合并到一个数组中 nv12_frame = np.empty(width * height * 3 // 2, dtype=np.uint8) nv12_frame[:width * height] = y_frame nv12_frame[width * height:width * height + uv_length * 2:2] = u_frame nv12_frame[width * height + 1:width * height + uv_length * 2:2] = v_frame return nv12_frame def convert_folder_yuv420p_to_nv12(input_folder, output_folder): if not os.path.exists(output_folder): os.makedirs(output_folder) for filename in os.listdir(input_folder): if filename.endswith('.yuv'): with open(os.path.join(input_folder, filename), 'rb') as f: y_frame = np.fromfile(f, dtype=np.uint8, count=width * height) u_frame = np.fromfile(f, dtype=np.uint8, count=width * height // 4) v_frame = np.fromfile(f, dtype=np.uint8, count=width * height // 4) nv12_frame = yuv420p_to_nv12(y_frame, u_frame, v_frame, width, height) output_filepath = os.path.join(output_folder, filename.replace('.yuv', '_nv12.yuv')) with open(output_filepath, 'wb') as f: f.write(nv12_frame) # 示例 YUV 分辨率 width = 640 height = 480 # 指定输入和输出文件夹 input_folder = 'C:\\Users\\liangchengming5\\PycharmProjects\\pythonProject\\input' output_folder = 'C:\\Users\\liangchengming5\\PycharmProjects\\pythonProject\\output' # 执行批量转换 convert_folder_yuv420p_to_nv12(input_folder, output_folder)
yuv420p批量转nv12格式
最新推荐文章于 2024-08-29 13:45:51 发布