Skip to main content
Inspiring
November 14, 2024
Answered

AEで自作したフォルダー整理スクリプトでの、平面レイヤーの管理のバグ

  • November 14, 2024
  • 1 reply
  • 497 views

私が作ったフォルダー整理スクリプトです。ファイルの種類、拡張子に合わせてフォルダーに自動で収納されます。平面にも対応させました。
が、このスクリプトを実行したら生成される「00_SOLID」というフォルダー。
あとからAeで平面レイヤーを生成すると同じ「00_SOLID」という名前のフォルダーが生成され、平面レイヤーはこちらに入ってしまいます。これは私が環境設定で「00_SOLID」を平面フォルダーに指定しているからなのですが、どうしてすでにある方を使ってくれないのでしょうか。
改善が出来ない場合、どうしたらいいかアイデアを教えてください。

//わたしが使ってるファイル整理をワンクリックで実現できます。
//すでにフォルダがある場合、拡張子に応じてフォルダーに収納されます。

function main() {
    // エラーチェックで、プロジェクトが開かれているか確認
    if (!app.project) {
        alert("プロジェクトが開かれていません。\nプロジェクトを開いてから実行してください。");
        return;
    }

    try {
        app.beginUndoGroup("Create and Organize Project Folders");

        // フォルダー名の配列
        var folderNames = [
            "00_SOLID",
            "01_COMP",
            "02_IMAGE",
            "03_AUDIO",
            "04_VIDEO",
            "05_IMAGE_SEQ",
            "06_OTHER",
            "07_RENDER"
        ];

        
        var folders = {};

        // 既存のフォルダーを確認し、なければ新しいフォルダーを作成
        for (var i = 0; i < folderNames.length; i++) {
            var existingFolder = null;
            for (var j = 1; j <= app.project.items.length; j++) {
                var item = app.project.items[j];
                if (item instanceof FolderItem && item.name === folderNames[i]) {
                    existingFolder = item;
                    break;
                }
            }

            if (existingFolder) {
                folders[folderNames[i]] = existingFolder;
            } else {
                var newFolder = app.project.items.addFolder(folderNames[i]);
                newFolder.label = 0;
                folders[folderNames[i]] = newFolder;
            }
        }

        // 既存のファイルをフォルダーに振り分け
        for (var k = 1; k <= app.project.items.length; k++) {
            var item = app.project.items[k];
            // 各ファイルのタイプに応じてフォルダーに移動
            if (item instanceof CompItem) {
                item.parentFolder = folders["01_COMP"];
            } else if (item instanceof FootageItem && item.mainSource instanceof SolidSource) {
                // 平面レイヤーとヌルレイヤーを00_SOLIDに分類
                item.parentFolder = folders["00_SOLID"];
            } else if (item instanceof FootageItem && item.mainSource instanceof FileSource) {
                var fileExtension = item.mainSource.file.name.split('.').pop().toLowerCase();
                // シーケンス画像かどうかの判定する!!
                if (item.mainSource.isStill == false && (fileExtension === 'png' || fileExtension === 'jpg' || fileExtension === 'jpeg')) {
                    item.parentFolder = folders["05_IMAGE_SEQ"];
                } else {
                    switch (fileExtension) {
                        case 'jpg':
                        case 'jpeg':
                        case 'png':
                        case 'gif':
                        case 'bmp':
                        case 'tiff':
                            item.parentFolder = folders["02_IMAGE"];
                            break;
                        case 'wav':
                        case 'mp3':
                        case 'aif':
                        case 'aac':
                        case 'ogg':
                            item.parentFolder = folders["03_AUDIO"];
                            break;
                        case 'mp4':
                        case 'mov':
                        case 'avi':
                        case 'mkv':
                        case 'flv':
                        case 'wmv':
                            item.parentFolder = folders["04_VIDEO"];
                            break;
                        default:
                            item.parentFolder = folders["06_OTHER"];
                            break;
                    }
                }
            }
        }
    } catch (error) {
        alert("エラーが発生しました:\n" + error.toString());
    } finally {
        app.endUndoGroup();
    }
}


main();
This topic has been closed for replies.
Correct answer Cyifon
var solidSource = dummySolid.source; if (solidSource) { solidSource.remove(); // ソースアイテムを削除 }
で削除できました。ありがとうございました!

1 reply

Participating Frequently
November 14, 2024

1. 仮のコンポを作成し、仮の平面を作成する
2. 仮の平面の親フォルダ(parent)を取得して期待する動作に修正する
3. 仮のコンポと仮の平面を削除する

 

のような感じにするとよいのではないかと思います。

CyifonAuthor
Inspiring
November 14, 2024

スクリプトで00_SOLIDの生成を行わず、仮のコンポと仮の平面を作成するようにする。これによってAe側が00_SOLIDを作ってくれる。その後に仮の平面の親フォルダー(Parent)を取得。
その後に仮のコンポと仮の平面を削除、ということでしょうか?
仮の平面の親フォルダー(Parent)を取得するのはどのような意味があるのでしょうか?