PHPackages                             hunjian/aliyun-ims-mixcut - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. hunjian/aliyun-ims-mixcut

ActiveLibrary[Image &amp; Media](/categories/media)

hunjian/aliyun-ims-mixcut
=========================

PHP 7.3 compatible composer package for Alibaba Cloud IMS AI mixcut timeline building and job submission.

v1.0.0(1mo ago)02MITPHPPHP &gt;=7.3

Since Apr 11Pushed 1w agoCompare

[ Source](https://github.com/yajiexx/hunjian-aliyun-ims-mixcut)[ Packagist](https://packagist.org/packages/hunjian/aliyun-ims-mixcut)[ Docs](https://github.com/yajie666/hunjian-aliyun-ims-mixcut)[ RSS](/packages/hunjian-aliyun-ims-mixcut/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

 [ ![DreamSeed 种梦计划参赛作品](https://camo.githubusercontent.com/f0fd9c6e8f1cf99920c516b8f2906117e43b536368ba897b968ccba64e6639fb/68747470733a2f2f7777772e647265616d6669656c642e746f702f647265616d2d6669656c642f636f6e746573742d726561646d652f6173736574732f647265616d736565642d726561646d652d62616e6e65722e706e67) ](https://www.dreamfield.top)

aliyun-ims-mixcut
=================

[](#aliyun-ims-mixcut)

使用AI辅助完成的一个面向业务项目的 PHP 7.3 兼容 composer 包，用来封装阿里云智能媒体服务 IMS 的 AI 混剪能力。包的核心目标不是“演示如何调一个接口”，而是把 `SubmitMediaProducingJob` / `GetMediaProducingJob` 包装成一套可复用的 Timeline Builder、模板化混剪、批量随机混剪、结果查询和异常处理方案。

设计目标
----

[](#设计目标)

- PHP 7.3 兼容，不使用 PHP 8+ 语法
- PSR-4 自动加载
- Timeline 结构尽量贴近阿里云官方 JSON
- 业务方通过 Builder 和模板类构建 Timeline，而不是手拼数组
- 客户端层通过 Adapter 隔离官方 SDK，便于后续升级
- 保留 `extraFields/raw` 扩展能力，用于承接官方新增字段

架构概览
----

[](#架构概览)

### 1. 模型层

[](#1-模型层)

模型层尽量保持与阿里云官方 Timeline 结构一致：

- `Timeline`
- `VideoTrack` / `VideoTrackClip`
- `AudioTrack` / `AudioTrackClip`
- `SubtitleTrack` / `SubtitleTrackClip`
- `EffectTrack` / `EffectTrackItem`
- `OutputMediaConfig`

所有对象都实现 `toArray()`，最终可以稳定序列化为官方接口所需的数组 / JSON。

### 2. 局部效果和全局效果分离

[](#2-局部效果和全局效果分离)

- Clip 内效果：挂在 `VideoTrackClip::Effects` 或 `AudioTrackClip::Effects`
    - 例如 `Transition`、`Filter`、`VFX`、`Crop`、`KenBurns`
    - 这类效果只影响某个素材片段
- 全局效果：放在 `EffectTracks`
    - 例如 `GlobalImage`、全局滤镜、全局特效、水印
    - 这类效果对整条时间线或指定时间范围生效

这种分法适合 AI 混剪，因为随机化策略通常需要独立控制：

- 某个片段自己的滤镜 / 转场 / KenBurns
- 整条视频统一的风格滤镜 / 全局背景 / 水印

### 3. Builder 层

[](#3-builder-层)

Builder 负责把“好写”翻译成“官方结构”：

- `TimelineBuilder`：统筹多轨、全局效果、输出配置
- `SubtitleBuilder`：字幕样式、背景框、描边、阴影、AutoWrap、FixedFontSize
- `AudioBuilder`：BGM、AI 配音、AFade、ADenoise、ALoudNorm、AEqualize
- `EffectTrackBuilder`：全局背景图、全局水印、全局滤镜、全局特效
- `Randomizer` / `StrategyBuilder`：素材顺序、截取区间、转场、滤镜、特效、BGM、字幕风格的随机化
- `MixcutTemplateBuilder`：模板类复用的高层组合器

### 4. 模板层

[](#4-模板层)

内置 3 个可直接使用的模板类：

- `PortraitMixcutTemplate`
- `AiNarrationImageVideoTemplate`
- `BatchRandomMixcutTemplate`

### 5. 客户端 / 服务层

[](#5-客户端--服务层)

- `ImsClientFactory`：创建官方 SDK 适配器或本地 Stub
- `ImsJobClient`：负责 submit/query 的标准化
- `MediaProducingService`：提交、查询、轮询
- `BatchProducingService`：批量提交

### 6. 业务 DTO 层

[](#6-业务-dto-层)

为了让真实项目接入更顺手，额外补了一层业务 DTO：

- `Material`：单个素材 DTO
- `MaterialPool`：素材池
- `ThemeConfig`：主题 / 活动级默认配置
- `BatchTask`：单个批量任务
- `BatchTaskListBuilder`：批量任务清单生成器

这样你的业务系统可以先维护素材池和批量任务，再由模板去消费，而不是每次都手拼 `pool` / `seed` / `outputMediaConfig` 数组。

### 7. Adapter 隔离

[](#7-adapter-隔离)

官方 SDK 相关逻辑全部放在：

- `src/Client/Adapter/OfficialIceAdapter.php`

当前实现按官方文档和示例使用以下类名：

- `AlibabaCloud\\SDK\\ICE\\V20201109\\ICE`
- `AlibabaCloud\\SDK\\ICE\\V20201109\\Models\\SubmitMediaProducingJobRequest`
- `AlibabaCloud\\SDK\\ICE\\V20201109\\Models\\GetMediaProducingJobRequest`
- `Darabonba\\OpenApi\\Models\\Config`
- `AlibabaCloud\\Credentials\\Credential`

如果阿里云后续调整 SDK 类名或命名空间，只需要修改这个 Adapter，不需要改 Builder / 模板 / 业务层。

### 8. 应用装配层

[](#8-应用装配层)

如果你不想在业务项目里自己反复 `new config/client/service/repository/exporter`，现在还提供：

- `ImsApplication`
- `ImsApplicationFactory`

这一层会统一装配：

- `ImsJobClient`
- `MediaProducingService`
- `BatchProducingService`
- `CampaignProducingService`
- `JsonFileJobRecordRepository`
- `JsonFileCampaignRunReportRepository`
- `CsvJobRecordExporter`
- `JsonCampaignRunReportExporter`

默认情况下，结果会按目录约定落到：

- `runtime/ims/job-records`
- `runtime/ims/campaign-reports`

安装
--

[](#安装)

```
composer require hunjian/aliyun-ims-mixcut
```

如果你需要真的调用阿里云接口，还需要安装官方 SDK 依赖：

```
composer require alibabacloud/ice-20201109
```

说明：

- `alibabacloud/ice-20201109`：IMS/ICE OpenAPI SDK，Composer 会自动安装它依赖的 `alibabacloud/credentials` 和 OpenAPI 相关包
- 如果你因为私有镜像、锁文件或排障需要手动补装 OpenAPI 模型包，请使用 `alibabacloud/darabonba-openapi`，不要写成 `darabonba/openapi`

环境变量
----

[](#环境变量)

不要把 AccessKeyId / AccessKeySecret 硬编码进源码。

```
ALIYUN_IMS_ACCESS_KEY_ID=your-access-key-id
ALIYUN_IMS_ACCESS_KEY_SECRET=your-access-key-secret
ALIYUN_IMS_ENDPOINT=ice.cn-shanghai.aliyuncs.com
ALIYUN_IMS_REGION_ID=cn-shanghai
ALIYUN_IMS_BUCKET=your-output-bucket
ALIYUN_IMS_OUTPUT_PATH_PREFIX=mixcut/output
ALIYUN_IMS_PROJECT_ID=your-ims-project-id
ALIYUN_IMS_OUTPUT_MEDIA_TARGET=oss-object
ALIYUN_IMS_STORAGE_DIR=runtime/ims
```

`ImsConfig::fromEnv()` 会自动读取以上变量，也兼容常见的阿里云通用 AccessKey 变量名。

快速开始
----

[](#快速开始)

```
