# 동영상 편집

> Nodaro 편집 도구로 AI 어시스턴트에서 동영상을 자르고, 잇고, 반복하고, 자막과 오버레이를 넣고, 조립하세요. 여러 도구는 AI 없이 실행되어 크레딧이 들지 않습니다.

Source: https://nodaro.ai/ko/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초 단위 |
| [`split_media`](#split_media) | 동영상이나 오디오 파일을 최소 길이와 최대 길이 사이의 구간으로 자릅니다 | 구간 수와 관계없이 22크레딧 |
| [`extract_frame`](#extract_frame) | 프레임 하나를 이미지로 가져옵니다 | 11크레딧 |
| [`merge_video_audio`](#merge_video_audio) | 동영상의 소리를 추가하거나 교체합니다 | 22크레딧 |
| [`add_captions`](#add_captions) | 동영상에 자막이나 단어별 자막을 입힙니다 | 33크레딧, 애니메이션 자막이나 스타일을 적용한 자막은 55크레딧 |
| [`overlay_images`](#overlay_images) | 정한 시간에 동영상 위에 이미지를 표시합니다 | 22크레딧 |
| [`mask_composite`](#mask_composite) | 마스크 동영상을 통해 한 동영상을 다른 동영상 위에 배치합니다 | 시작된 5초마다 11크레딧 |
| [`still_to_video`](#still_to_video) | 이미지 하나와 오디오 트랙 하나로 동영상을 만듭니다 | 무료 |
| [`slideshow`](#slideshow) | 이미지 2~100장과 선택 사항인 오디오로 슬라이드쇼를 만듭니다 | 무료 |
| [`gif_to_video`](#gif_to_video) | 애니메이션 GIF를 MP4로 변환합니다 | 무료 |
| [`assemble_narrated_video`](#assemble_narrated_video) | 보이스 블록을 각 클립에 맞춰 내레이션 동영상 하나로 만듭니다 | 44~143크레딧: 3단위에, 블록 6개 또는 그 일부마다 1단위가 추가됩니다 |

## `trim_video`
클립을 자릅니다. 시간 기준, 프레임 기준, 가장 깔끔한 루프 지점의 세 가지 모드 중 하나를 고르세요. [동영상 자르기](https://nodaro.ai/docs/nodes/video/trim-video) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** [동영상 자르기](https://nodaro.ai/docs/nodes/video/trim-video#credits) 노드와 마찬가지로, 출력 클립의 길이에 따라 5초 단위로 정해집니다.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `video_asset_id` | string | 원본 클립입니다. |
| `start_time`, `end_time` | number | 시간 기준: 남길 구간으로, 초 단위입니다. `end_time`은 `start_time`보다 뒤여야 합니다. |
| `trim_start_frames`, `trim_end_frames` | integer | 프레임 기준: 앞이나 뒤에서 버릴 프레임 수입니다. 시간보다 우선합니다. 24fps인 VEO 3.1 클립처럼 정확한 프레임이 중요할 때 유용합니다. |
| `smart_loop_cut` | boolean | 프레임 0과 가장 잘 맞는 마지막 프레임을 찾아 그곳에서 잘라 깔끔한 루프를 만듭니다. 다른 모드보다 우선합니다. |
| `smart_loop_cut_lookback` | integer | 비교할 끝 프레임 수로, 2~64입니다. 기본값은 `16`입니다. |
| `silent` | boolean | 소리를 제거합니다. 기본값은 `false`입니다. |

**반환값:** 작업 ID입니다. 스마트 루프 컷은 선택한 프레임을 `output_data.smartLoopCut`에 보고합니다.

## `combine_videos`
클립 두 개 이상을 전환이나 매끄러운 스마트 컷으로 이어 동영상 하나로 만듭니다. [동영상 합치기](https://nodaro.ai/docs/nodes/video/combine-videos) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** [동영상 합치기](https://nodaro.ai/docs/nodes/video/combine-videos#credits) 노드와 마찬가지로, 예상 출력 길이에 따라 5초 단위로 정해집니다.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `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`입니다. |
| `trim_start_frames`, `trim_end_frames` | integer | 이음매마다 잘라 내는 프레임입니다. 첫 클립 다음의 모든 클립 시작에서(기본값 `1`), 마지막 클립 앞의 모든 클립 끝에서(기본값 `2`) 잘라 냅니다. 0~120입니다. 프레임 단위로 정확하게 자르려면 지정하세요. 스마트 컷이 대체로 쓰는 값이기도 합니다. |

**반환값:** 작업 ID입니다.

## `loop_video`
클립을 정한 횟수만큼, 또는 정한 길이에 이를 때까지 반복합니다. [동영상 루프](https://nodaro.ai/docs/nodes/video/loop-video) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** [동영상 루프](https://nodaro.ai/docs/nodes/video/loop-video#credits) 노드와 마찬가지로, 출력 길이에 따라 5초 단위로 정해집니다.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `mode` | string | **필수.** 반복 횟수를 정하는 `repeat`, 또는 정한 길이까지 반복한 뒤 그곳에서 자르는 `duration`입니다. |
| `video_url` 또는 `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입니다.

## `split_media`
동영상, 오디오 파일 또는 둘 다를 연속된 구간으로 자릅니다. 모든 구간은 최소 길이와 최대 길이 사이입니다. [구간 분할](https://nodaro.ai/docs/nodes/video/split-into-chunks) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 구간 수와 관계없이 실행마다 22크레딧.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `video_asset_id` | string | 나눌 동영상입니다. |
| `audio_url` 또는 `audio_asset_id` | string | 나눌 오디오 파일입니다. 동영상과 오디오 파일이 모두 있으면 각각 따로 나눕니다. |
| `chunk_duration` | number | **필수.** 구간의 최대 길이(초)입니다. 최소 1입니다. |
| `min_part_duration` | number | 구간의 최소 길이(초)입니다. 기본값은 `4`이며, `chunk_duration`보다 커지지 않습니다. |
| `audio_format` | string | `mp3`(기본값), `wav` 또는 `aac`입니다. AAC 구간은 `.m4a` 파일로 저장됩니다. |

동영상은 온전한 프레임 단위로 잘리며, 각 구간의 사운드는 영상보다 길어지지 않습니다. 파일은 최대 3시간이며 구간은 최대 200개까지 만듭니다.

**반환값:** 작업 ID입니다. 구간은 `get_job`이나 `wait_for_job`으로 얻는 작업의 `outputData`에 있습니다. `videoUrls`, `audioUrls`, `chunkCount`, `partDurationsSec`입니다. 구간 URL을 다른 도구의 `video_url`이나 `audio_url`로 전달하세요.

## `extract_frame`
동영상의 프레임 하나를 이미지로 가져옵니다. 첫 프레임, 마지막 프레임, 또는 정한 시간의 프레임입니다. 클립의 마지막 프레임을 다음 클립의 첫 프레임으로 쓰면 샷을 이어 갈 수 있습니다. [프레임 추출](https://nodaro.ai/docs/nodes/image/extract-frame) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 11크레딧.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `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) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 22크레딧.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `video_asset_id` | string | 동영상입니다. |
| `audio_url` 또는 `audio_asset_id` | string | 오디오 트랙 하나입니다. |
| `audio_tracks` | array | 대신 쓰는 여러 트랙으로, 각각 `{ 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`
동영상에 자막을 입힙니다. 고정된 자막 블록 하나, 또는 단어별로 타이밍을 맞춘 애니메이션 자막입니다. [자막 추가](https://nodaro.ai/docs/nodes/video/add-captions) 노드와 같은 방식으로 작동하며, 그 노드 페이지에 모든 스타일과 옵션이 설명되어 있습니다.

**권한:** `workflows:execute`. **크레딧:** 일반 자막은 33크레딧이고, 애니메이션 스타일이나 스타일 옵션을 적용한 자막은 55크레딧입니다.

| 스타일 | 표시되는 내용 |
| --- | --- |
| `subtitle`(기본값) | 고정된 블록입니다. `text`가 있으면 그 텍스트를 동영상 전체에 그대로 입히며, 전사 결과로 바꾸지 않습니다. `text`가 없으면 음성에 자막을 붙입니다. |
| `word-highlight`, `karaoke`, `bouncy` | 한 번에 한 줄씩, 단어별로 타이밍을 맞추고 말하는 단어를 강조합니다 |
| `tiktok-words` | 단어 몇 개로 된 짧은 페이지입니다. 페이지는 문장 끝이나 쉼을 넘지 않으며, 최대 1.5초 동안 표시됩니다. |
| `word-pop` | 한 번에 한 단어씩 표시합니다. 각 단어는 다음 단어가 시작될 때까지, 최대 1.5초 동안 표시됩니다. |

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `video_asset_id` | string | 동영상입니다. |
| `style` | string | 위 스타일 중 하나입니다. 기본값은 `subtitle`입니다. |
| `text` | string | `subtitle`에서는 입힐 정확한 텍스트입니다. 애니메이션 스타일에서는 전사 결과가 없거나 전사가 꺼져 있을 때만 쓰는 대체 텍스트입니다. |
| `captions` | array | 직접 타이밍을 맞춘 단어로, 단어마다 `{ 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 | 한 줄, 또는 `tiktok-words`의 한 페이지에 들어갈 단어 수로, 1~20입니다. `1`이나 `2`면 강렬한 소셜 미디어 느낌이 납니다. 지정하지 않으면 너비에 맞춥니다. `word-pop`에는 효과가 없습니다. |
| `highlight_color`, `animate` | | 애니메이션 스타일 전용입니다. 말하는 단어의 색상, 그리고 단어 움직임을 멈추는 `false`입니다. |
| `segments` | array | 같은 동영상의 시간 구간마다 다르게 적용할 설정으로, 각각 `start_ms`, `end_ms`, 자체 옵션, 선택 사항인 자체 텍스트를 가집니다. 구간은 겹치면 안 됩니다. |

스타일 옵션은 `subtitle`에서도 쓸 수 있지만, 스타일을 적용한 자막은 애니메이션 가격으로 청구됩니다. 직접 수정한 전사본을 쓰려면 [`transcribe`](https://nodaro.ai/docs/mcp/tools/audio#transcribe)의 단어를 단어마다 항목 하나씩 `captions`에 넣으세요.

**반환값:** 작업 ID입니다.

## `overlay_images`
동영상 위에 이미지 1~20장을 각각 정한 시간 구간 동안 표시합니다. 로고, 제품 사진, 스크린샷, 카드 등입니다. AI 모델은 실행되지 않으며, 동영상의 소리는 그대로 유지됩니다. [동영상 오버레이](https://nodaro.ai/docs/nodes/video/video-overlay) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** Nodaro Cloud에서 22크레딧.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `video_url` 또는 `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입니다.

## `mask_composite`
마스크 동영상(전경은 흰색)을 통해 전경 동영상을 배경 동영상 위에 배치합니다. AI 없이 FFmpeg로 실행됩니다. [마스크 합성](https://nodaro.ai/docs/nodes/video/mask-composite) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 결과의 시작된 5초마다 11크레딧. 전경은 최대 300초까지 가능합니다.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `foreground_url` 또는 `foreground_asset_id` | string | 피사체 영상입니다. 결과는 이 영상의 크기, 프레임 레이트, 길이를 따릅니다. |
| `background_url` 또는 `background_asset_id` | string | 새 장면입니다. 전경보다 짧으면 반복됩니다. |
| `mask_url` 또는 `mask_asset_id` | string | 전경이 흰색인 마스크 동영상으로, 예를 들어 [`video_mask`](https://nodaro.ai/docs/mcp/tools/video#video_mask) 작업의 결과입니다. 마스크가 더 짧으면 마지막 프레임을 유지합니다. |
| `invert_mask` | boolean | 마스크의 어느 쪽이 전경을 보여 줄지 뒤바꿉니다. |
| `feather` | integer | 가장자리를 0~20픽셀 범위에서 부드럽게 합니다. 기본값은 `2`입니다. |
| `grow` | integer | 전경을 -10~10픽셀 범위에서 키우거나 줄입니다. 음수 값은 헤일로를 잘라냅니다. 기본값은 `0`입니다. |
| `background_fit` | string | `cover`(기본값), `contain` 또는 `stretch`입니다. |
| `audio_source` | string | `foreground`(기본값), `background`, `mix` 또는 `none`입니다. |

**반환값:** 작업 ID입니다.

## `still_to_video`
이미지 하나와 오디오 트랙 하나로 동영상을 만들며, AI 모델 없이 로컬에서 렌더링합니다. 동영상은 오디오와 정확히 같은 길이입니다. 내레이션 슬라이드, 노래의 커버 아트 동영상, 긴 편집본 속 정지된 순간에 사용하세요. AI 모션이 필요하면 [`animate_image`](https://nodaro.ai/docs/mcp/tools/video#animate_image)를 사용하세요. [정지 이미지로 동영상 만들기](https://nodaro.ai/docs/nodes/video/still-to-video) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 무료.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `image_url` 또는 `image_asset_id` | string | 이미지입니다. |
| `audio_url` 또는 `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장과 선택 사항인 오디오 트랙 하나로 슬라이드쇼 동영상을 만들며, AI 모델 없이 로컬에서 렌더링합니다. [슬라이드쇼](https://nodaro.ai/docs/nodes/video/slideshow) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 무료.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `image_urls` 또는 `image_asset_ids` | array | 순서대로 놓은 이미지 2~100장입니다. |
| `audio_url` 또는 `audio_asset_id` | string | 선택 사항입니다. 오디오가 있으면 동영상은 오디오와 정확히 같은 길이가 되고, 슬라이드가 그 시간을 똑같이 나눕니다. |
| `image_durations` | array | 슬라이드마다의 초 단위 길이, 또는 자동으로 정하는 `null`입니다. 오디오가 있을 때 합계가 맞지 않으면 길이에 맞게 비율이 조정되고, 작업 출력에 조정 비율이 표시됩니다. |
| `per_image_duration` | number | 오디오가 없을 때: 슬라이드당 초 수로, 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`와 같습니다. |

이미지가 하나면 `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) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** 무료.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `gif_url` 또는 `gif_asset_id` | string | GIF입니다. |
| `loop_to_minimum` | boolean | 짧은 GIF를 `target_duration`까지 반복합니다. 기본값은 `true`입니다. 깔끔하게 반복되지 않는 GIF는 대신 앞으로 재생한 뒤 거꾸로 재생해 끊김이 보이지 않게 합니다. |
| `target_duration` | number | 루프 길이로, 2~8초입니다. 기본값은 `3`입니다. |
| `interpolate` | boolean | 프레임을 추가해 24fps의 부드러운 움직임을 만듭니다. 기본값은 `true`입니다. `false`면 GIF 원래의 타이밍을 유지합니다. |
| `alpha_background` | string | 투명한 GIF의 배경으로, `white`(기본값) 또는 `black`입니다. |

**반환값:** 작업 ID입니다. 프레임이 하나인 GIF는 짧은 정지 클립이 됩니다.

## `assemble_narrated_video`
클립과 보이스로 된 블록을 순서대로 맞춰 내레이션 동영상 하나로 만듭니다. 보이스가 클립보다 짧으면 앞뒤에 무음을 두고 가운데에 배치합니다. 보이스가 더 길면 한도까지 클립을 느리게 재생해 맞춘 다음, 마지막 프레임에서 멈춥니다. 보이스는 절대 잘리지 않습니다. [내레이션 동영상 만들기](https://nodaro.ai/docs/nodes/video/assemble-narrated-video) 노드와 같은 방식으로 작동합니다.

**권한:** `workflows:execute`. **크레딧:** [내레이션 동영상 만들기](https://nodaro.ai/docs/nodes/video/assemble-narrated-video#credits) 노드와 마찬가지로 블록 수에 따라 44~143크레딧입니다. 3단위에, 블록 6개 또는 그 일부마다 1단위가 추가됩니다.

| 매개변수 | 타입 | 설명 |
| --- | --- | --- |
| `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 | 매끄럽게 잇기 위해, 첫 블록을 뺀 모든 블록의 시작과 마지막 블록을 뺀 모든 블록의 끝에서 잘라 낼 프레임 수입니다. 최대 120입니다. 기본값은 `0`입니다. |

**반환값:** 작업 ID입니다. `video-explainer` 레시피는 이 도구로 마무리됩니다. [콘텐츠 레시피](https://nodaro.ai/docs/mcp/recipes)를 참고하세요.

## 자주 묻는 질문

### 무료인 Nodaro 동영상 편집 도구는 무엇인가요?

still_to_video, gif_to_video, slideshow는 AI 모델 없이 로컬에서 렌더링하므로 크레딧이 들지 않습니다. 다른 편집 도구는 크레딧이 조금 듭니다. 자르기, 합치기, 루프는 출력 길이에 따라, assemble_narrated_video는 블록 수에 따라 가격이 정해지며, 나머지는 소리를 추가하거나 교체하는 데 드는 22크레딧처럼 가격이 고정되어 있습니다.

### 동영상에 TikTok 스타일 자막을 넣으려면 어떻게 하나요?

word-highlight나 tiktok-words 같은 키네틱 스타일로 add_captions를 호출하세요. auto_transcribe를 켜 두면 Nodaro가 음성을 전사하고 단어마다 타이밍을 맞춥니다. look을 지정하지 않으면 굵은 대문자 단어로 렌더링하고, 말하는 단어를 노란색으로 표시합니다.

### 동영상에 로고를 넣으려면 어떻게 하나요?

동영상과, 로고를 담은 레이어 하나로 overlay_images를 호출하세요. 배치를 지정하지 않으면 레이어가 오른쪽 아래의 코너 배지가 됩니다. 동영상의 일부 구간에만 보이게 하려면 start와 end를 설정하세요.

### 눈에 띄는 끊김 없이 클립을 이으려면 어떻게 하나요?

smart_cut을 true로 설정해 combine_videos를 사용하세요. 각 클립의 마지막 프레임들을 다음 클립의 첫 프레임들과 비교해 가장 잘 맞는 지점에서 자르므로, 서로의 마지막 프레임으로 생성한 클립에 잘 맞습니다.
