@mixvideo/jianying
Version:
剪映草稿文件工具包 - 解析、分析和生成剪映项目文件
184 lines (136 loc) • 5.16 kB
Markdown
# @mixvideo/jianying
剪映草稿文件工具包 - 提供剪映(CapCut)草稿文件的解析、分析和生成功能。
## 🎯 功能特性
### 📖 解析功能
- **📋 项目信息**: 提取项目ID、时长、帧率、画布尺寸等基本信息
- **🎥 视频素材**: 解析所有视频素材的详细信息(文件路径、分辨率、时长等)
- **🎵 音频素材**: 提取音频素材信息(类型、时长、AI特性等)
- **🛤️ 轨道分析**: 详细分析视频轨道和片段信息
- **📊 统计数据**: 提供项目的统计信息和文件使用情况
### 🔍 增强分析
- **🧮 复杂度分析**: 评估项目编辑复杂度
- **⏱️ 时间轴分析**: 分析时间轴结构和片段分布
- **📁 素材使用**: 统计素材使用情况和重复使用
- **🎛️ 编辑特性**: 识别使用的编辑功能和效果
- **💡 智能建议**: 提供优化建议和最佳实践
### 🚀 生成功能
- **📁 目录扫描**: 自动扫描指定目录的所有视频和音频文件
- **🎬 草稿生成**: 根据媒体文件自动生成完整的剪映草稿文件
- **🎛️ 参数配置**: 支持自定义画布尺寸、帧率、项目名称等
- **📹 视频信息**: 集成 ffprobe 获取真实的视频信息(分辨率、时长等)
- **🔄 格式兼容**: 生成的文件完全兼容剪映格式,可直接导入使用
## 📦 安装
```bash
npm install @mixvideo/jianying
```
## 🚀 使用方法
### 基本解析
```typescript
import { parseJianyingDraft, formatVideoInfo } from '@mixvideo/jianying';
// 解析草稿文件
const videoInfo = parseJianyingDraft('./draft_content.json');
// 输出格式化信息
formatVideoInfo(videoInfo);
// 访问解析结果
console.log('项目时长:', videoInfo.projectDurationSeconds, '秒');
console.log('视频素材数量:', videoInfo.videoClips.length);
console.log('音频素材数量:', videoInfo.audioClips.length);
```
### 增强分析
```typescript
import { analyzeJianyingProject, analyzeJianyingProjectFromData } from '@mixvideo/jianying';
// 从文件路径分析
const analysis = analyzeJianyingProject('./draft_content.json');
// 从已解析的数据分析
const videoInfo = parseJianyingDraft('./draft_content.json');
const analysis2 = analyzeJianyingProjectFromData(videoInfo);
// 访问分析结果
console.log('复杂度评分:', analysis.analysis.complexity.score);
console.log('复杂度等级:', analysis.analysis.complexity.level);
console.log('建议:', analysis.recommendations);
```
### 生成草稿文件
```typescript
import { generateDraft, scanDirectory } from '@mixvideo/jianying';
// 扫描目录获取媒体文件
const files = scanDirectory('./videos');
// 生成草稿文件
const draft = generateDraft(files, {
canvasWidth: 1920,
canvasHeight: 1080,
fps: 60,
projectName: '我的项目',
useFFProbe: true // 使用 ffprobe 获取真实视频信息
});
// 保存草稿文件
import * as fs from 'fs';
fs.writeFileSync('./generated_project.json', JSON.stringify(draft, null, 2));
```
### 工具函数
```typescript
import { JianyingUtils, JIANYING_CONSTANTS } from '@mixvideo/jianying';
// 时间转换
const seconds = JianyingUtils.microsecondsToSeconds(1000000); // 1秒
const microseconds = JianyingUtils.secondsToMicroseconds(10); // 10000000微秒
// 宽高比计算
const ratio = JianyingUtils.calculateAspectRatio(1920, 1080); // "16:9"
// 文件类型检查
const isVideo = JianyingUtils.isVideoFile('video.mp4'); // true
const isAudio = JianyingUtils.isAudioFile('audio.mp3'); // true
// 常量使用
console.log('默认帧率:', JIANYING_CONSTANTS.DEFAULT_FPS); // 30
console.log('支持的视频格式:', JianyingUtils.VIDEO_EXTENSIONS);
```
## 📋 API 参考
### 类型定义
```typescript
interface VideoInfo {
projectId: string;
projectDuration: number;
projectDurationSeconds: number;
fps: number;
canvasSize: { width: number; height: number; ratio: string };
videoClips: VideoClip[];
audioClips: AudioClip[];
tracks: Track[];
appInfo: AppInfo;
statistics: Statistics;
}
interface EnhancedAnalysis {
basicInfo: VideoInfo;
analysis: {
complexity: ComplexityAnalysis;
timeline: TimelineAnalysis;
materials: MaterialUsage;
editing: EditingFeatures;
};
recommendations: Recommendation[];
}
```
### 主要函数
- `parseJianyingDraft(filePath: string): VideoInfo` - 解析草稿文件
- `analyzeJianyingProject(filePath: string): EnhancedAnalysis` - 增强分析
- `generateDraft(files: VideoFileInfo[], options: GenerateOptions): GeneratedDraft` - 生成草稿
- `scanDirectory(dirPath: string): VideoFileInfo[]` - 扫描目录
## 🔧 开发
```bash
# 克隆仓库
git clone https://github.com/mixvideo/mixvideo.git
cd mixvideo/packages/jianying
# 安装依赖
npm install
# 构建
npm run build
# 测试
npm run test
# 开发模式
npm run dev
```
## 📄 许可证
MIT License
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
## 📚 相关链接
- [剪映官网](https://www.capcut.com/)
- [项目仓库](https://github.com/mixvideo/mixvideo)
- [问题反馈](https://github.com/mixvideo/mixvideo/issues)