Python脚本批量将usdz文件转为glb文件

部署运行你感兴趣的模型镜像

 

用于将 USDZ格式的3D模型文件批量转换为GLB格式 的Python脚本,使用Blender作为转换工具 

 主要功能

  • 单个文件转换 (convert_usdz_to_glb函数):

    • 清空Blender场景。

    • 导入指定的USDZ文件。

    • 将导入的模型导出为GLB格式,不进行任何优化或缩放(保持原始数据)。

  • 批量处理 (batch_convert函数):

    • 递归扫描输入目录中的所有.usdz文件。

    • 为每个USDZ文件生成对应的GLB文件路径(保持目录结构)。

    • 调用单个文件转换函数,并统计成功/失败数量。

import bpy
import os
from pathlib import Path

def convert_usdz_to_glb(input_path, output_path):
    """单纯转换USDZ到GLB,不做任何优化和缩放"""
    try:
        # 清空场景
        bpy.ops.wm.read_factory_settings(use_empty=True)
        
        # 导入USDZ
        bpy.ops.wm.usd_import(
            filepath=input_path,
            import_cameras=False,
            import_curves=False,
            import_lights=False
        )
        
        # 导出GLB(保持原始设置)
        bpy.ops.export_scene.gltf(
            filepath=output_path,
            export_format='GLB',
            export_yup=True,
            export_apply=False  # 不应用变换
        )
        return True
        
    except Exception as e:
        print(f"转换失败 {input_path}: {str(e)}")
        return False

def batch_convert(input_dir, output_dir):
    """批量转换(递归处理子目录)"""
    input_dir = Path(input_dir)
    output_dir = Path(output_dir)
    
    # 统计变量
    total_files = 0
    success_count = 0
    
    print(f"\n开始转换: {input_dir} -> {output_dir}")
    print("=" * 50)
    
    # 递归遍历所有子目录
    for usdz_file in input_dir.rglob("*.usdz"):
        # 计算相对路径以保持目录结构
        relative_path = usdz_file.relative_to(input_dir)
        glb_path = output_dir / relative_path.with_suffix('.glb')
        
        # 确保输出目录存在
        glb_path.parent.mkdir(parents=True, exist_ok=True)
        
        total_files += 1
        print(f"[{total_files}] 转换: {relative_path}", end=" => ")
        
        if convert_usdz_to_glb(str(usdz_file), str(glb_path)):
            print("✓")
            success_count += 1
        else:
            print("✕")
    
    # 打印报告
    print("\n" + "=" * 50)
    print(f"转换完成!")
    print(f"扫描到USDZ文件: {total_files}个")
    print(f"成功转换: {success_count}个")
    print(f"失败: {total_files - success_count}个")
    print("=" * 50)

if __name__ == "__main__":
    # 配置路径(根据实际情况修改)
    input_folder = "/Users/changchun/Downloads/usdz"
    output_folder = "/Users/changchun/Downloads/usdz_to_glb"
    
    # 验证路径
    if not Path(input_folder).exists():
        print(f"错误:输入目录不存在 - {input_folder}")
        exit(1)
    
    # 执行转换
    batch_convert(input_folder, output_folder)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山楂树の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值