March 26, 2025

🎬 用 Python+ Tkinter GUI 快速搭建专业的后期项目文件夹结构:穿山甲项目生成器实践分享

我用 Python 写了一个小工具——穿山甲后期项目文件夹生成器,帮我和团队自动生成标准化的后期项目文件夹结构,并附带空白工程文件,便于快速开启剪辑流程。

🎬 用 Python+ Tkinter GUI 快速搭建专业的后期项目文件夹结构:穿山甲项目生成器实践分享

作者:Gabe | 导演 / 程序爱好者

为什么需要自动化生成项目结构?

作为影视从业人员,我深知“整理素材”是一项无聊但又至关重要的工作。一套清晰一致的文件夹结构不仅能提高后期效率,还能让协作流程更顺畅。然而,手动创建这些目录非常耗时,还容易出错。(主要是现在需要自己来进行DIT和后期的工作越来越多)

(为了不再折磨我自己)于是,我用 Python 写了一个小工具——穿山甲后期项目文件夹生成器,帮我和团队自动生成标准化的后期项目文件夹结构,并附带空白工程文件,便于快速开启剪辑流程。(至于为什么要叫穿山甲,我想用此方式来纪念2020年的投资建设的穿山甲以太坊矿场)


🐍 技术栈与核心思路

这个工具基于 Python 编写,采用了标准 GUI 库 Tkinter 实现可视化操作。

🧠 核心逻辑:

  1. 用户输入项目名称、日期与存储路径;
  2. 程序自动创建如下目录结构:
项目名_日期/
├── 01_Footage/
│   ├── A-Cam/
│   ├── B-Cam/
│   ├── C-Cam/
│   ├── D-Cam/
│   └── ScreenRecord/
├── 02_Photo/
│   ├── RAW/
│   ├── JPEG/
│   └── HEIC/
├── 03_Audio/
│   ├── VO/
│   ├── Music/
│   └── SFX/
├── 04_Assets/
│   ├── Titles/
│   ├── LowerThirds/
│   ├── Logo/
│   └── LUTs/
├── 05_ProjectFiles/
│   ├── Premiere/ 项目名.prproj
│   ├── DaVinci/ 项目名.drp
│   ├── FinalCut/ 项目名.fcpxml
│   ├── AfterEffects/
│   ├── Audition/
│   └── Interchange/
├── 06_Exports/
│   ├── Preview/
│   └── Final/
└── 07_Backup/
  1. 程序在常用剪辑软件目录中自动创建空白项目文件,省去每次手动新建工程的步骤。

🧪 使用演示

运行程序后会弹出一个简单的 GUI 界面:

  • 输入项目名称(如 "MusicVideo01");
  • 日期默认是今天(可修改);
  • 浏览选择你想保存的位置;
  • 点击「✅ 创建文件夹结构」,几秒钟后整个结构就创建好了!
穿山甲项目生成器

🚀 亮点功能

功能 描述
🎨 图形界面 不需要命令行操作,任何人都能用
🗃️ 自动归类素材 相机画面、音频、LUT、图片分门别类
🔧 支持多种剪辑软件格式 Premiere、DaVinci、FCPX 等一网打尽
📅 支持自定义日期命名 满足项目管理需求
📁 一键生成 适合工作室、独立导演、Vloger 使用

🛠️ 安装与使用方法

只需一台安装了 Python 的电脑:

import os
import tkinter as tk
from tkinter import filedialog, messagebox
from datetime import datetime

def create_project_structure():
    project_name = entry_name.get().strip()
    project_date = entry_date.get().strip()
    base_dir = entry_path.get().strip()

    if not project_name or not base_dir:
        messagebox.showwarning("缺少信息", "请填写项目名称和路径。")
        return

    folder_name = f"{project_name}_{project_date}"
    project_path = os.path.join(base_dir, folder_name)

    try:
        # 01_Footage
        for cam in ['A-Cam', 'B-Cam', 'C-Cam', 'D-Cam', 'ScreenRecord']:
            os.makedirs(os.path.join(project_path, "01_Footage", cam))

        # 02_Photo
        for sub in ['RAW', 'JPEG', 'HEIC']:
            os.makedirs(os.path.join(project_path, "02_Photo", sub))

        # 03_Audio
        for sub in ['VO', 'Music', 'SFX']:
            os.makedirs(os.path.join(project_path, "03_Audio", sub))

        # 04_Assets
        for sub in ['Titles', 'LowerThirds', 'Logo', 'LUTs']:
            os.makedirs(os.path.join(project_path, "04_Assets", sub))

        # 05_ProjectFiles
        project_dirs = {
            "Premiere": ".prproj",
            "DaVinci": ".drp",
            "FinalCut": ".fcpxml",
            "AfterEffects": "",
            "Audition": "",
            "Interchange": ""
        }

        for sub, ext in project_dirs.items():
            sub_path = os.path.join(project_path, "05_ProjectFiles", sub)
            os.makedirs(sub_path)
            if ext:
                file_path = os.path.join(sub_path, f"{project_name}{ext}")
                open(file_path, 'a').close()  # 创建空文件

        # 06_Exports
        for sub in ['Preview', 'Final']:
            os.makedirs(os.path.join(project_path, "06_Exports", sub))

        # 07_Backup
        os.makedirs(os.path.join(project_path, "07_Backup"))

        messagebox.showinfo("成功", f"✅ 项目文件夹和空项目文件已创建:\n{project_path}")
    except Exception as e:
        messagebox.showerror("错误", str(e))

def browse_folder():
    folder = filedialog.askdirectory()
    if folder:
        entry_path.delete(0, tk.END)
        entry_path.insert(0, folder)

# GUI
root = tk.Tk()
root.title("穿山甲后期项目文件夹生成器")
root.geometry("400x270")
root.resizable(False, False)

tk.Label(root, text="项目名称:").pack(pady=5)
entry_name = tk.Entry(root, width=40)
entry_name.pack()

tk.Label(root, text="日期(默认今天):").pack(pady=5)
entry_date = tk.Entry(root, width=40)
entry_date.insert(0, datetime.today().strftime("%Y-%m-%d"))
entry_date.pack()

tk.Label(root, text="存储位置:").pack(pady=5)
entry_path = tk.Entry(root, width=40)
entry_path.pack()
tk.Button(root, text="浏览...", command=browse_folder).pack()

tk.Button(root, text="✅ 创建文件夹结构", command=create_project_structure, bg="green", fg="white").pack(pady=20)

root.mainloop()

复制上述代码,新建一个文档复制进去。改后缀为py,使用python运行即可

(如你想将其打包为可执行程序 .exe,可用 pyinstaller


🔮 后续计划

目前这是我个人使用的初版,接下来我打算加入以下功能:

  • 自定义文件夹模板(如纪录片、短剧、商业广告结构略有差异);
  • 添加素材自动归档功能(识别文件类型并分类);
  • Mac 支持自动挂载外置磁盘;
  • 自动生成 README 文件标注项目结构。

📦 结语

灵感的实现,不一定非得是华丽的代码,有时候一个小工具就能极大提升工作效率。希望这个“穿山甲生成器”也能帮你从杂乱的素材海洋中解脱出来,把精力留给创作本身。


如果你对这个项目感兴趣,欢迎评论交流。


Last updated: March 26, 2025