Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY

In jedem Verzeichnis, Alle fbx-Dateien Zum ASCII-Format oder BINARY-Format Es gab eine Zeit, in der ich alles auf einmal konvertieren wollte Ich habe es mit Python fbx sdk versucht.

Umgebung

FBX Python Bindings

Lesen Sie die offizielle Dokumentation und fügen Sie FBX Python Bindings in Ihre Umgebung ein. Installing Python FBX (2020.0.1)

Übrigens, wenn Sie die neueste Version zu diesem Zeitpunkt sehen möchten, Es scheint, dass Sie es wie folgt erreichen können. https://www.autodesk.com/products/fbx/overview -> GET FBX SDK -> FBX Python Bindings

Konvertieren

FBX-Dateiformatkonvertierung Es scheint, dass Sie es so machen können.

Ich habe dies als Referenz verwendet

Konvertieren Sie ein beliebiges fbx-Dateiformat


from fbx import FbxManager
from fbx import FbxScene
from fbx import FbxImporter
from fbx import FbxExporter

FBX_MANAGER = FbxManager.Create()

def _get_file_fomrat(format_name):
    io_plugin_registry = FBX_MANAGER.GetIOPluginRegistry()
    for format_id in range(io_plugin_registry.GetWriterFormatCount()):
        if io_plugin_registry.WriterIsFBX(format_id):
            desc = io_plugin_registry.GetWriterFormatDescription(format_id)
            if format_name in desc:
                return format_id
    # Default format is auto
    return -1

def _convert(path, file_format_id):
    scene = FbxScene.Create(FBX_MANAGER, "")
    importer = FbxImporter.Create(FBX_MANAGER, "")
    importer.Initialize(path, -1)
    importer.Import(scene)
    importer.Destroy()
    exporter = FbxExporter.Create(FBX_MANAGER, "")
    exporter.Initialize(path, file_format_id)
    exporter.Export(scene)
    exporter.Destroy()
    scene.Destroy()

#Konvertieren Sie die fbx-Zieldatei in eine Binärdatei
_convert('target_fbx_file_path', _get_file_fomrat('binary'))
#Konvertieren Sie die fbx-Zieldatei in ASCII
_convert('target_fbx_file_path', _get_file_fomrat('ascii'))

Überprüfen Sie vor der Konvertierung, ob das Ziel im Binärformat vorliegt

Es ist sinnlos, in dasselbe Format zu konvertieren Versuchen Sie, Konvertierungen in das gewünschte Format auszuschließen.

Hier scheint inoffiziell, aber im Binärformat zu sein Da die Header-Informationen aufgelistet sind, werde ich darauf verweisen.

Überprüfen Sie, ob die optionale fbx-Datei im Binärformat vorliegt


FBX_BINARY_SIGNATURE = b"Kaydara FBX Binary  \x00\x1A\x00"
FBX_BINARY_SIGNATURE_LENGTH = len(FBX_BINARY_SIGNATURE)

def _is_binary_fbx(path):
    with open(path, 'rb') as file:
        return file.read(FBX_BINARY_SIGNATURE_LENGTH) == FBX_BINARY_SIGNATURE
    return False

Da die ersten 23 Bytes feste Binärdaten sind, Ich lese so viele Dateien wie ich brauche und vergleiche sie.

Wenn Sie dieses Urteil zu Beginn der Konvertierungsmethode setzen, Es werden nur Dateien konvertiert, die sich vom gewünschten Format unterscheiden.

def _convert(path, file_format_id, required_binary):
    if _is_binary_fbx(path) != required_binary:
        scene = FbxScene.Create(FBX_MANAGER, "")
        importer = FbxImporter.Create(FBX_MANAGER, "")
        importer.Initialize(path, -1)
        importer.Import(scene)
        importer.Destroy()
        exporter = FbxExporter.Create(FBX_MANAGER, "")
        exporter.Initialize(path, file_format_id)
        exporter.Export(scene)
        exporter.Destroy()
        scene.Destroy()

Beschleunigen Sie mit mehreren Prozessen

1fbx als 1 Job konvertieren Parallelisieren Sie die Konvertierung Datei für Datei Ich werde versuchen, es zu beschleunigen.

Verwenden Sie concurrent.futures.ProcessPoolExecutor. Python 3.x-Serie ist erforderlich.

Parallelisieren und beschleunigen


import concurrent.futures

