jianying-plugin 1.0.4
Add your description here
Requires Python: >=3.9

# jianying-plugin

剪映（JianYing）视频编辑软件插件项目，基于zhkj-plugins框架，提供剪映自动化操作功能。

## 核心功能

### 1. 声明插件
```python
from zhkj_plugins.plugin_base import PluginBase

from src.plugins.plugin_manager import get_plugin_manager


class JianyingPlugin(PluginBase):

    def __init__(self):
        super().__init__("jianying-plugin",  #插件名称，这个全局都要一样
        get_plugin_manager())
        
```

### 2. 插件管理类（）
```bash
pip install zhkj-plugins-parent --upgrade -i https://pypi.org/simple
```
```python
from zhkj_plugins import PluginManager

from src.auxiliary import Constants


def get_plugin_manager(plugin_install_dir="plugins", auto_check_updates=True, version_checks_url="",
                       settings_url=Constants.REMOTE_SETTINGS_URL):
    """
    @param plugin_install_dir: 插件存放文件夹
    @param auto_check_updates: 启动检查是否需要更新
    @param version_checks_url: 检查更新url（返回所有插件版本的json） 与settings_url 只需配置其中一个就可以
    @param settings_url: 软件的全局远程json（app_attr）
    
    """
    return PluginManager({
        "plugin_install_dir": plugin_install_dir,
        "auto_check_updates": auto_check_updates,
        "version_checks_url": version_checks_url,
        "settings_url": settings_url,
    })
```


## 安装（JianyingPlugin 这个要在主线程中初始化，软件退出后可以自动关闭）

```python
plugin = JianyingPlugin()
if not plugin.is_installed():
  plugin.install()
```

### 3. 定义插件操作类（src/plugin_calls/jianying_plugin_call.py 与接口类一一对应，包括路径）
```python
import logging
from typing import Optional, List

from zhkj_plugins.plugin_caller import RPCCallerBase, rpc_class, rpc_method

logger = logging.getLogger(__name__)


@rpc_class("jianying-plugin")
class JianyingPluginCall(RPCCallerBase):
    @rpc_method()
    def replace_material(self, draft_name: str, material_path: str, output_path: str = None,
                         draft_folder_path: Optional[str] = None, auto_close: bool = True):
        """替换草稿中的素材

        Args:
            draft_name: 草稿名称
            material_path: 素材文件路径
            output_path: 视频导出路径
            draft_folder_path: 草稿文件夹路径，可选
            auto_close: 自动关闭剪映

        Raises:
            FileNotFoundError: 素材文件不存在
            ImportError: pymediainfo未安装
            DraftParseException: 草稿解析失败
            MaterialProcessingException: 素材处理失败
        """
        pass

```

### 4. 启动剪映软件

```python
from src.plugin_calls.jianying_plugin_call import JianyingPluginCall

plugin_call = JianyingPluginCall("jiangying-plugin", #插件名称
 Constants.SECRET_KEY, # 接口加密key
  ).replace_material("demo",#草稿名
   r"C:\Users\123\Downloads\o4PfDI5EBcmviBWvgifBO1QPHi6B9oAS47Y9T8.mp4"# 替换的素材
   )

# 启动剪映
plugin_call.start_jianying()
```

### 5. 停止剪映软件

```python
# 停止剪映
plugin_call.stop_jianying()
```

### 6. 替换素材

```python
# 替换草稿中的素材
output_video = plugin_call.replace_material(
    draft_name="模板草稿",           # 剪映草稿名称
    material_path="new_video.mp4",   # 新素材文件路径
    output_path="output_folder",     # 导出目录（可选）
    draft_folder_path=None,          # 草稿文件夹路径（可选，使用默认路径）
    auto_close=True                  # 完成后自动关闭剪映
)
```

**替换素材功能说明：**

- 自动解析指定草稿中的不可见视频片段
- 根据片段总时长调整素材（截断或循环）
- 分割素材匹配各个片段时长
- 创建新草稿并导出视频
- 自动清理临时文件

## 使用示例

```python
from src.plugin_calls.jianying_plugin_call import JianyingPluginCall

# 创建插件调用实例
plugin_call = JianyingPluginCall()

# 启动剪映
plugin_call.start_jianying()

# 替换素材
output_path = plugin_call.replace_material(
    draft_name="我的模板",
    material_path="/path/to/video.mp4",
    output_path="/output"
)

print(f"导出视频: {output_path}")

# 停止剪映
plugin_call.stop_jianying()
```

## 依赖项
- comtypes>=1.4.13
- flask>=3.1.2
- pycryptodome>=3.23.0
- pymediainfo>=7.0.1
- pywin32>=311
- uiautomation>=2.0.29
- zhkj-plugins-parent==0.1.73