aviutl2-api 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aviutl2_api-0.1.0/.gitignore +60 -0
- aviutl2_api-0.1.0/CLAUDE.md +490 -0
- aviutl2_api-0.1.0/LICENSE +21 -0
- aviutl2_api-0.1.0/PKG-INFO +227 -0
- aviutl2_api-0.1.0/README.md +201 -0
- aviutl2_api-0.1.0/docs/CLI_MANUAL.md +971 -0
- aviutl2_api-0.1.0/docs/aup2_format_specification.md +516 -0
- aviutl2_api-0.1.0/pyproject.toml +60 -0
- aviutl2_api-0.1.0/samples/AllFiltersAndMovements.aup2 +1472 -0
- aviutl2_api-0.1.0/samples/AviUtl2_sample_project_file_1.aup2 +417 -0
- aviutl2_api-0.1.0/samples/EmptyProject.aup2 +28 -0
- aviutl2_api-0.1.0/samples/PresetDemo.aup2 +212 -0
- aviutl2_api-0.1.0/samples/PresetDemo2.aup2 +252 -0
- aviutl2_api-0.1.0/samples/PresetDemo_fix.aup2 +253 -0
- aviutl2_api-0.1.0/samples/ShapeMotionTestProject.aup2 +285 -0
- aviutl2_api-0.1.0/samples/SpecialChars.aup2 +66 -0
- aviutl2_api-0.1.0/src/aviutl2_api/__init__.py +87 -0
- aviutl2_api-0.1.0/src/aviutl2_api/cli.py +2310 -0
- aviutl2_api-0.1.0/src/aviutl2_api/json_converter.py +258 -0
- aviutl2_api-0.1.0/src/aviutl2_api/models/__init__.py +22 -0
- aviutl2_api-0.1.0/src/aviutl2_api/models/project.py +188 -0
- aviutl2_api-0.1.0/src/aviutl2_api/models/values.py +126 -0
- aviutl2_api-0.1.0/src/aviutl2_api/parser.py +274 -0
- aviutl2_api-0.1.0/src/aviutl2_api/presets.py +408 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/__init__.py +37 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/blend.py +245 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/canvas.py +318 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/__init__.py +18 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/base.py +162 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/image.py +152 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/shape.py +367 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/text.py +347 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/content/video.py +257 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/core.py +472 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/__init__.py +17 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/base.py +66 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/blur.py +87 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/border.py +130 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/glow.py +172 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/filters/shadow.py +150 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/interpolation.py +363 -0
- aviutl2_api-0.1.0/src/aviutl2_api/renderer/transform.py +359 -0
- aviutl2_api-0.1.0/src/aviutl2_api/serializer.py +164 -0
- aviutl2_api-0.1.0/tests/__init__.py +1 -0
- aviutl2_api-0.1.0/tests/test_parser.py +216 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
ENV/
|
|
27
|
+
env/
|
|
28
|
+
|
|
29
|
+
# IDE
|
|
30
|
+
.idea/
|
|
31
|
+
.vscode/
|
|
32
|
+
*.swp
|
|
33
|
+
*.swo
|
|
34
|
+
*~
|
|
35
|
+
|
|
36
|
+
# Testing
|
|
37
|
+
.pytest_cache/
|
|
38
|
+
.coverage
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.nox/
|
|
42
|
+
|
|
43
|
+
# Type checking
|
|
44
|
+
.mypy_cache/
|
|
45
|
+
|
|
46
|
+
# Ruff
|
|
47
|
+
.ruff_cache/
|
|
48
|
+
|
|
49
|
+
# Secrets
|
|
50
|
+
.env
|
|
51
|
+
*.env
|
|
52
|
+
secrets.env
|
|
53
|
+
|
|
54
|
+
# OS
|
|
55
|
+
.DS_Store
|
|
56
|
+
Thumbs.db
|
|
57
|
+
|
|
58
|
+
# Project specific
|
|
59
|
+
*.a0proj/
|
|
60
|
+
docs/AgentZero_ProjectDescription.md
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
このファイルはClaude Code (claude.ai/code) がこのリポジトリで作業する際のガイダンスを提供します。
|
|
4
|
+
|
|
5
|
+
## プロジェクト概要
|
|
6
|
+
|
|
7
|
+
AviUtl ver.2のプロジェクトファイル(.aup2)を操作するためのPython APIライブラリ。
|
|
8
|
+
.aup2はINI風のテキストフォーマットであり、パースと生成が可能。これにより、AIエージェントによる自動動画編集を実現する。
|
|
9
|
+
|
|
10
|
+
**Vision対応LLM連携**: フレームをPNG画像としてレンダリングし、Vision機能を持つLLMが配置確認を自律的に実行できる。
|
|
11
|
+
|
|
12
|
+
## コマンド
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 開発環境セットアップ
|
|
16
|
+
python -m venv .venv
|
|
17
|
+
source .venv/bin/activate
|
|
18
|
+
pip install -e ".[dev]"
|
|
19
|
+
|
|
20
|
+
# テスト実行
|
|
21
|
+
pytest # 全テスト
|
|
22
|
+
pytest tests/test_parser.py # 特定ファイル
|
|
23
|
+
pytest tests/test_parser.py::TestParserBasic # 特定クラス
|
|
24
|
+
pytest tests/test_parser.py::TestParserBasic::test_parse_empty_project # 単一テスト
|
|
25
|
+
pytest -v # 詳細出力
|
|
26
|
+
|
|
27
|
+
# 型チェック
|
|
28
|
+
mypy src/
|
|
29
|
+
|
|
30
|
+
# リント
|
|
31
|
+
ruff check src/
|
|
32
|
+
|
|
33
|
+
# CLIテスト
|
|
34
|
+
aviutl2 --help
|
|
35
|
+
aviutl2 preset init
|
|
36
|
+
aviutl2 new test.aup2 --width 1920 --height 1080 --fps 30
|
|
37
|
+
|
|
38
|
+
# フレームプレビュー(Vision AI連携用)
|
|
39
|
+
aviutl2 preview project.aup2 --frame 0 -o preview.png
|
|
40
|
+
aviutl2 preview project.aup2 --frame 0 -o small.png --max-width 800 # Vision AI向け縮小
|
|
41
|
+
aviutl2 preview project.aup2 --frame 0 -o half.png --scale 0.5 # 50%縮小
|
|
42
|
+
aviutl2 preview project.aup2 --strip --interval 30 -o timeline.png # フィルムストリップ
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Vision AI連携ワークフロー
|
|
46
|
+
|
|
47
|
+
AIエージェントが動画編集結果を自己検証するためのフロー:
|
|
48
|
+
|
|
49
|
+
1. **プロジェクト編集**: CLIでオブジェクト追加・移動・エフェクト適用
|
|
50
|
+
2. **フレームレンダリング**: `preview`コマンドでPNG出力(縮小推奨)
|
|
51
|
+
3. **Vision確認**: LLMがPNGを読み込み配置・アニメーションを確認
|
|
52
|
+
4. **修正ループ**: 問題があれば編集→レンダリング→確認を繰り返す
|
|
53
|
+
|
|
54
|
+
**重要**: フルHD(1920x1080)画像はAPIエラーの原因となるため、`--max-width 800`等で縮小すること。
|
|
55
|
+
|
|
56
|
+
### リサイズオプション
|
|
57
|
+
|
|
58
|
+
| オプション | 説明 |
|
|
59
|
+
|-----------|------|
|
|
60
|
+
| `--max-width N` | 最大幅をNピクセルに制限(アスペクト比維持) |
|
|
61
|
+
| `--max-height N` | 最大高さをNピクセルに制限(アスペクト比維持) |
|
|
62
|
+
| `--scale X` | スケール係数(例: 0.5で50%縮小) |
|
|
63
|
+
|
|
64
|
+
**警告出力**:
|
|
65
|
+
- アスペクト比が変更される場合は警告を表示
|
|
66
|
+
- 縮小率25%未満: 細部判別困難の警告
|
|
67
|
+
- 縮小率50%未満: テキスト/細線の視認性低下の注意
|
|
68
|
+
|
|
69
|
+
## アーキテクチャ
|
|
70
|
+
|
|
71
|
+
### データフロー
|
|
72
|
+
```
|
|
73
|
+
.aup2 file → parser.py → Project/Scene/TimelineObject/Effect → serializer.py → .aup2 file
|
|
74
|
+
↓
|
|
75
|
+
json_converter.py ↔ JSON (LLM用)
|
|
76
|
+
↓
|
|
77
|
+
renderer/core.py → PNG frames (Vision AI用)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 主要コンポーネント
|
|
81
|
+
|
|
82
|
+
- **Models** (`models/`): データ構造
|
|
83
|
+
- `Project`: プロジェクト全体(複数Scene含む)
|
|
84
|
+
- `Scene`: シーン(width, height, fps、複数TimelineObject)
|
|
85
|
+
- `TimelineObject`: タイムライン上のオブジェクト(layer, frame範囲、複数Effect)
|
|
86
|
+
- `Effect`: エフェクト(name, properties辞書)
|
|
87
|
+
- `StaticValue` / `AnimatedValue`: プロパティ値の型
|
|
88
|
+
|
|
89
|
+
- **Parser** (`parser.py`): .aup2テキストをPythonオブジェクトに変換
|
|
90
|
+
- **Serializer** (`serializer.py`): PythonオブジェクトをUTF-8/CRLF形式で出力
|
|
91
|
+
- **JSON Converter** (`json_converter.py`): LLM連携用JSON変換
|
|
92
|
+
- **Presets** (`presets.py`): アニメーション/エフェクトのプリセット管理
|
|
93
|
+
- **CLI** (`cli.py`): Clickベースのコマンドラインツール
|
|
94
|
+
|
|
95
|
+
- **Renderer** (`renderer/`): フレームプレビュー生成(OpenCV/Pillow使用)
|
|
96
|
+
- `core.py`: FrameRendererがオブジェクトをレイヤー順にレンダリング
|
|
97
|
+
- `canvas.py`: FrameBuffer(リサイズ機能付き)
|
|
98
|
+
- `content/`: 図形、テキスト、画像、動画のレンダラー
|
|
99
|
+
- `filters/`: ぼかし、縁取り、影、グローのフィルタ
|
|
100
|
+
- `transform.py`: 座標変換、回転、拡大縮小
|
|
101
|
+
- `blend.py`: 13種類の合成モード処理
|
|
102
|
+
- `interpolation.py`: アニメーション補間(直線、補間、瞬間、反復、回転)
|
|
103
|
+
|
|
104
|
+
## ディレクトリ構造
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
src/aviutl2_api/
|
|
108
|
+
├── models/
|
|
109
|
+
│ ├── project.py # Project, Scene, TimelineObject, Effect
|
|
110
|
+
│ └── values.py # StaticValue, AnimatedValue, AnimationParams
|
|
111
|
+
├── parser.py # .aup2パーサー
|
|
112
|
+
├── serializer.py # .aup2シリアライザ
|
|
113
|
+
├── json_converter.py # JSON変換
|
|
114
|
+
├── presets.py # プリセットシステム
|
|
115
|
+
├── cli.py # CLIツール
|
|
116
|
+
└── renderer/ # フレームレンダラー
|
|
117
|
+
├── core.py # FrameRenderer
|
|
118
|
+
├── canvas.py # FrameBuffer
|
|
119
|
+
├── interpolation.py # アニメーション補間
|
|
120
|
+
├── transform.py # 座標変換
|
|
121
|
+
├── blend.py # 合成モード
|
|
122
|
+
├── content/ # コンテンツレンダラー
|
|
123
|
+
│ ├── shape.py, text.py, image.py, video.py
|
|
124
|
+
└── filters/ # フィルタエフェクト
|
|
125
|
+
├── blur.py, border.py, shadow.py, glow.py
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## .aup2 File Format
|
|
129
|
+
|
|
130
|
+
### ファイル仕様
|
|
131
|
+
- **エンコーディング**: UTF-8 (BOMなし)
|
|
132
|
+
- **改行コード**: CRLF (`\r\n`)
|
|
133
|
+
- **フォーマット**: INI風テキスト形式
|
|
134
|
+
|
|
135
|
+
### 座標系
|
|
136
|
+
- **X軸**: 右方向が正
|
|
137
|
+
- **Y軸**: 上方向が正(スクリーン座標とは逆)
|
|
138
|
+
- **Z軸**: 画面奥方向が正
|
|
139
|
+
|
|
140
|
+
### レイヤーと奥行き
|
|
141
|
+
- レイヤー番号が大きいほど**上(手前)**に表示される
|
|
142
|
+
- カメラ制御なしの場合、Z座標は描画順序に影響しない(レイヤー番号のみで決まる)
|
|
143
|
+
- 典型的な配置: Layer 0に背景/動画、Layer 1以降にアノテーション等
|
|
144
|
+
|
|
145
|
+
### 構造
|
|
146
|
+
|
|
147
|
+
```ini
|
|
148
|
+
[project]
|
|
149
|
+
version=2001901
|
|
150
|
+
file=<filepath>
|
|
151
|
+
display.scene=0
|
|
152
|
+
|
|
153
|
+
[scene.N]
|
|
154
|
+
scene=N
|
|
155
|
+
name=<scene_name>
|
|
156
|
+
video.width=1920
|
|
157
|
+
video.height=1080
|
|
158
|
+
video.rate=30 # FPS
|
|
159
|
+
video.scale=1
|
|
160
|
+
audio.rate=44100
|
|
161
|
+
cursor.frame=0
|
|
162
|
+
cursor.layer=0
|
|
163
|
+
display.frame=0
|
|
164
|
+
display.layer=0
|
|
165
|
+
display.zoom=10000
|
|
166
|
+
display.order=0
|
|
167
|
+
display.camera=
|
|
168
|
+
display.grid.x=16,-16
|
|
169
|
+
display.grid.y=16,-16
|
|
170
|
+
display.grid.width=200
|
|
171
|
+
display.grid.height=200
|
|
172
|
+
display.grid.step=200.000000
|
|
173
|
+
display.grid.range=10000.000000
|
|
174
|
+
display.tempo.bpm=120.000000
|
|
175
|
+
display.tempo.beat=4
|
|
176
|
+
display.tempo.offset=0.000000
|
|
177
|
+
|
|
178
|
+
[ObjectID]
|
|
179
|
+
layer=<layer_number>
|
|
180
|
+
focus=1 # (オプション) 選択状態
|
|
181
|
+
frame=<start>,<end>
|
|
182
|
+
|
|
183
|
+
[ObjectID.EffectID]
|
|
184
|
+
effect.name=<effect_type>
|
|
185
|
+
<property>=<value>
|
|
186
|
+
...
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 重要なルール
|
|
190
|
+
|
|
191
|
+
- レイヤー番号が大きいほど上に表示される
|
|
192
|
+
- 同一レイヤー・同一時刻に複数オブジェクトは配置不可
|
|
193
|
+
- フレーム = 秒数 × video.rate
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## プロパティ値の型
|
|
198
|
+
|
|
199
|
+
### 静的値 (StaticValue)
|
|
200
|
+
単一の数値。小数点以下2桁で出力される。
|
|
201
|
+
```
|
|
202
|
+
拡大率=100.00
|
|
203
|
+
透明度=0.00
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### アニメーション値 (AnimatedValue)
|
|
207
|
+
開始値、終了値、移動タイプ、パラメータで構成。
|
|
208
|
+
```
|
|
209
|
+
<開始値>,<終了値>,<移動タイプ>,<パラメータ>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
例:
|
|
213
|
+
```
|
|
214
|
+
X=-1000.00,0.00,補間移動,0
|
|
215
|
+
拡大率=100.00,10.00,直線移動,0
|
|
216
|
+
X=-100.00,100.00,反復移動,4|5
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 文字列値
|
|
220
|
+
そのまま出力。
|
|
221
|
+
```
|
|
222
|
+
フォント=Yu Gothic UI
|
|
223
|
+
合成モード=通常
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### 色値 (重要)
|
|
227
|
+
**16進数文字列**として格納。数値ではない。
|
|
228
|
+
```
|
|
229
|
+
色=ff0000 # 赤
|
|
230
|
+
文字色=ffffff # 白
|
|
231
|
+
影色=000000 # 黒
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**注意**: パーサーで "000000" のような文字列が float(0.0) に変換されないよう、6桁の16進数文字列は文字列として保持する必要がある。
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 移動タイプ (Motion Types)
|
|
239
|
+
|
|
240
|
+
| 日本語名 | 説明 |
|
|
241
|
+
|---------|------|
|
|
242
|
+
| 直線移動 | 線形補間 |
|
|
243
|
+
| 補間移動 | イージング付き補間 |
|
|
244
|
+
| 瞬間移動 | 即座に値が変化 |
|
|
245
|
+
| 反復移動 | 往復運動 (パラメータ: `回数\|周期`) |
|
|
246
|
+
| 回転 | 円周上の移動 (詳細は後述) |
|
|
247
|
+
| ランダム移動 | ランダムな移動 |
|
|
248
|
+
| 加減速移動 | 加速・減速付き |
|
|
249
|
+
| 曲線移動 | ベジエ曲線に沿った移動 |
|
|
250
|
+
|
|
251
|
+
### 回転モード (重要)
|
|
252
|
+
|
|
253
|
+
回転モードは X, Y, Z すべてに同時に適用される。
|
|
254
|
+
|
|
255
|
+
**フォーマット**:
|
|
256
|
+
```
|
|
257
|
+
X=<中心X>,<初期X>,回転,<パラメータ>
|
|
258
|
+
Y=<中心Y>,<初期Y>,回転,<パラメータ>
|
|
259
|
+
Z=<中心Z>,<初期Z>,回転,<パラメータ>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**回転半径の計算**:
|
|
263
|
+
```
|
|
264
|
+
radius = sqrt((初期X - 中心X)^2 + (初期Y - 中心Y)^2 + (初期Z - 中心Z)^2)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**パラメータ形式**:
|
|
268
|
+
```
|
|
269
|
+
4|360|<ベジエ曲線プロファイル>
|
|
270
|
+
```
|
|
271
|
+
- `4`: 制御点タイプ
|
|
272
|
+
- `360`: 回転角度(度)
|
|
273
|
+
- ベジエ曲線プロファイル: 回転速度/イージングの制御
|
|
274
|
+
|
|
275
|
+
**例** (中心(0,100,0)、初期位置(0,200,0)、半径100で公転):
|
|
276
|
+
```
|
|
277
|
+
X=0.00,0.00,回転,4|360|0,1,0.485532,-0.475783,1,0,0.484522,-0.481481
|
|
278
|
+
Y=100.00,200.00,回転,4|360|0,1,0.485532,-0.475783,1,0,0.484522,-0.481481
|
|
279
|
+
Z=0.00,0.00,回転,4|360|0,1,0.485532,-0.475783,1,0,0.484522,-0.481481
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## ベジエ曲線フォーマット
|
|
285
|
+
|
|
286
|
+
AviUtl2でベジエ曲線による挙動制御を行う場合の共通フォーマット。
|
|
287
|
+
|
|
288
|
+
**形式**: `左端点X,左端点Y,左接線X,左接線Y,右端点X,右端点Y,右接線X,右接線Y`
|
|
289
|
+
|
|
290
|
+
**座標系**:
|
|
291
|
+
- X軸: 右向きが正 (0=開始, 1=終了)
|
|
292
|
+
- Y軸: 下向きが正 (プロットエリア上端=0°, 下端=360°)
|
|
293
|
+
|
|
294
|
+
**例**: `0,1,0.485532,-0.475783,1,0,0.484522,-0.481481`
|
|
295
|
+
|
|
296
|
+
| 要素 | 値 | 意味 |
|
|
297
|
+
|------|-----|------|
|
|
298
|
+
| 左端点 | (0, 1) | 開始時点、0°位置 |
|
|
299
|
+
| 左接線 | (0.485532, -0.475783) | 左端点での微分係数 |
|
|
300
|
+
| 右端点 | (1, 0) | 終了時点、360°位置 |
|
|
301
|
+
| 右接線 | (0.484522, -0.481481) | 右端点での微分係数 |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## エフェクト詳細定義
|
|
306
|
+
|
|
307
|
+
### 標準描画 (effect.name=標準描画)
|
|
308
|
+
|
|
309
|
+
すべてのオブジェクトに付与される描画設定。
|
|
310
|
+
|
|
311
|
+
```ini
|
|
312
|
+
effect.name=標準描画
|
|
313
|
+
X=0.00 # X座標
|
|
314
|
+
Y=0.00 # Y座標
|
|
315
|
+
Z=0.00 # Z座標
|
|
316
|
+
Group=1 # グループ番号
|
|
317
|
+
中心X=0.00 # 回転中心X
|
|
318
|
+
中心Y=0.00 # 回転中心Y
|
|
319
|
+
中心Z=0.00 # 回転中心Z
|
|
320
|
+
X軸回転=0.00 # X軸周りの回転(カード回転風)
|
|
321
|
+
Y軸回転=0.00 # Y軸周りの回転(カード回転風)
|
|
322
|
+
Z軸回転=0.00 # Z軸周りの回転(2D平面回転)
|
|
323
|
+
拡大率=100.000 # 拡大率 (%)
|
|
324
|
+
縦横比=0.000 # アスペクト比
|
|
325
|
+
透明度=0.00 # 透明度 (0=不透明, 100=完全透明)
|
|
326
|
+
合成モード=通常 # 合成モード(通常、加算、乗算など)
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**回転軸の違い**:
|
|
330
|
+
- **Z軸回転**: 2D平面上での回転(時計/反時計回り)
|
|
331
|
+
- **X軸回転/Y軸回転**: 3D回転(遊戯王のカードが回転するようなエフェクト)
|
|
332
|
+
|
|
333
|
+
### テキスト (effect.name=テキスト)
|
|
334
|
+
|
|
335
|
+
```ini
|
|
336
|
+
effect.name=テキスト
|
|
337
|
+
サイズ=34.00 # フォントサイズ
|
|
338
|
+
字間=0.00 # 文字間隔
|
|
339
|
+
行間=0.00 # 行間隔
|
|
340
|
+
表示速度=0.00 # 表示速度(0=即座に全表示)
|
|
341
|
+
フォント=Yu Gothic UI # フォント名
|
|
342
|
+
文字色=ffffff # 文字色(16進数文字列)
|
|
343
|
+
影・縁色=000000 # 影/縁の色(16進数文字列)
|
|
344
|
+
文字装飾=標準文字 # 装飾タイプ(標準文字、影付き文字、縁取り文字など)
|
|
345
|
+
文字揃え=左寄せ[上] # 揃え位置
|
|
346
|
+
B=0 # ボールド (0/1)
|
|
347
|
+
I=0 # イタリック (0/1)
|
|
348
|
+
テキスト=内容 # 表示テキスト
|
|
349
|
+
文字毎に個別オブジェクト=0
|
|
350
|
+
自動スクロール=0
|
|
351
|
+
移動座標上に表示=0
|
|
352
|
+
オブジェクトの長さを自動調節=0
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### 図形 (effect.name=図形)
|
|
356
|
+
|
|
357
|
+
```ini
|
|
358
|
+
effect.name=図形
|
|
359
|
+
図形の種類=円 # 円、四角形、三角形、五角形、六角形、星形
|
|
360
|
+
サイズ=100 # サイズ
|
|
361
|
+
縦横比=0.00 # アスペクト比
|
|
362
|
+
ライン幅=4000 # 線の太さ(4000=塗りつぶし)
|
|
363
|
+
色=ff0000 # 色(16進数文字列)
|
|
364
|
+
角を丸くする=0 # 角丸 (0/1)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**図形の種類**:
|
|
368
|
+
- 円
|
|
369
|
+
- 四角形
|
|
370
|
+
- 三角形
|
|
371
|
+
- 五角形
|
|
372
|
+
- 六角形
|
|
373
|
+
- 星形
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## フィルタエフェクト詳細
|
|
378
|
+
|
|
379
|
+
### ドロップシャドウ
|
|
380
|
+
|
|
381
|
+
```ini
|
|
382
|
+
effect.name=ドロップシャドウ
|
|
383
|
+
X=5 # X方向オフセット
|
|
384
|
+
Y=5 # Y方向オフセット
|
|
385
|
+
濃さ=60.0 # 影の濃さ
|
|
386
|
+
拡散=5 # 拡散範囲
|
|
387
|
+
影色=000000 # 影の色(16進数文字列)
|
|
388
|
+
影を別オブジェクトで描画=0
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### 縁取り
|
|
392
|
+
|
|
393
|
+
```ini
|
|
394
|
+
effect.name=縁取り
|
|
395
|
+
サイズ=5 # 縁の太さ
|
|
396
|
+
ぼかし=0 # ぼかし量
|
|
397
|
+
縁色=ffffff # 縁の色(16進数文字列)
|
|
398
|
+
パターン画像= # パターン画像パス(空=単色)
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### グロー
|
|
402
|
+
|
|
403
|
+
```ini
|
|
404
|
+
effect.name=グロー
|
|
405
|
+
強さ=50.00 # グローの強さ
|
|
406
|
+
拡散=60 # 拡散範囲
|
|
407
|
+
角度=25.00 # 光の角度
|
|
408
|
+
しきい値=50.0 # しきい値
|
|
409
|
+
比率=100.0 # 比率
|
|
410
|
+
ぼかし=1 # ぼかしタイプ
|
|
411
|
+
形状=クロス(4本) # 形状(クロス(4本)、クロス(6本)、ライン等)
|
|
412
|
+
光色= # 光の色(空=自動、16進数文字列で指定)
|
|
413
|
+
光成分のみ=0 # 光成分のみ表示
|
|
414
|
+
サイズ固定=0 # サイズ固定
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### ぼかし
|
|
418
|
+
|
|
419
|
+
```ini
|
|
420
|
+
effect.name=ぼかし
|
|
421
|
+
範囲=5.00 # ぼかし範囲
|
|
422
|
+
縦横比=0.00 # 縦横比
|
|
423
|
+
光の強さ=0.0 # 光の強さ
|
|
424
|
+
サイズ固定=0 # サイズ固定
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### 振動
|
|
428
|
+
|
|
429
|
+
```ini
|
|
430
|
+
effect.name=振動
|
|
431
|
+
X=10.0 # X方向振幅
|
|
432
|
+
Y=10.0 # Y方向振幅
|
|
433
|
+
Z=0.0 # Z方向振幅
|
|
434
|
+
周期=1.0 # 振動周期
|
|
435
|
+
ランダム=0.0 # ランダム度
|
|
436
|
+
複雑さ=0.0 # 複雑さ
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## 実装上の注意点
|
|
442
|
+
|
|
443
|
+
### 色値の取り扱い
|
|
444
|
+
色は必ず**16進数文字列**として扱う。パーサーで `"000000"` が `float(0.0)` に変換されないよう注意。
|
|
445
|
+
`models/values.py` の `parse_property_value()` で6桁の16進数文字列を検出し、文字列として保持する。
|
|
446
|
+
|
|
447
|
+
### プロパティ名
|
|
448
|
+
AviUtl2は日本語のプロパティ名を使用する。内部名(type, color, blend等)ではなく、日本語名(図形の種類, 色, 合成モード等)を使用すること。
|
|
449
|
+
|
|
450
|
+
### アニメーションパラメータ
|
|
451
|
+
回転モード等でベジエ曲線を使用する場合、パラメータは `|` で区切られた形式で指定する。
|
|
452
|
+
|
|
453
|
+
## 参考資料
|
|
454
|
+
|
|
455
|
+
- リファレンスファイル: `samples/PresetDemo_fix.aup2`
|
|
456
|
+
- CLI詳細: `docs/CLI_MANUAL.md`
|
|
457
|
+
- フォーマット仕様: `docs/aup2_format_specification.md`
|
|
458
|
+
|
|
459
|
+
## 開発状況
|
|
460
|
+
|
|
461
|
+
### 完了済み
|
|
462
|
+
- [x] .aup2ファイルの読み込み・パース
|
|
463
|
+
- [x] Pythonオブジェクトから.aup2への出力
|
|
464
|
+
- [x] ラウンドトリップテスト
|
|
465
|
+
- [x] Project, Scene, TimelineObject, Effect クラス
|
|
466
|
+
- [x] レイヤー衝突検出
|
|
467
|
+
- [x] フレーム/秒変換ユーティリティ
|
|
468
|
+
- [x] JSON エクスポート/インポート
|
|
469
|
+
- [x] CLIツール実装
|
|
470
|
+
- [x] プリセットシステム(17種類のサンプルプリセット)
|
|
471
|
+
- [x] フレームレンダラー(Vision AI連携用)
|
|
472
|
+
- [x] 画像リサイズ機能(アスペクト比警告、品質警告付き)
|
|
473
|
+
|
|
474
|
+
### CLI コマンド一覧
|
|
475
|
+
|
|
476
|
+
| コマンド | 説明 |
|
|
477
|
+
|---------|------|
|
|
478
|
+
| `new` | 新規プロジェクト作成 |
|
|
479
|
+
| `info` | プロジェクト情報表示 |
|
|
480
|
+
| `timeline` | ASCIIタイムライン表示 |
|
|
481
|
+
| `preview` | フレームをPNGでレンダリング(Vision AI用) |
|
|
482
|
+
| `add text/shape/video/image/audio` | オブジェクト追加 |
|
|
483
|
+
| `move` | オブジェクト移動 |
|
|
484
|
+
| `delete` | オブジェクト削除 |
|
|
485
|
+
| `copy` | オブジェクト複製 |
|
|
486
|
+
| `modify` | プロパティ変更 |
|
|
487
|
+
| `animate` | アニメーション設定 |
|
|
488
|
+
| `filter add` | フィルタ追加 |
|
|
489
|
+
| `preset list/show/apply/save/delete/init` | プリセット管理 |
|
|
490
|
+
| `export-json` / `import-json` | JSON変換 |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 S.Watanabe
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|