# Edição de vídeo

> Corte, junte, repita, legende, sobreponha e monte vídeos num assistente de IA com as ferramentas de edição do Nodaro, várias delas grátis e sem IA.

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

As **ferramentas de edição de vídeo** transformam clipes gerados num vídeo pronto: cortam, juntam, repetem em loop e legendam os clipes, colocam imagens sobre eles, adicionam ou substituem o som e montam vídeos narrados. A maioria renderiza com o FFmpeg, e não com um modelo de IA, então elas são rápidas, dão sempre o mesmo resultado e custam poucos créditos ou nenhum. Todas as ferramentas precisam da permissão `workflows:execute` e retornam um ID de job.

| Ferramenta | O que faz | Créditos |
| --- | --- | --- |
| [`trim_video`](#trim_video) | Corta um clipe por tempo, por quadros ou no ponto de loop mais limpo | Pela duração, em blocos de 5 segundos |
| [`combine_videos`](#combine_videos) | Junta clipes, com transições ou um corte inteligente sem emenda | Pela duração, em blocos de 5 segundos |
| [`loop_video`](#loop_video) | Repete um clipe um certo número de vezes ou até uma duração | Pela duração, em blocos de 5 segundos |
| [`extract_frame`](#extract_frame) | Extrai um quadro como imagem | 11 |
| [`merge_video_audio`](#merge_video_audio) | Adiciona ou substitui o som de um vídeo | 22 |
| [`add_captions`](#add_captions) | Grava no vídeo legendas comuns ou legendas palavra por palavra | 33, ou 55 para legendas animadas ou com estilo |
| [`overlay_images`](#overlay_images) | Mostra imagens sobre um vídeo em momentos definidos | 22 |
| [`still_to_video`](#still_to_video) | Transforma uma imagem e uma faixa de áudio num vídeo | Grátis |
| [`slideshow`](#slideshow) | Transforma de 2 a 100 imagens e um áudio opcional numa apresentação de slides | Grátis |
| [`gif_to_video`](#gif_to_video) | Converte um GIF animado em MP4 | Grátis |
| [`assemble_narrated_video`](#assemble_narrated_video) | Encaixa blocos de voz sobre os clipes deles num único vídeo narrado | 44: 3 unidades, mais uma unidade a cada 6 blocos ou fração de 6 |

## `trim_video`
Corta um clipe. Escolha um de três modos: por tempo, por quadros ou no ponto de loop mais limpo. Funciona como o nó [**Cortar vídeo** (Trim Video)](https://nodaro.ai/docs/nodes/video/trim-video).

**Permissão:** `workflows:execute`. **Créditos:** pela duração do clipe gerado, em blocos de 5 segundos, como no nó [Cortar vídeo](https://nodaro.ai/docs/nodes/video/trim-video#credits).

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `video_url` ou `video_asset_id` | string | O clipe de origem. |
| `start_time`, `end_time` | number | Por tempo: o trecho a manter, em segundos. `end_time` precisa vir depois de `start_time`. |
| `trim_start_frames`, `trim_end_frames` | integer | Por quadros: quantos quadros remover do início ou do fim. Eles têm prioridade sobre os tempos. São úteis quando os quadros exatos importam, como em clipes do VEO 3.1 a 24 fps. |
| `smart_loop_cut` | boolean | Encontra, entre os últimos quadros, o que mais se parece com o quadro 0 e corta ali, para um loop limpo. Tem prioridade sobre os outros modos. |
| `smart_loop_cut_lookback` | integer | Quantos quadros finais comparar, de 2 a 64. Padrão: `16`. |
| `silent` | boolean | Remove o som. Padrão: `false`. |

**Retorna:** um ID de job. Um corte de loop inteligente informa o quadro escolhido em `output_data.smartLoopCut`.

## `combine_videos`
Junta dois ou mais clipes num único vídeo, com uma transição ou um corte inteligente sem emenda. Funciona como o nó [**Combinar vídeos** (Combine Videos)](https://nodaro.ai/docs/nodes/video/combine-videos).

**Permissão:** `workflows:execute`. **Créditos:** pela duração estimada da saída, em blocos de 5 segundos, como no nó [Combinar vídeos](https://nodaro.ai/docs/nodes/video/combine-videos#credits).

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `videos` | array | **Obrigatório.** Pelo menos 2 clipes, cada um `{ url }` ou `{ asset_id }`, na ordem de reprodução. |
| `transition` | string | A transição entre os clipes, como `cut`, `fade`, `dissolve`, `dip-to-black`, `wipe-left`, `slide-up`, `circle-open`, `pixelize` ou `zoom-in`. A ferramenta lista cerca de 50. |
| `transition_duration` | number | De 0 a 5 segundos. |
| `audio_mode` | string | `keep`, `crossfade` ou `remove`. |
| `audio_crossfade_duration` | number | Um fade cruzado só do som, de 0 a 5 segundos. A imagem não muda. Por padrão, acompanha `transition_duration`. |
| `audio_crossfade_curve` | string | Com `crossfade`: `linear`, `equal-power`, `smooth`, `logarithmic` ou `exponential`. |
| `smart_cut` | boolean | Compara os últimos quadros de cada clipe com os primeiros quadros do seguinte e corta onde eles combinam. A junção fica sem emenda em clipes gerados a partir do último quadro do clipe anterior. Só no Nodaro Cloud. |
| `smart_cut_mode` | string | `best-pair` (padrão), `preroll-keep-prev` ou `preroll-keep-next`, que decidem qual lado de uma sobreposição é mantido. |
| `smart_cut_frames_prev`, `smart_cut_frames_next` | integer | A janela de busca no fim e no início de cada clipe, de 1 a 24 quadros. Padrão: `8`. |

**Retorna:** um ID de job.

## `loop_video`
Repete um clipe um certo número de vezes, ou até ele atingir uma duração. Funciona como o nó [**Vídeo em loop** (Loop Video)](https://nodaro.ai/docs/nodes/video/loop-video).

**Permissão:** `workflows:execute`. **Créditos:** pela duração da saída, em blocos de 5 segundos, como no nó [Vídeo em loop](https://nodaro.ai/docs/nodes/video/loop-video#credits).

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `mode` | string | **Obrigatório.** `repeat` para um número de cópias, ou `duration` para repetir até uma duração e cortar ali. |
| `video_url` ou `video_asset_id` | string | O clipe de origem. |
| `repeat_count` | integer | Para `repeat`: de 2 a 20 cópias. |
| `target_duration` | number | Para `duration`: a duração, de 1 a 300 segundos. |
| `smart_cut_before_repeat` | boolean | Corta o clipe no ponto de loop mais limpo antes de repeti-lo, para que nenhuma emenda apareça em nenhuma repetição. Recomendado para clipes do VEO 3.1 feitos a partir de um primeiro e de um último quadro. |
| `smart_cut_lookback` | integer | Quantos quadros finais comparar, de 2 a 64. Padrão: `16`. |

**Retorna:** um ID de job.

## `extract_frame`
Extrai um quadro de um vídeo como imagem: o primeiro, o último ou o de um momento que você escolher. Use o último quadro de um clipe como primeiro quadro do seguinte para encadear tomadas. Funciona como o nó [**Extrair quadro** (Extract Frame)](https://nodaro.ai/docs/nodes/image/extract-frame).

**Permissão:** `workflows:execute`. **Créditos:** 11.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `video_url` ou `video_asset_id` | string | O vídeo de origem. |
| `mode` | string | `first`, `last` ou `timestamp`. |
| `time_seconds` | number | O momento do quadro. Informá-lo implica `timestamp`. |

**Retorna:** um ID de job. O resultado é uma imagem.

## `merge_video_audio`
Adiciona som a um vídeo ou substitui o som dele: uma narração, uma trilha sonora ou uma dublagem. Funciona como o nó [**Mesclar vídeo e áudio** (Merge Video & Audio)](https://nodaro.ai/docs/nodes/video/merge-video-audio).

**Permissão:** `workflows:execute`. **Créditos:** 22.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `video_url` ou `video_asset_id` | string | O vídeo. |
| `audio_url` ou `audio_asset_id` | string | Uma faixa de áudio. |
| `audio_tracks` | array | Várias faixas, no lugar de uma, cada uma `{ url, start_time, volume }`: quando ela começa no vídeo, em segundos, e o volume dela, de 0 a 200, em que 100 é o original. |
| `voiceover_volume` | number | O volume do novo áudio, de 0 a 200. Padrão: `100`. |
| `keep_original_audio` | boolean | Mantém o som do próprio vídeo por baixo do novo áudio. Padrão: `true`. |
| `background_volume` | number | O volume do som do próprio vídeo, de 0 a 200. Padrão: `30`. |

**Retorna:** um ID de job.

## `add_captions`
Grava legendas num vídeo: um bloco de legenda estático ou legendas animadas, sincronizadas palavra por palavra. Funciona como o nó [**Adicionar legendas** (Add Captions)](https://nodaro.ai/docs/nodes/video/add-captions), cuja página documenta todos os estilos e opções.

**Permissão:** `workflows:execute`. **Créditos:** 33 para uma legenda simples; 55 para um estilo animado ou para uma legenda com opções de estilo.

| Estilo | O que mostra |
| --- | --- |
| `subtitle` (padrão) | Um bloco estático. Com `text`, esse texto é gravado como está durante todo o vídeo e nunca é substituído por uma transcrição. Sem `text`, a fala é legendada. |
| `word-highlight`, `karaoke`, `bouncy` | Uma linha por vez, sincronizada palavra por palavra, com a palavra falada em destaque |
| `tiktok-words` | Páginas curtas de palavras. Uma página nunca atravessa o fim de uma frase ou uma pausa, e dura no máximo 1,5 segundo. |
| `word-pop` | Uma palavra por vez. Cada palavra fica na tela até a próxima começar, por no máximo 1,5 segundo. |

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `video_url` ou `video_asset_id` | string | O vídeo. |
| `style` | string | Um dos estilos acima. Padrão: `subtitle`. |
| `text` | string | Em `subtitle`, o texto exato a gravar. Num estilo animado, é só um texto de reserva, usado quando a transcrição não retorna nada ou está desativada. |
| `captions` | array | As suas próprias palavras com tempo, um `{ text, startMs, endMs }` por palavra, em milissegundos. É o formato que `transcribe` retorna. |
| `auto_transcribe` | boolean | Transcreve a fala do vídeo para marcar o tempo das palavras. |
| `transcribe_provider` | string | `incredibly-fast-whisper` (padrão), `elevenlabs-stt` ou `whisper`. Os estilos animados precisam do tempo de cada palavra, então `whisper` é recusado quando a transcrição é a única fonte desses tempos. |
| `look` | string | `outline` (Montserrat 900, maiúsculas, contorno preto, palavra falada em amarelo) ou `clean`. Sem valor definido, é `outline` nos estilos animados e `clean` em `subtitle`. |
| `font_family`, `font_size`, `font_weight`, `color`, `uppercase` | | A tipografia. `Rubik`, `Heebo`, `Cairo` e `Tajawal` cobrem hebraico e árabe. |
| `stroke_color`, `stroke_width`, `background_color` | | O contorno e a caixa de fundo. |
| `position`, `position_y` | | `bottom`, `top` ou `center`, ou o centro do bloco em porcentagem da altura. Cerca de `65` fica abaixo de um rosto e acima dos botões de um app. |
| `max_words_per_line` | integer | De 1 a 20 palavras por linha, ou por página de `tiktok-words`. `1` ou `2` dão o visual impactante das redes sociais. Sem valor definido, a linha se ajusta à largura. Não tem efeito em `word-pop`. |
| `highlight_color`, `animate` | | Só nos estilos animados: a cor da palavra falada, e `false` para parar o movimento das palavras. |
| `segments` | array | Tratamentos diferentes para trechos de tempo do mesmo vídeo, cada um com `start_ms`, `end_ms`, as próprias opções e, opcionalmente, o próprio texto. Os trechos não podem se sobrepor. |

As opções de estilo também funcionam em `subtitle`, mas uma legenda com estilo é cobrada pelo preço animado. Para usar a sua própria transcrição corrigida, mapeie as palavras de [`transcribe`](https://nodaro.ai/docs/mcp/tools/audio#transcribe) em `captions`, uma entrada por palavra.

**Retorna:** um ID de job.

## `overlay_images`
Mostra de 1 a 20 imagens sobre um vídeo, cada uma durante um intervalo de tempo: um logo, uma foto de produto, uma captura de tela ou um cartão. Nenhum modelo de IA é executado, e o som do vídeo é mantido como está. Funciona como o nó [**Sobreposição em vídeo** (Video Overlay)](https://nodaro.ai/docs/nodes/video/video-overlay).

**Permissão:** `workflows:execute`. **Créditos:** 22 no Nodaro Cloud.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `video_url` ou `video_asset_id` | string | O vídeo base, por exemplo um resultado de `combine_videos`. |
| `layers` | array | **Obrigatório.** De 1 a 20 camadas. |
| `output_aspect` | string | Renderiza num canvas `16:9`, `9:16`, `1:1` ou `4:5` em vez do tamanho do próprio vídeo, com `base_fit` (`cover`, o padrão, ou `contain`) e uma `background_color`. |

Cada camada recebe uma imagem, `url` ou `asset_id`, que pode ser um resultado de [`image_overlay`](https://nodaro.ai/docs/mcp/tools/image#image_overlay), e estes campos:

| Campo da camada | Observações |
| --- | --- |
| `start`, `end` | **`start` é obrigatório.** O intervalo de tempo, em segundos. Sem `end`, a camada fica até o fim do vídeo. |
| `preset` | `card` (centralizado, encaixado em 78% por 60% do quadro), `corner-badge` (18% de largura, perto do `corner`, no canto inferior direito por padrão) ou `full-frame`. |
| `anchor`, `x`, `y`, `width`, `height`, `fit` | Uma caixa exata, nas mesmas unidades de porcentagem de `image_overlay`. Um campo de caixa tem prioridade sobre a predefinição. Sem nenhum dos dois, a camada é um selo de canto. |
| `opacity`, `animate`, `z_index` | A opacidade, um fade curto com escala na entrada e na saída (ativado por padrão) e a ordem de empilhamento. |

As camadas que passam do fim do vídeo são cortadas ou ignoradas, e uma imagem animada mostra o primeiro quadro dela; a saída do job lista os dois casos como `warnings`. Um ID de camada que não é encontrado é recusado antes de qualquer execução, com a posição dele na lista. Passe o ID de job do resultado para `add_captions` como `video_asset_id` para legendá-lo em seguida.

**Retorna:** um ID de job.

## `still_to_video`
Transforma uma imagem e uma faixa de áudio num vídeo, renderizado localmente, sem um modelo de IA. O vídeo dura exatamente o mesmo que o áudio. Use-o para slides narrados, um vídeo com a capa de uma música ou um momento parado dentro de uma edição mais longa. Para movimento com IA, use [`animate_image`](https://nodaro.ai/docs/mcp/tools/video#animate_image). Funciona como o nó [**Imagem fixa para vídeo** (Still to Video)](https://nodaro.ai/docs/nodes/video/still-to-video).

**Permissão:** `workflows:execute`. **Créditos:** grátis.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `image_url` ou `image_asset_id` | string | A imagem. |
| `audio_url` ou `audio_asset_id` | string | O áudio, que define a duração. |
| `motion` | string | `none` (padrão), `zoom-in`, `zoom-out`, `pan-left`, `pan-right` ou `ken-burns`. |
| `intensity` | integer | A força do movimento, de 1 a 10. Padrão: `3`. |
| `resolution` | string | `720p`, `1080p` (padrão) ou `4K`. Em 4K, com movimento, a renderização é mais lenta. |
| `aspect_ratio` | string | `16:9` (padrão), `9:16`, `1:1` ou `4:3`. |
| `fps` | integer | `24` ou `30` (padrão). |
| `fit`, `pad_color` | string | `cover` (padrão, corta para preencher) ou `contain` (adiciona barras na cor `pad_color`, preta por padrão). |

**Retorna:** um ID de job.

## `slideshow`
Transforma de 2 a 100 imagens e uma faixa de áudio opcional num vídeo de apresentação de slides, renderizado localmente, sem um modelo de IA. Funciona como o nó [**Apresentação de slides** (Slideshow)](https://nodaro.ai/docs/nodes/video/slideshow).

**Permissão:** `workflows:execute`. **Créditos:** grátis.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `image_urls` ou `image_asset_ids` | array | De 2 a 100 imagens, em ordem. |
| `audio_url` ou `audio_asset_id` | string | Opcional. Com áudio, o vídeo dura exatamente o mesmo que o áudio, e os slides dividem esse tempo igualmente. |
| `image_durations` | array | Os segundos de cada slide, ou `null` para automático. Com áudio, os totais que não coincidem são ajustados proporcionalmente para caber, e a saída do job informa em quanto. |
| `per_image_duration` | number | Sem áudio: os segundos por slide, de 0,5 a 60. Padrão: `3`. |
| `transition`, `transition_duration` | | Uma transição como `cut`, `fade`, `dissolve`, `dip-to-black` ou `wipe-left`, e a duração dela, de até 5 segundos. Uma transição desconhecida volta para `cut`. |
| `motion`, `intensity` | | `none`, `zoom-in`, `zoom-out`, `ken-burns` ou `alternate`, que alterna o zoom a cada slide, com uma força de 1 a 10. |
| `resolution`, `aspect_ratio`, `fps`, `fit`, `pad_color` | | Como em `still_to_video`. |

Para uma única imagem, use `still_to_video`. Para movimento com IA entre imagens, use `animate_image`.

**Retorna:** um ID de job.

## `gif_to_video`
Converte um GIF animado num MP4 H.264, renderizado localmente, sem um modelo de IA. Use-o para passar um GIF como referência de movimento para um modelo de vídeo que não aceita GIFs, como o Seedance. Funciona como o nó [**GIF para vídeo** (Gif to Video)](https://nodaro.ai/docs/nodes/video/gif-to-video).

**Permissão:** `workflows:execute`. **Créditos:** grátis.

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `gif_url` ou `gif_asset_id` | string | O GIF. |
| `loop_to_minimum` | boolean | Repete um GIF curto até `target_duration`. Padrão: `true`. Um GIF que não faz um loop limpo é reproduzido para a frente e depois para trás, para que nenhum salto apareça. |
| `target_duration` | number | A duração do loop, de 2 a 8 segundos. Padrão: `3`. |
| `interpolate` | boolean | Adiciona quadros para um movimento suave a 24 fps. Padrão: `true`. `false` mantém o tempo original do GIF. |
| `alpha_background` | string | O fundo de um GIF transparente: `white` (padrão) ou `black`. |

**Retorna:** um ID de job. Um GIF de um só quadro vira um clipe curto e parado.

## `assemble_narrated_video`
Encaixa blocos ordenados, cada um com um clipe e uma voz, num único vídeo narrado. Quando uma voz é mais curta que o clipe dela, ela fica centralizada, com silêncio em volta. Quando é mais longa, o clipe fica mais lento para caber, até um limite, e depois congela no último quadro. A voz nunca é cortada. Funciona como o nó [**Montar vídeo narrado** (Assemble Narrated Video)](https://nodaro.ai/docs/nodes/video/assemble-narrated-video).

**Permissão:** `workflows:execute`. **Créditos:** 44, pelo número de blocos: 3 unidades, mais uma unidade a cada 6 blocos ou fração de 6, como no nó [Montar vídeo narrado](https://nodaro.ai/docs/nodes/video/assemble-narrated-video#credits).

| Parâmetro | Tipo | Observações |
| --- | --- | --- |
| `blocks` | array | **Obrigatório.** De 1 a 60 blocos na ordem de reprodução, cada um com um vídeo (`video_url` ou `video_asset_id`) e uma voz opcional (`audio_url` ou `audio_asset_id`). Os clipes não podem ter diálogo. |
| `voice_volume` | number | O volume da voz, em porcentagem, de 0 a 200. Padrão: `100`. |
| `clip_audio_volume` | number | O som dos próprios clipes por baixo da voz, de 0 a 200. Padrão: `40`. |
| `max_slowdown` | number | Quanto um clipe pode ficar mais lento para uma voz longa, de 1 a 2. Padrão: `1.5`. |
| `trim_start_frames`, `trim_end_frames` | integer | Quadros cortados do início de cada bloco depois do primeiro e do fim de cada bloco antes do último, para junções sem emenda. Até 120. Padrão: `0`. |

**Retorna:** um ID de job. A receita `video-explainer` termina com esta ferramenta; veja [Receitas de conteúdo](https://nodaro.ai/docs/mcp/recipes).

## Frequently asked questions

### Quais ferramentas de edição de vídeo do Nodaro são grátis?

still_to_video, gif_to_video e slideshow não custam créditos, porque renderizam localmente, sem um modelo de IA. As outras ferramentas de edição custam poucos créditos. Corte, junção e loop são cobrados pela duração da saída, assemble_narrated_video pelo número de blocos, e as demais têm preço fixo, como 22 para adicionar ou substituir o som.

### Como adiciono legendas no estilo TikTok a um vídeo?

Chame add_captions com um estilo cinético, como word-highlight ou tiktok-words. Deixe auto_transcribe ativado, e o Nodaro transcreve a fala e marca o tempo de cada palavra. Sem um look definido, as palavras aparecem em negrito e em maiúsculas, com a palavra falada em amarelo.

### Como coloco um logo num vídeo?

Chame overlay_images com o vídeo e uma camada que contenha o logo. Sem um posicionamento, a camada vira um selo no canto inferior direito. Defina start e end para mostrá-la só durante parte do vídeo.

### Como junto clipes sem um salto visível?

Use combine_videos com smart_cut definido como true. A ferramenta compara os últimos quadros de cada clipe com os primeiros quadros do seguinte e corta onde eles combinam melhor, o que funciona bem para clipes gerados, cada um, a partir do último quadro do anterior.
