# 動画編集

> Nodaro の編集ツールで、AI アシスタントから動画のトリミング、結合、ループ、字幕付け、オーバーレイ、合成ができます。一部のツールは AI を使わずに動作し、クレジットがかかりません。

Source: https://nodaro.ai/ja/docs/mcp/tools/video-editing

**動画編集ツール**は、生成したクリップを完成した動画に仕上げます。クリップのトリミング、結合、ループ、字幕付け、画像の重ね合わせ、サウンドの追加や差し替え、ナレーション付き動画の合成ができます。ほとんどのツールは、AI モデルではなく FFmpeg でレンダリングします。そのため、処理が速く、毎回同じ結果になり、クレジットはわずかしかかからないか、まったくかかりません。どのツールにも `workflows:execute` 権限が必要で、ジョブ ID を返します。

| ツール | 機能 | クレジット |
| --- | --- | --- |
| [`trim_video`](#trim_video) | 時間、フレーム、または最もきれいにループする位置でクリップをカットする | 長さに応じて、5 秒単位 |
| [`combine_videos`](#combine_videos) | トランジションまたはシームレスなスマートカットでクリップをつなぐ | 長さに応じて、5 秒単位 |
| [`loop_video`](#loop_video) | クリップを指定した回数、または指定した長さまで繰り返す | 長さに応じて、5 秒単位 |
| [`extract_frame`](#extract_frame) | 1 フレームを画像として取り出す | 10 |
| [`merge_video_audio`](#merge_video_audio) | 動画にサウンドを追加する、または動画のサウンドを差し替える | 20 |
| [`add_captions`](#add_captions) | 字幕や、単語ごとに表示される字幕を動画に焼き込む | 30。アニメーション字幕やスタイルを設定した字幕は 50 |
| [`overlay_images`](#overlay_images) | 指定した時間に、動画の上に画像を表示する | 20 |
| [`still_to_video`](#still_to_video) | 1 枚の画像と 1 本のオーディオトラックから動画を作る | 無料 |
| [`slideshow`](#slideshow) | 2〜100 枚の画像と、任意のオーディオからスライドショーを作る | 無料 |
| [`gif_to_video`](#gif_to_video) | アニメーション GIF を MP4 に変換する | 無料 |
| [`assemble_narrated_video`](#assemble_narrated_video) | 音声のブロックをそれぞれのクリップに合わせ、1 本のナレーション付き動画にまとめる | 基本料金に、6 ブロックごとに 1 段階を加算 |

## `trim_video`
クリップをカットします。時間、フレーム、最もきれいにループする位置の 3 つのモードから 1 つを選びます。[**動画のトリミング**](https://nodaro.ai/docs/nodes/video/trim-video)（Trim Video）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：出力するクリップの長さによって、5 秒単位で決まります。[動画のトリミング](https://nodaro.ai/docs/nodes/video/trim-video#credits)ノードと同じです。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `video_url` or `video_asset_id` | string | 元のクリップです。 |
| `start_time`, `end_time` | number | 時間で指定する場合に残す範囲で、単位は秒です。`end_time` は `start_time` より後にする必要があります。 |
| `trim_start_frames`, `trim_end_frames` | integer | フレームで指定する場合に、先頭または末尾から削るフレーム数です。時間の指定より優先されます。VEO 3.1 の 24 fps のクリップのように、正確なフレームが重要な場合に便利です。 |
| `smart_loop_cut` | boolean | 末尾のフレームのうち、フレーム 0 に最もよく一致するものを見つけてそこでカットし、きれいにループさせます。ほかのモードより優先されます。 |
| `smart_loop_cut_lookback` | integer | 比較する末尾のフレーム数で、2〜64 です。デフォルトは `16` です。 |
| `silent` | boolean | サウンドを削除します。デフォルトは `false` です。 |

**戻り値**：ジョブ ID です。スマートループカットでは、選ばれたフレームが `output_data.smartLoopCut` に記録されます。

## `combine_videos`
2 本以上のクリップを、トランジションまたはシームレスなスマートカットで 1 本の動画につなぎます。[**動画を結合**](https://nodaro.ai/docs/nodes/video/combine-videos)（Combine Videos）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：出力の長さの見積もりによって、5 秒単位で決まります。[動画を結合](https://nodaro.ai/docs/nodes/video/combine-videos#credits)ノードと同じです。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `videos` | array | **必須**。2 本以上のクリップを、再生順に指定します。各クリップは `{ url }` または `{ asset_id }` です。 |
| `transition` | string | クリップ間のトランジションです。たとえば `cut`、`fade`、`dissolve`、`dip-to-black`、`wipe-left`、`slide-up`、`circle-open`、`pixelize`、`zoom-in` です。ツールの定義には約 50 種類が記載されています。 |
| `transition_duration` | number | 0〜5 秒です。 |
| `audio_mode` | string | `keep`、`crossfade`、`remove` のいずれかです。 |
| `audio_crossfade_duration` | number | サウンドだけのクロスフェードで、0〜5 秒です。映像は変わりません。デフォルトでは `transition_duration` に従います。 |
| `audio_crossfade_curve` | string | `crossfade` の場合のカーブです。`linear`、`equal-power`、`smooth`、`logarithmic`、`exponential` のいずれかです。 |
| `smart_cut` | boolean | 各クリップの最後の数フレームを次のクリップの最初の数フレームと比較し、一致する位置でカットします。前のクリップの最終フレームから生成したクリップなら、つなぎ目が見えません。Nodaro Cloud のみです。 |
| `smart_cut_mode` | string | `best-pair`（デフォルト）、`preroll-keep-prev`、`preroll-keep-next` のいずれかです。重なった部分のどちら側を残すかを決めます。 |
| `smart_cut_frames_prev`, `smart_cut_frames_next` | integer | 各クリップの末尾と先頭の探索範囲で、1〜24 フレームです。デフォルトは `8` です。 |

**戻り値**：ジョブ ID です。

## `loop_video`
クリップを指定した回数、または指定した長さになるまで繰り返します。[**動画をループ**](https://nodaro.ai/docs/nodes/video/loop-video)（Loop Video）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：出力の長さによって、5 秒単位で決まります。[動画をループ](https://nodaro.ai/docs/nodes/video/loop-video#credits)ノードと同じです。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `mode` | string | **必須**。指定した数のコピーを並べるなら `repeat`、指定した長さまでループしてそこでトリミングするなら `duration` です。 |
| `video_url` or `video_asset_id` | string | 元のクリップです。 |
| `repeat_count` | integer | `repeat` の場合のコピー数で、2〜20 です。 |
| `target_duration` | number | `duration` の場合の長さで、1〜300 秒です。 |
| `smart_cut_before_repeat` | boolean | 繰り返す前に、クリップを最もきれいにループする位置までトリミングします。そのため、どの繰り返しでもつなぎ目が見えません。最初と最後のフレームから作った VEO 3.1 のクリップにおすすめです。 |
| `smart_cut_lookback` | integer | 比較する末尾のフレーム数で、2〜64 です。デフォルトは `16` です。 |

**戻り値**：ジョブ ID です。

## `extract_frame`
動画の 1 フレームを画像として取り出します。最初のフレーム、最後のフレーム、または指定した時間のフレームです。クリップの最後のフレームを次のクリップの最初のフレームとして使うと、ショットを連続させられます。[**フレームを抽出**](https://nodaro.ai/docs/nodes/image/extract-frame)（Extract Frame）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：10。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `video_url` or `video_asset_id` | string | 元の動画です。 |
| `mode` | string | `first`、`last`、`timestamp` のいずれかです。 |
| `time_seconds` | number | 取り出すフレームの時間です。指定すると、`timestamp` モードとみなされます。 |

**戻り値**：ジョブ ID です。結果は画像です。

## `merge_video_audio`
ナレーション、サウンドトラック、吹き替えなどのサウンドを動画に追加するか、動画のサウンドを差し替えます。[**動画とオーディオを結合**](https://nodaro.ai/docs/nodes/video/merge-video-audio)（Merge Video & Audio）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：20。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `video_url` or `video_asset_id` | string | 動画です。 |
| `audio_url` or `audio_asset_id` | string | 1 本のオーディオトラックです。 |
| `audio_tracks` | array | 1 本の代わりに、複数のトラックを指定します。各トラックは `{ url, start_time, volume }` で、動画の中で始まる時間（秒）と、0〜200 の音量を指定します。100 が元の音量です。 |
| `voiceover_volume` | number | 新しいオーディオの音量で、0〜200 です。デフォルトは `100` です。 |
| `keep_original_audio` | boolean | 新しいオーディオの下に、動画の元のサウンドを残します。デフォルトは `true` です。 |
| `background_volume` | number | 動画の元のサウンドの音量で、0〜200 です。デフォルトは `30` です。 |

**戻り値**：ジョブ ID です。

## `add_captions`
動画に字幕を焼き込みます。静的な字幕ブロック 1 つか、単語ごとにタイミングを合わせたアニメーション字幕です。[**字幕を追加**](https://nodaro.ai/docs/nodes/video/add-captions)（Add Captions）ノードと同じように動作します。すべてのスタイルとオプションは、そのノードのページで説明しています。

**権限**：`workflows:execute`。**クレジット**：プレーンな字幕は 30 です。アニメーションスタイル、またはスタイル設定のオプションを付けた字幕は 50 です。

| スタイル | 表示内容 |
| --- | --- |
| `subtitle`（デフォルト） | 静的なブロックです。`text` を指定すると、そのテキストが動画全体にそのまま焼き込まれ、文字起こしで置き換えられることはありません。`text` を指定しない場合は、音声が字幕になります。 |
| `word-highlight`, `karaoke`, `bouncy` | 1 行ずつ表示します。単語ごとにタイミングが合い、発話中の単語が強調されます。 |
| `tiktok-words` | 数語ずつの短いページで表示します。1 ページが文の終わりや間をまたぐことはなく、表示時間は最長 1.5 秒です。 |
| `word-pop` | 1 単語ずつ表示します。各単語は次の単語が始まるまで表示され、表示時間は最長 1.5 秒です。 |

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `video_url` or `video_asset_id` | string | 動画です。 |
| `style` | string | 上のスタイルのいずれかです。デフォルトは `subtitle` です。 |
| `text` | string | `subtitle` では、焼き込むテキストそのものです。アニメーションスタイルでは、文字起こしの結果が空の場合や、文字起こしがオフの場合に代わりに使われるだけです。 |
| `captions` | array | 自分でタイミングを付けた単語です。1 単語につき 1 つの `{ text, startMs, endMs }` を、ミリ秒で指定します。`transcribe` が返す形式と同じです。 |
| `auto_transcribe` | boolean | 動画の音声を文字起こしして、単語のタイミングを合わせます。 |
| `transcribe_provider` | string | `incredibly-fast-whisper`（デフォルト）、`elevenlabs-stt`、`whisper` のいずれかです。アニメーションスタイルには単語ごとのタイミングが必要です。そのため、文字起こしがタイミングの唯一の取得元である場合、`whisper` は拒否されます。 |
| `look` | string | `outline`（Montserrat 900、大文字、黒い縁取り、発話中の単語は黄色）または `clean` です。指定しない場合、アニメーションスタイルでは `outline`、`subtitle` では `clean` になります。 |
| `font_family`, `font_size`, `font_weight`, `color`, `uppercase` | | 文字の書式です。`Rubik`、`Heebo`、`Cairo`、`Tajawal` は、ヘブライ語とアラビア語に対応しています。 |
| `stroke_color`, `stroke_width`, `background_color` | | 縁取りと、背景のボックスです。 |
| `position`, `position_y` | | `bottom`、`top`、`center` のいずれか、または高さに対するパーセントで表したブロックの中心位置です。`65` 前後にすると、顔の下、アプリのボタンの上に収まります。 |
| `max_words_per_line` | integer | 1 行あたり、または `tiktok-words` の 1 ページあたりの単語数で、1〜20 です。`1` か `2` にすると、SNS 向けのインパクトのある見た目になります。指定しない場合は、幅に合わせます。`word-pop` には影響しません。 |
| `highlight_color`, `animate` | | アニメーションスタイル専用です。`highlight_color` は発話中の単語の色です。`animate` を `false` にすると、単語の動きが止まります。 |
| `segments` | array | 同じ動画の時間範囲ごとに、異なる設定を適用します。各範囲には、`start_ms`、`end_ms`、独自のオプション、必要に応じて独自のテキストを指定します。範囲が重なってはいけません。 |

スタイル設定のオプションは `subtitle` でも使えますが、スタイルを設定した字幕は、アニメーションスタイルの料金で請求されます。自分で修正した文字起こしを使うには、[`transcribe`](https://nodaro.ai/docs/mcp/tools/audio#transcribe) の単語を、1 単語につき 1 エントリーで `captions` に割り当てます。

**戻り値**：ジョブ ID です。

## `overlay_images`
ロゴ、商品写真、スクリーンショット、カードなど、1〜20 枚の画像を、それぞれ指定した時間範囲だけ動画の上に表示します。AI モデルは使わず、動画のサウンドもそのまま残ります。[**動画オーバーレイ**](https://nodaro.ai/docs/nodes/video/video-overlay)（Video Overlay）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：Nodaro Cloud では 20。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `video_url` or `video_asset_id` | string | ベースになる動画です。たとえば `combine_videos` の結果です。 |
| `layers` | array | **必須**。1〜20 個のレイヤーです。 |
| `output_aspect` | string | 動画本来のサイズではなく、`16:9`、`9:16`、`1:1`、`4:5` のキャンバスにレンダリングします。`base_fit`（デフォルトの `cover`、または `contain`）と `background_color` を合わせて指定します。 |

各レイヤーは、画像を `url` または `asset_id` で受け取ります。画像には、[`image_overlay`](https://nodaro.ai/docs/mcp/tools/image#image_overlay) の結果も使えます。レイヤーのフィールドは次のとおりです。

| レイヤーのフィールド | 説明 |
| --- | --- |
| `start`, `end` | **`start` は必須です**。秒で表した時間範囲です。`end` を指定しない場合、レイヤーは動画の最後まで表示されます。 |
| `preset` | `card`（中央に配置し、フレームの 78% × 60% に収める）、`corner-badge`（幅 18% で `corner` の近くに配置する。デフォルトは右下）、`full-frame` のいずれかです。 |
| `anchor`, `x`, `y`, `width`, `height`, `fit` | `image_overlay` と同じパーセント単位で指定する、正確なボックスです。ボックスのフィールドは、プリセットより優先されます。どちらも指定しない場合、レイヤーはコーナーバッジになります。 |
| `opacity`, `animate`, `z_index` | 不透明度、短いフェードとスケールによる表示と消去のアニメーション（デフォルトはオン）、重なり順です。 |

動画の終わりを越えるレイヤーはカットされるかスキップされ、アニメーション画像は最初のフレームだけが表示されます。どちらの場合も、ジョブの出力の `warnings` に記載されます。見つからないレイヤー ID は、何かが実行される前に、リスト内の位置とともに拒否されます。続けて字幕を付けるには、結果のジョブ ID を `video_asset_id` として `add_captions` に渡します。

**戻り値**：ジョブ ID です。

## `still_to_video`
1 枚の画像と 1 本のオーディオトラックから動画を作ります。AI モデルを使わずに、ローカルでレンダリングします。動画の長さは、オーディオの長さとぴったり同じです。ナレーション付きのスライド、曲のカバーアート動画、長い編集の中の静止した場面などに使います。AI による動きが必要な場合は、[`animate_image`](https://nodaro.ai/docs/mcp/tools/video#animate_image) を使ってください。[**静止画から動画**](https://nodaro.ai/docs/nodes/video/still-to-video)（Still to Video）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：無料。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `image_url` or `image_asset_id` | string | 画像です。 |
| `audio_url` or `audio_asset_id` | string | オーディオです。動画の長さは、このオーディオで決まります。 |
| `motion` | string | `none`（デフォルト）、`zoom-in`、`zoom-out`、`pan-left`、`pan-right`、`ken-burns` のいずれかです。 |
| `intensity` | integer | 動きの強さで、1〜10 です。デフォルトは `3` です。 |
| `resolution` | string | `720p`、`1080p`（デフォルト）、`4K` のいずれかです。動きを付けた 4K は、処理に時間がかかります。 |
| `aspect_ratio` | string | `16:9`（デフォルト）、`9:16`、`1:1`、`4:3` のいずれかです。 |
| `fps` | integer | `24` または `30`（デフォルト）です。 |
| `fit`, `pad_color` | string | `cover`（デフォルト。切り抜いて画面を埋める）または `contain`（`pad_color` の色で余白の帯を付ける。デフォルトは黒）です。 |

**戻り値**：ジョブ ID です。

## `slideshow`
2〜100 枚の画像と、任意の 1 本のオーディオトラックから、スライドショー動画を作ります。AI モデルを使わずに、ローカルでレンダリングします。[**スライドショー**](https://nodaro.ai/docs/nodes/video/slideshow)（Slideshow）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：無料。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `image_urls` or `image_asset_ids` | array | 2〜100 枚の画像を、表示順に指定します。 |
| `audio_url` or `audio_asset_id` | string | 任意です。オーディオがある場合、動画の長さはオーディオとぴったり同じになり、各スライドはその長さを均等に分け合います。 |
| `image_durations` | array | 各スライドの秒数です。自動にする場合は `null` です。オーディオがある場合、合計が一致しなければ長さに合わせて伸縮され、その倍率がジョブの出力に記載されます。 |
| `per_image_duration` | number | オーディオがない場合の、1 スライドあたりの秒数で、0.5〜60 です。デフォルトは `3` です。 |
| `transition`, `transition_duration` | | `cut`、`fade`、`dissolve`、`dip-to-black`、`wipe-left` などのトランジションと、その長さ（最大 5 秒）です。不明なトランジションは `cut` になります。 |
| `motion`, `intensity` | | `none`、`zoom-in`、`zoom-out`、`ken-burns`、`alternate`（スライドごとにズームを切り替える）のいずれかと、1〜10 の強さです。 |
| `resolution`, `aspect_ratio`, `fps`, `fit`, `pad_color` | | `still_to_video` と同じです。 |

画像が 1 枚の場合は、`still_to_video` を使います。画像と画像の間を AI で動かすには、`animate_image` を使います。

**戻り値**：ジョブ ID です。

## `gif_to_video`
アニメーション GIF を H.264 の MP4 に変換します。AI モデルを使わずに、ローカルでレンダリングします。Seedance のように GIF を受け付けない動画モデルに、GIF をモーションのリファレンスとして渡すときに使います。[**GIF から動画**](https://nodaro.ai/docs/nodes/video/gif-to-video)（Gif to Video）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：無料。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `gif_url` or `gif_asset_id` | string | GIF です。 |
| `loop_to_minimum` | boolean | 短い GIF を `target_duration` までループします。デフォルトは `true` です。きれいにループしない GIF は、代わりに順再生と逆再生を繰り返すため、映像が飛びません。 |
| `target_duration` | number | ループの長さで、2〜8 秒です。デフォルトは `3` です。 |
| `interpolate` | boolean | フレームを補間して、24 fps のなめらかな動きにします。デフォルトは `true` です。`false` にすると、GIF の元のタイミングが保たれます。 |
| `alpha_background` | string | 透過 GIF の背景です。`white`（デフォルト）または `black` です。 |

**戻り値**：ジョブ ID です。1 フレームだけの GIF は、短い静止画のクリップになります。

## `assemble_narrated_video`
クリップと音声を組にした、順番付きのブロックを、1 本のナレーション付き動画にまとめます。音声がクリップより短い場合、音声は中央に配置され、前後は無音になります。音声のほうが長い場合、クリップは上限まで再生速度を落として長さを合わせ、それでも足りなければ最後のフレームで静止します。音声がカットされることはありません。[**ナレーション付き動画を合成**](https://nodaro.ai/docs/nodes/video/assemble-narrated-video)（Assemble Narrated Video）ノードと同じように動作します。

**権限**：`workflows:execute`。**クレジット**：基本料金に、6 ブロックごとに 1 段階を加えた料金です。[ナレーション付き動画を合成](https://nodaro.ai/docs/nodes/video/assemble-narrated-video#credits)ノードと同じです。

| パラメーター | 型 | 説明 |
| --- | --- | --- |
| `blocks` | array | **必須**。再生順に並べた 1〜60 個のブロックです。各ブロックには、動画（`video_url` または `video_asset_id`）と、任意で音声（`audio_url` または `audio_asset_id`）を指定します。クリップにセリフが含まれていてはいけません。 |
| `voice_volume` | number | 音声の音量（パーセント）で、0〜200 です。デフォルトは `100` です。 |
| `clip_audio_volume` | number | 音声の下で流れる、クリップ自体のサウンドの音量で、0〜200 です。デフォルトは `40` です。 |
| `max_slowdown` | number | 長い音声に合わせて、クリップをどこまで遅くできるかを表す値で、1〜2 です。デフォルトは `1.5` です。 |
| `trim_start_frames`, `trim_end_frames` | integer | つなぎ目をシームレスにするために、2 番目以降のすべてのブロックの先頭と、最後より前のすべてのブロックの末尾から削るフレーム数です。最大 120 で、デフォルトは `0` です。 |

**戻り値**：ジョブ ID です。`video-explainer` レシピは、最後にこのツールを使います。[コンテンツレシピ](https://nodaro.ai/docs/mcp/recipes)を参照してください。

## Frequently asked questions

### Nodaro の動画編集ツールのうち、無料のものはどれですか？

still_to_video、gif_to_video、slideshow は、AI モデルを使わずにローカルでレンダリングするため、クレジットがかかりません。そのほかの編集ツールには、わずかなクレジットがかかります。トリミング、結合、ループの料金は出力の長さで、assemble_narrated_video の料金はブロックの数で決まります。それ以外のツールは固定料金で、たとえばサウンドの追加や差し替えは 20 クレジットです。

### TikTok 風の字幕を動画に付けるにはどうすればよいですか？

word-highlight や tiktok-words などのアニメーションスタイルを指定して、add_captions を呼び出します。auto_transcribe をオンのままにすると、Nodaro が音声を文字起こしし、各単語のタイミングを合わせます。look を指定しない場合、単語は太字の大文字で表示され、発話中の単語は黄色になります。

### 動画にロゴを入れるにはどうすればよいですか？

動画と、ロゴを入れたレイヤーを指定して overlay_images を呼び出します。配置を指定しない場合、レイヤーは右下のコーナーバッジになります。動画の一部だけに表示するには、start と end を設定します。

### 映像が飛ばないようにクリップをつなぐにはどうすればよいですか？

combine_videos で smart_cut を true に設定します。各クリップの最後の数フレームを次のクリップの最初の数フレームと比較し、最もよく一致する位置でカットします。それぞれ前のクリップの最終フレームから生成したクリップに向いています。