with concurrent.futures.ProcessPoolExecutor() as executor:
    executor.submit(_convert, 'target_fbx_file_path', _get_file_fomrat('ascii'), false)

Gehen

Ich möchte also alles in einem beliebigen Verzeichnis anvisieren os.walk.

import os
import sys

with concurrent.futures.ProcessPoolExecutor() as executor:
    file_format_id = _get_file_fomrat('binary')
    for root, _dirs, files in os.walk('target_directory_path'):
        for filename in files:
            if filename.endswith('.fbx'):
                path = os.path.join(root, filename)
                executor.submit(_convert, path, file_format_id, true)

Ich denke, dies hat die Stapelkonvertierung etwas schneller ermöglicht.

Geben Sie die FBX-Dateiversion der Ausgabedatei an

Die konvertierte Datei hängt von der Version des verwendeten FBX SDK ab. Es kann wie folgt angegeben werden.

from fbx import FbxSceneRenamer

# FBXVersion:Werden Sie 7500
exporter.SetFileExportVersion('FBX201600', FbxSceneRenamer.eNone)
# FBXVersion:Werden Sie 7200
exporter.SetFileExportVersion('FBX201200', FbxSceneRenamer.eNone)

Die Version, die angegeben werden kann, ist Definiert in fbxio.h Zeichenfolge vom Typ FBX_xxxx_xx_COMPATIBLE.

Zusammenfassung

Zusammenfassend sieht es so aus, als ob es unten hochgeladen wurde. https://github.com/yassy0413/fbx-file-utility-python/blob/master/fbx_file_format_utility.py

Recommended Posts

Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
So konvertieren Sie Gleitkommazahlen in Python in Binärzahlen
Konvertieren Sie Markdown in Python in PDF
Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art
Konvertieren Sie die psd-Datei in Python in png
In Python von Markdown in HTML konvertieren
Konvertieren Sie die absolute URL in eine relative URL in Python
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Lesen Sie die Big-Endian-Binärdatei in Python und konvertieren Sie sie in ndarray
Konvertieren Sie PDFs mit Python in Massenbilder
Zusammenfassung zum Importieren von Dateien in Python 3
Dichotomie mit Python
Konvertieren Sie UTF-8-CSV-Dateien in Excel
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
So erhalten Sie die Dateien im Ordner [Python]
Stapelkonvertierung von PSD-Dateien im Verzeichnis in PDF
Konvertieren Sie den exponentiellen Float in Python in str
Binäre Suche in Python
Konvertieren Sie kubischen Netzcode in Python in WKT
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Konvertieren Sie die JPYTER-Notebook-IPynb-Datei in die ausführbare Python-Py-Datei
So konvertieren / wiederherstellen Sie einen String mit [] in Python
[Python] Konvertieren Sie Dezimalzahlen in Binär-, Oktal- und Hexadezimalzahlen
Konvertieren Sie das NumPy-Array "ndarray" in Python [tolist ()]
Konvertieren Sie die Netzmaske der CIDR-Notation in Python in eine gepunktete Dezimalschreibweise
Konvertieren Sie das Bild in .zip mit Python in PDF
Konvertieren Sie die asynchrone API im Callback-Stil in async / await in Python
So laden Sie Dateien von Selenium of Python in Chrome herunter
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Konvertieren Sie den Webpay-Entitätstyp in den Dict-Typ (rekursiv in Python).
Konvertieren Sie eine hexadezimale Zeichenfolge in eine Binärzeichenfolge
So löschen Sie stdout in Python
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Melden Sie sich auf der Website in Python an
Binäre Suche in Python / C ++
Algorithmus in Python (Dichotomie)
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie die CIDR-Notation in Python
Sprechen mit Python [Text zu Sprache]
Wie man in Python entwickelt
Konvertieren Sie Python 3.x-Code in Python 2.x.
Post an Slack in Python
[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien
Batch-Konvertierung aller XLSX-Dateien im Ordner in CSV-Dateien
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text
Verschieben von CSV-Dateien mit Python Teil 1
Schreiben Sie eine Dichotomie in Python
[Python] Wie man PCA mit Python macht
Speichern Sie die Binärdatei in Python
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Bearbeiten Sie Dateien und Ordner in Python
Umgang mit JSON-Dateien in Python
Laden Sie Google Drive-Dateien in Python herunter
Workflow zum Konvertieren der Formel (Bild) in Python