Docs do Nodaro
DocumentaçãoReferência de nósModelosAgentes de IA (MCP)DesenvolvedoresSelf-hostingPesquisa
CLI

Comandos de mídia e voz

Troque vozes, embuta legendas, crie slides e sobreposições, processe áudio e planeje edições com os comandos voice, media, audio e edit da CLI do Nodaro.

Os comandos de mídia e voz da CLI do Nodaro trabalham diretamente com áudio, vídeo e imagens. O grupo voice troca a voz de faixas e cria vozes, media importa, corta, legenda e compõe mídias, audio processa e transcreve sons, e edit planeja e aplica edições para podcasts e vídeos longos. Cada comando usa o mesmo mecanismo que o nó correspondente no editor.

Todo comando que inicia um job aceita --watch para aguardar o resultado, --poll-interval <ms> para definir o intervalo da consulta periódica, e --json. Veja Saída e códigos de saída.

Voz

nodaro voice list [--clones] [--json]
nodaro voice changer --voice <id> --audio <url>|--video <url> [--model <id>] [--stability <0..1>] [--similarity <0..1>] [--style <0..1>] [--use-speaker-boost] [--seed <n>] [--remove-background-noise] [--watch] [--poll-interval <ms>] [--json]
nodaro voice recast --audio <url>|--video <url> --voices <v1,v2,...>|--voices-json <json> [--model <id>] [--output video|stems] [--analysis-json <json>|--analysis-file <path>] [--no-preserve-background] [--separation-quality fast|best] [--music-volume-mode match|normalize|manual] [--music-volume <0-200>] [--remove-background-noise] [--voice-fx <preset>] [--voice-fx-mix <0-100>] [--voice-fx-delay <20-2000>] [--voice-fx-decay <0-1>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice analyze --audio <url>|--video <url> [--separation-quality fast|best] [--suggest-title] [--watch] [--poll-interval <ms>] [--json]
nodaro voice export --source <videoUrl> --tracks-json <json>|--tracks-file <path> [--voice-fx <preset>] [--voice-fx-mix <0-100>] [--voice-fx-delay <20-2000>] [--voice-fx-decay <0-1>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice design --text <line> --description <desc> [--model <id>] [--loudness <-1..1>] [--guidance-scale <0-100>] [--seed <n>] [--quality <n>] [--enhance] [--user-prompt <text>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice remix --text <text> --description <desc> [--user-prompt <text>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice dub --audio <url> --target-language <code> [--source-language <code>] [--num-speakers <1-20>] [--disable-voice-cloning] [--drop-background-audio] [--watch] [--poll-interval <ms>] [--json]
nodaro voice clones list [--json]
nodaro voice clones delete <id> [--json]
ComandoO que faz
voice listLista as vozes prontas, ou os seus clones com --clones. Use os nomes ou os ids delas com --voice e --voices.
voice changerTroca a voz de uma faixa de áudio ou de um vídeo com fala por uma única voz, como o nó Modificador de voz (Voice Changer). voice change é o mesmo comando.
voice recastTroca a voz de todos os falantes de uma gravação de uma vez, como o nó Modificador de voz Pro (Voice Changer Pro). voice pro é o mesmo comando.
voice analyzeDetecta os falantes sem trocar as vozes e imprime a lista com --watch. Só no Nodaro Cloud.
voice exportRenderiza o vídeo final a partir de um conjunto de faixas mixadas. Só no Nodaro Cloud.
voice designCria uma nova voz sintética a partir de uma descrição em texto, como o nó Design de voz (Voice Design).
voice remixFala um texto com uma voz descrita, sem clonagem, como o nó Remix de voz (Voice Remix).
voice dubDubla uma gravação em outro idioma e mantém a voz de cada falante, como o nó Dublagem (Dubbing).
voice clonesLista e exclui os clones de voz criados antes de a clonagem ser descontinuada.

Trocar a voz de vários falantes

voice recast roda no Nodaro Cloud. Uma instalação self-hosted o executa pela conexão com o Nodaro Cloud.

  • --voices associa vozes aos falantes na ordem em que o Nodaro os detecta. A palavra keep mantém a voz original daquele falante, como em --voices Rachel,keep,Aria.
  • --voices-json recebe, em vez disso, o array bruto do SDK: ids de vozes, objetos de configuração por voz, ou null para um falante que mantém a voz original.
  • --output stems retorna uma faixa seca por falante, para uma mixagem interativa, em vez de um vídeo pronto. Renderize a mixagem com voice export.
  • --analysis-file reaproveita um resultado salvo de voice analyze, então os falantes não são detectados de novo.

O fluxo interativo de troca de vozes

O voice recast de uma etapa renderiza um vídeo pronto em uma única chamada. O fluxo de três etapas permite conferir primeiro os falantes e mixar o resultado antes de renderizá-lo:

# 1. Detect the speakers. Save the job's output_data for step 2.
nodaro voice analyze --video https://example.com/panel.mp4 --watch --json > analyze.json
jq .output_data analyze.json > analysis.json

# 2. Recast to dry stems, reusing the analysis (no second detection)
nodaro voice recast --video https://example.com/panel.mp4 --voices Rachel,keep,Aria \
  --analysis-file analysis.json --output stems --watch

# 3. Set the level and mute of each track, then render
nodaro voice export --source https://example.com/panel.mp4 --tracks-file mix.json \
  --voice-fx hall --voice-fx-mix 25 --watch

Na etapa 3, cada faixa em mix.json é um objeto com um url, um gain de 0 a 200, uma flag muted e um kind opcional, tirados dos stems da etapa 2. A exportação copia o fluxo de vídeo sem alterações; ele nunca é codificado de novo.

Mídia

nodaro media download <url> [--max-height <px>] [--section <a-b>] [--watch] [--json]
nodaro media metadata <url> [--json]
nodaro media trim-video --video <url> --start <sec> --end <sec>|--keep-first <sec>|--keep-last <sec> [--watch] [--poll-interval <ms>] [--json]
nodaro media trim-audio --video <url>|--audio <url> [--start <sec>] [--end <sec>] [--format mp3|wav|aac] [--watch] [--poll-interval <ms>] [--json]
nodaro media add-captions <videoUrl> [options, see below]
nodaro media still-to-video --image <url> --audio <url> [--motion none|zoom-in|zoom-out|pan-left|pan-right|ken-burns] [--intensity <1-10>] [--resolution 720p|1080p|4K] [--aspect-ratio <W:H>] [--fps 24|30] [--fit cover|contain] [--pad-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media slideshow --images <url...> [--audio <url>] [--durations "10,auto,auto"] [--per-image <sec>] [--transition <id>] [--transition-duration <sec>] [--motion none|zoom-in|zoom-out|ken-burns|alternate] [--intensity <1-10>] [--resolution 720p|1080p|4K] [--aspect-ratio <W:H>] [--fps 24|30] [--fit cover|contain] [--pad-color <hex>] [--watch] [--json]
nodaro media collage <imageUrls...> [--sizes <0-3,...>] [--numbered] [--label <text>...] [--badge-position top-left|top-right] [--layout smart|grid] [--resolution 2K|4K] [--aspect-ratio <W:H>] [--gap <px>] [--background-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media overlay <imageUrl> [layerUrls...] [--layers-file <path>] [--anchor <anchor>] [--x <%>] [--y <%>] [--width <%>] [--opacity <0-1>] [--platform <id>...] [--qr-text <text>] [--mask-mode none|layers|around|outside] [--mask-spread <px>] [--canvas <WxH>] [--base-fit contain|cover] [--background-color <hex>] [--output-format png|jpg|webp] [--watch] [--poll-interval <ms>] [--json]
nodaro media overlay-placement <imageUrl> [--intent <text>] [--aspect <ratio>] [--safe-area <x,y,w,h>] [--json]
nodaro media video-overlay <videoUrl> [layerUrls...] [--at <start[-end]>...] [--preset card|corner-badge|full-frame] [--corner top-left|top-right|bottom-left|bottom-right] [--layers-file <path>] [--aspect 16:9|9:16|1:1|4:5] [--base-fit cover|contain] [--background-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media save <url> [--filename <name>] [--type image|video|audio] [--watch] [--poll-interval <ms>] [--json]
ComandoO que faz
media downloadImporta para o seu armazenamento um vídeo do YouTube, TikTok, Instagram, X ou Facebook. --section busca um intervalo de tempo, em segundos. --watch transmite o progresso ao vivo, e não há job para consultar periodicamente depois.
media metadataLê a duração, as dimensões e o título de uma URL de mídia sem baixá-la.
media trim-videoCorta um vídeo pelo tempo de início e de fim, ou mantém os primeiros ou os últimos segundos.
media trim-audioCorta o áudio de um vídeo ou de um arquivo de áudio e o salva como MP3, WAV ou AAC.
media add-captionsEmbute legendas em um vídeo. Veja Legendas.
media still-to-videoTransforma uma imagem fixa e um arquivo de áudio em um MP4, e custa 0 créditos. O vídeo tem a duração do áudio, então não há opção de duração. --motion anima a imagem fixa.
media slideshowTransforma de 2 a 100 imagens, com áudio opcional, em uma apresentação de slides em MP4, e custa 0 créditos.
media collageCombina de 2 a 30 imagens em uma única imagem grande.
media overlayColoca até 12 camadas sobre uma imagem base, com precisão de pixel, sem IA.
media overlay-placementPergunta a um modelo de visão onde uma camada deve ficar.
media video-overlayColoca de 1 a 20 camadas de imagem temporizadas sobre um vídeo, sem IA, por 22 créditos.
media saveSalva uma URL de mídia no seu armazenamento, como imagem, vídeo ou arquivo de áudio.

Apresentações de slides

Com áudio, o áudio define a duração da apresentação. As durações que você fixou com --durations são ajustadas na mesma proporção, e a CLI avisa isso. Sem áudio, a apresentação fica sem som e dura o número de imagens multiplicado por --per-image.

Colagens

  • --sizes dá a cada imagem uma indicação de tamanho relativo, na ordem das imagens: 0 automático, 1 grande (cerca de duas vezes mais larga), 2 médio, 3 pequeno (cerca de metade da largura). As indicações de tamanho só funcionam com o layout smart.
  • --numbered carimba um número de sequência, a partir de 1, em um canto de cada imagem, para storyboards.
  • --badge-position define esse canto: top-left, o padrão, ou top-right. A opção também posiciona os rótulos.
  • --label adiciona uma legenda depois do número. Repita a opção uma vez por imagem, na ordem; um "" vazio pula uma imagem.

Sobreposições em imagem

  • As URLs de imagens depois da imagem base são camadas de imagem. Elas compartilham --anchor, --x, --y, --width e --opacity, o que serve bem para uma marca d'água.
  • --layers-file recebe, em vez disso, o array JSON completo de camadas: opções por camada e os tipos texto, QR code e forma.
  • O posicionamento é em porcentagem da imagem base, então um mesmo comando serve para uma prévia em 1K e para uma renderização em 4K.
  • --platform, que pode ser repetido, também renderiza a composição no tamanho daquela plataforma. A renderização base custa 11 créditos, e cada plataforma aumenta o preço. A saída do job lista as renderizações extras como variants.
  • overlay-placement responde nas mesmas unidades de porcentagem: uma âncora, x, y, width e um motivo de uma linha. Ele responde na hora, sem job para consultar periodicamente, e custa uma chamada de imagem para texto.

Sobreposições em vídeo

  • Informe um --at por URL de imagem, na ordem. 3 significa de 3 segundos até o fim, e 1.2-2.6 significa de 1,2 a 2,6 segundos.
  • --preset e --corner valem para todas as camadas de imagem informadas como URL.
  • --layers-file recebe, em vez disso, o array completo de camadas, com caixa, opacidade, animação e ordem de empilhamento por camada.
  • --base-fit e --background-color exigem --aspect.
  • O áudio do vídeo base é mantido intacto.

Veja o nó Sobreposição em vídeo (Video Overlay) para as opções de camada.

Legendas

nodaro media add-captions <videoUrl> [--text <text>] [--captions-file <file.json>] [--style subtitle|word-highlight|karaoke|tiktok-words|word-pop|bouncy] [--look outline|clean] [--position bottom|top|center] [--position-y <pct>] [--font-size <px>] [--font-family <name>] [--font-weight <100-900>] [--color <c>] [--background-color <c>] [--stroke-color <c>] [--stroke-width <px>] [--highlight-color <c>] [--uppercase|--no-uppercase] [--max-words-per-line <1-20>] [--animate|--no-animate] [--no-auto-transcribe] [--transcribe-provider elevenlabs-stt|incredibly-fast-whisper|whisper] [--segments-file <file.json>] [--watch] [--poll-interval <ms>] [--json]

media add-captions tem dois tipos de estilo, como o nó Adicionar legendas (Add Captions):

EstiloO que mostra
subtitleLegendas estáticas, sem animação das palavras.
word-highlight, karaoke, tiktok-words, word-pop, bouncyLegendas cinéticas, animadas palavra por palavra. word-highlight, karaoke e bouncy mostram uma linha fixa de cada vez.

O texto das legendas

  • Em subtitle, --text é embutido como um único bloco estático durante o vídeo inteiro. Ele nunca é substituído por uma transcrição. Omita --text para legendar a fala.
  • Em um estilo cinético, --text é só a alternativa quando a transcrição não retorna nada, ou quando você passa --no-auto-transcribe.
  • --captions-file é um array JSON de entradas com tempo por palavra, [{ text, startMs, endMs }], com uma entrada por palavra nos estilos cinéticos. Os words de um resultado de nodaro audio transcribe servem do jeito que estão; use o arquivo junto com --no-auto-transcribe.
  • --segments-file dá a intervalos de tempo estilo, visual e posição próprios. Os intervalos não podem se sobrepor.

Estilização

  • As opções de estilização também estilizam um subtitle: --look, --font-family, --font-weight, --stroke-color, --stroke-width, --uppercase, --position-y e --max-words-per-line. Um subtitle estilizado é cobrado pelo preço cinético; um subtitle simples continua no preço mais baixo.
  • --highlight-color e --animate só funcionam nos estilos cinéticos. As duas são recusadas em subtitle.
  • --animate vem ativada por padrão. --no-animate para o movimento de cada palavra e mantém o agrupamento e a cor de destaque.
  • Sem --look, os estilos cinéticos são renderizados como outline, e subtitle é renderizado como clean.
  • --max-words-per-line limita o número de palavras em uma linha de legenda, ou em uma página de tiktok-words, de 1 a 20. A largura do quadro, os finais de frase e as pausas de 0,5 segundo ou mais também quebram as linhas. Uma ou duas palavras dão uma leitura rápida e marcante; deixe a opção sem valor para preencher a largura. Em um subtitle com --text, ela só define as quebras de linha, e não tem efeito em word-pop.
  • Uma renderização cinética ou estilizada mantém a taxa de quadros da origem, como um número inteiro de 15 a 60 fps. Uma origem com taxa de quadros variável ou muito longa é renderizada a 30 fps.

Mecanismo de transcrição

--transcribe-provider escolhe o mecanismo que transcreve a fala. Um estilo cinético precisa das marcações de tempo das palavras, do incredibly-fast-whisper, o padrão, ou do elevenlabs-stt. subtitle só precisa das marcações de tempo das frases, então whisper também funciona nesse caso.

Áudio

nodaro audio separate --audio <url> [--mode vocal_instrumental|stems] [--quality auto|fast|best] [--watch] [--poll-interval <ms>] [--json]
nodaro audio isolate --audio <url> [--watch] [--poll-interval <ms>] [--json]
nodaro audio fx --audio <url> [--preset <preset>] [--mix <0-100>] [--delay <20-2000>] [--decay <0-1>] [--eq-low <db>] [--eq-high <db>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio mix --audio <url> --audio <url> ... [--volumes <csv>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio adjust-volume --audio <url>|--video <url> [--volume <0-200>] [--normalize] [--fade-in <sec>] [--fade-out <sec>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio combine --segment <url[@a-b]> --segment ... [--watch] [--poll-interval <ms>] [--json]
nodaro audio transcribe --audio <url> [--provider elevenlabs-stt|incredibly-fast-whisper|whisper] [--language <code>] [--diarize] [--tag-audio-events] [--word-timestamps] [--watch] [--poll-interval <ms>] [--json]
ComandoO que fazNó
audio separateSepara os vocais do instrumental, ou divide o áudio em stems.Separação de áudio (Audio Separation)
audio isolateMantém a voz e remove o resto.Extrator de voz (Voice Extractor)
audio fxAplica uma predefinição de efeito, com configurações de mixagem, delay, decaimento e equalizador.Efeitos de áudio (Audio FX)
audio mixMixa várias faixas, com um volume por faixa.Mixar áudio (Mix Audio)
audio adjust-volumeAltera o volume, normaliza e aplica fade in ou fade out.Ajustar volume (Adjust Volume)
audio combineJunta segmentos um depois do outro. url@a-b pega um intervalo de tempo de um arquivo.Combinar áudio (Combine Audio)
audio transcribeTransforma fala em texto.Transcrever (Transcribe)

Estas são as peças que o Modificador de voz Pro combina, disponíveis separadamente.

Mecanismos de transcrição

MecanismoMarcações de tempo das palavrasTambém aceita
elevenlabs-sttSempre--diarize (quem fala quando) e --tag-audio-events
incredibly-fast-whisperCom --word-timestamps
whisperNenhuma, só segmentos de frases; --word-timestamps é recusado antes de qualquer crédito ser gasto

Se você omitir --provider, o mecanismo whisper é executado. Indique um mecanismo sempre que precisar das marcações de tempo das palavras.

O output_data do job concluído traz text, words (uma entrada por palavra, em milissegundos) e json (a transcrição normalizada, também em milissegundos). Uma lista segments no nível superior, em segundos, só existe com whisper e incredibly-fast-whisper; o elevenlabs-stt não retorna nenhuma, então leia words. Passe words para media add-captions --captions-file para uma renderização cinética.

Edição

Os comandos de edição são peças editoriais para podcasts e vídeos longos.

nodaro edit silence-detect <audioUrl> [--threshold-db=-35] [--min-silence-ms <ms>] [--pad-ms <ms>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit audio-sync (--source <[id=]url> ... | --sources-file <file.json>) [--reference <id>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit apply-edl --edl <file.json> [--transcript <file.json>] [--source <url> ...] [--output video|audio] [--quality proxy|final] [--crossfade-ms <ms>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit plan --mode tighten|clips|chapters --plan-tier economy|standard|premium --transcript <file.json> (--source <url[@audio|@video]> ... | --sources-file <file.json>) [--silence <file.json>] [--instructions <text>] [--style-guide <text>] [--count <n>] [--target-duration-sec <n>] [--target-aspect 16:9|9:16|1:1|4:5] [--platform <name>] [--watch] [--poll-interval <ms>] [--json]
ComandoO que fazNó
edit silence-detectEncontra os trechos silenciosos de uma gravação.Detectar silêncio (Silence Detect)
edit audio-syncAlinha de 2 a 6 gravações, de áudio ou vídeo, do mesmo evento.Sincronizar áudio (Audio Sync)
edit planPlaneja uma edição a partir de uma transcrição: deixar o ritmo mais enxuto, cortar clipes ou marcar capítulos.Plano de edição (Edit Plan)
edit apply-edlRenderiza uma lista de decisões de edição (EDL) como vídeo ou arquivo de áudio.Aplicar EDL (Apply EDL)

edit audio-sync nomeia as gravações como source-1, source-2 e assim por diante, a menos que você informe um id no formato id=url. O output_data.json dele tem três campos:

  • reference: a gravação à qual as outras são alinhadas. Escolha essa gravação com --reference.
  • offsets: uma entrada por gravação, com sourceId, offsetMs, confidence e driftMsPerHour.
  • notes: observações sobre o alinhamento.

Um tempo em uma gravação é convertido para a referência com referenceMs = sourceMs + offsetMs.

Perguntas frequentes

Última atualização

Nesta página