yuv420p批量转nv12格式

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值