当前位置: 首页 > news >正文

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 Pathdef convert_usdz_to_glb(input_path, output_path):"""单纯转换USDZ到GLB,不做任何优化和缩放"""try:# 清空场景bpy.ops.wm.read_factory_settings(use_empty=True)# 导入USDZbpy.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 Trueexcept Exception as e:print(f"转换失败 {input_path}: {str(e)}")return Falsedef batch_convert(input_dir, output_dir):"""批量转换(递归处理子目录)"""input_dir = Path(input_dir)output_dir = Path(output_dir)# 统计变量total_files = 0success_count = 0print(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 += 1print(f"[{total_files}] 转换: {relative_path}", end=" => ")if convert_usdz_to_glb(str(usdz_file), str(glb_path)):print("✓")success_count += 1else: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)

http://www.dtcms.com/a/308946.html

相关文章:

  • 智能体通信协议
  • C++(模板,智能指针)
  • 什么是数据集成?和数据融合有什么区别?
  • Video_1920×1080i 1920_1080p
  • 7月31日作业
  • 模型训练速度慢排查
  • C++法则22:运算符 ::* 和 ->* 和 ::* 是独特的整体运算符,是不可分的。
  • 从关键词到用户意图:2025年Google Trends的语义化SEO实战手册
  • 化学结构式解读指南:从基础认知到InDraw智能识别
  • 大小端字节序详解
  • LCGL使用简介
  • Kubernetes架构概览
  • 2025虚幻5光明之魂开发思考1——借鉴软件工程
  • Dify 从入门到精通(第 6/100 篇):配置你的第一个 LLM:OpenAI、Claude 和 Ollama
  • kafka使用kraft
  • QT 动态属性和静态属性
  • Spring框架与AutoCAD结合应用
  • 2025年6月人工智能领域研究热点扫描|人工智能顶级期刊TPAMI
  • vue3 v-html绑定数据,点击sub实现popover效果
  • kamailio uac_req_send()
  • 项目中如何定义项目范围
  • 【Kiro Code 从入门到精通】重要的功能
  • 删除无效索引:提升写入性能的维护技巧
  • Linux日志管理与时间同步
  • 05 GWAS表型数据处理原理
  • Protobuf动态解析
  • 蓝牙耳机充不进去电怎么办?以换代修更简单!
  • 八股训练--Spring
  • Spring Batch参数校验失败问题分析:JobParametersValidator校验了两次JobParametersIncrementer的参数
  • 详解Vite 配置中的代理功能