エージェントが最後まで作りきれる形にしてあります
動画づくりを自動化するときに困るのは、たいてい «画面を操作しないと進まない» ことと «出来たものが正しいか機械では分からない» ことです。Movo はその 2 つを外しました。
入力は JSON だけ
レイヤー・キーフレーム・エフェクト・物理・文字組みまで、すべて JSON のフィールドです。 言語モデルがそのまま書ける形式で動画を組み立てられます。
同じ JSON からは同じ動画
乱数はシードで固定され、区間に割って並列に描いても出力は変わりません。 差分をレビューでき、CI に載せて回帰を見張れます。
描く前に検品できる
movo validate がスキーマと意味(重複 ID・未宣言の素材・式の構文)を検査します。
結果は --json で受け取れます。
全部シェルから
22 のコマンドはどれも引数だけで動きます。終了コードは失敗の種類ごとに分かれているので、 次の手をスクリプト側で決められます。
生成した JSON を、機械で検品する
movo validate は、どこがどう違うかを構造化して返します。
素材名の打ち間違いも、レイヤー ID の重複も、式の構文エラーも、
1 フレームも描かないうちに分かります。
エージェントはこの出力を読んで JSON を直し、通ってから render に進めます。
終了コードは失敗の種類ごとに違う値です。3 なら JSON を直す、
4 なら素材を用意する、8 なら ffmpeg を入れる、と分岐できます。
$ movo validate mv.json --json
{
"file": "/work/mv.json",
"valid": false,
"issues": [
{
"path": "scenes[0].layers[0].asset",
"message": "asset \"susukii\" is not declared in assets"
}
],
"warnings": []
}
$ echo $?
3
| 終了コード | 意味 |
|---|---|
0 | 成功 |
2 | 使い方の誤り |
3 | JSON が不正 |
4 | 素材が見つからない |
5 | 式が不正 |
8 | ffmpeg が無い |
9 | メモリ不足 |
全 9 種はマニュアルの終了コードにあります。
作風を指定して作らせる
«いい感じに» はエージェントに伝わりません。Movo は作風を 名前と 数値の 2 通りで指定できます。
名前で指定する — スキル
スキルは «入力値だけで絵になる» ひとまとまりです。1 レイヤーぶんの動きから
1 本ぶんの構成まで 4 段階あり、合計 57 種が同梱されています。
一覧は --json で取れるので、エージェントが選べます。
| 種類 | 中身 | 同梱数 |
|---|---|---|
| 基礎アニメーション | 1 レイヤーぶんの動き | 28 |
| スキル | レイヤー群(文字と飾り、天候など) | 15 |
| シーン | 1 カットぶん | 11 |
| ムービー | 1 本ぶんの構成 | 3 |
$ movo skill list --json
$ movo skill show lyric-line
$ movo skill render cutin-title --set text=サビ -o cut.mp4
数値で指定する — プロファイル
出来上がった映像をカット尺・動きの量・実質の色数・彩度・コントラスト・細かさなど 8 つの指標で測ります。目標のプロファイルと突き合わせると、 外れた項目の直し方まで出ます。同梱の目標値は 10 種です。
$ movo profile mv.mp4 --json
$ movo compare mv.mp4 --target profiles/kinetic-type.json
! 1 項目が目標から外れています
v カット尺 1.62秒(目標 0.400〜2.50秒)
v 毎分のカット数 30.15本(目標 24〜150本)
x コントラスト 0.144(目標 0.200〜0.500)
明暗の差が足りません。……
自作の目標値は <プロジェクト>/profiles/*.json に置けば名前で呼べます。
曲を渡せば、1 本ぶんの JSON になる
BPM・1 拍目・区間を解析し、カット尺を 小節で決めます。
曲を差し替えればカット割りが追従します。時刻の無い歌詞には
lyrics align が下書きの時刻を付けるので、
エージェントは --anchor で 2〜3 点だけ留めて調整できます。
make-mv は 1 本ぶんを一気に作ります。
途中の JSON が欲しいときは movo skill expand で素の Movo JSON に展開できます。
# BPM・拍・区間を調べる
$ movo analyze song.mp3 --json
# 時刻の無い歌詞に時刻を付ける
$ movo lyrics align song.mp3 \
--text lyrics.txt --anchor 1=5.4 -o song.lrc
# 1 本ぶんを作る
$ movo make-mv song.mp3 --lyrics song.lrc \
--style hype-lyric-mv --jobs auto -o mv.mp4
サンプル
すべて Movo が出力したものです。写真の素材は CC0 とパブリックドメインのものだけを使っています。 同梱スキル 15 個ぶんの作例とコマンドは マニュアルの «スキル 15 個の作例» にあります。
タイトルカード
movo skill render title-card
歌詞のカラオケ塗り
movo render photo.json
集中線カットイン
movo skill render cutin-title
音声ビジュアライザ
movo skill render audio-bars
この JSON から、2 つめの GIF が出ます
レイヤーを並べ、その上にスキルを 1 つ載せただけのプロジェクトです。
movo render photo.json -f gif -o photo.gif で書き出しています。
{
"movoVersion": "1.0",
"project": { "name": "movo-photo", "seed": 3 },
"video": { "width": 640, "height": 360, "fps": 24, "duration": 3.5, "background": "#0b0b10" },
"assets": { "susuki": "assets/susuki.png" },
"scenes": [
{
"id": "cut", "start": 0, "duration": 3.5,
"layers": [
{ "id": "photo", "type": "image", "asset": "susuki",
"transform": { "x": 320, "y": 180, "width": 640, "height": 360, "anchorX": 0.5, "anchorY": 0.5 } },
{ "id": "scrim", "type": "shape",
"shape": { "type": "rectangle", "width": 640, "height": 360, "fill": "rgba(6,8,20,0.45)" },
"transform": { "x": 320, "y": 180, "anchorX": 0.5, "anchorY": 0.5 } }
],
"use": [
{ "skill": "lyric-line", "with": { "text": "すすきの原を風がわたる", "size": 150, "duration": 3.5 } }
]
}
]
}
ダウンロード
展開して movo を実行すれば動きます。Python の用意は要りません。
最新版は v0.1.0 です。
| OS | ファイル | 大きさ | 取得 |
|---|---|---|---|
| Windows (x64) | movo-0.1.0-windows-x64.zip |
69.5 MB | ダウンロード |
| Linux (x64) | movo-0.1.0-linux-x64.tar.gz |
100.1 MB | ダウンロード |
| macOS (Apple Silicon) | movo-0.1.0-macos-arm64.tar.gz |
59.1 MB | ダウンロード |
ソースから入れる
Python 3.11 以上があれば pip install -e . で入ります。
Intel Mac やその他の環境ではこちらをどうぞ。
mp4 で書き出す
movo setup-ffmpeg が ffmpeg を ~/.movo/bin に用意します。
GIF と連番画像はそのまま書き出せます。
配布物を照合する
SHA256SUMS.txt で手元のファイルを確認できます。手順はインストール方法に。