O que Editor de Vídeo faz?
Visão Geral
Fluxo de trabalho de vídeo assistido por IA, alimentado por três motores:
- ffmpeg -- editar filmagens existentes (cortar, comprimir, mesclar, redimensionar, velocidade, estabilizar, marca d'água, áudio, GIF, miniatura, transições, legendas)
- Remotion -- criar novo conteúdo de vídeo (cartelas de título, barras de identificação, cartelas finais, teasers, sobreposições animadas)
- Whisper -- transcrição e geração de legendas
Capacidades adicionais:
- Aceleração de hardware no Apple Silicon via
h264_videotoolbox / hevc_videotoolbox
- Integração de temas com ativos de design de
~/design-assets/color-palettes/
- Predefinições de plataforma para YouTube, Instagram, TikTok, Twitter e mais
- Cache de espaço de trabalho para Remotion para evitar repetidos
npm install
Quando Usar
Ative em QUALQUER uma destas intenções do usuário:
| Categoria | Palavras-chave |
|---|
| Edição básica | cortar, aparar, clipe, encurtar, dividir |
| Compressão | comprimir, reduzir tamanho, encolher, menor, otimizar |
| Mesclagem | mesclar, combinar, concatenar, juntar, costurar |
| Redimensionamento | redimensionar, escalar, cortar, preencher, proporção, retrato, paisagem, quadrado |
| Velocidade | acelerar, desacelerar, câmera lenta, timelapse, avanço rápido, reverter |
| Estabilização | estabilizar, tremer, suavizar, corrigir tremor |
| Transições | desvanecer, crossfade, dissolver, cortina, transição |
| Legendas | legenda, subtítulo, SRT, transcrever, fala-para-texto |
| Cartelas de título | cartela de título, introdução, abertura, texto animado |
| Barras de identificação | barra de identificação, etiqueta de nome, chyron, barra de nome |
| Cartelas finais | cartela final, encerramento, tela final, fechamento |
| Teasers | teaser, trailer, promo, compilação de destaques, montagem |
| Miniaturas | miniatura, poster, extrair quadro, captura de tela |
| GIFs | GIF, imagem animada, loop, meme |
| Marcas d'água | marca d'água, sobreposição de logotipo, branding |
| Áudio | áudio, volume, normalizar, sonoridade, mudo, fade in, fade out, mixar, extrair áudio |
| Informações | info, detalhes, duração, resolução, codec, bitrate, metadados |
| Pipeline | pipeline, lote, fluxo de trabalho, multi-etapas |
| Plataforma | YouTube, Instagram, TikTok, Twitter, Reels, Shorts |
Referência de Comandos
Comandos de Edição (ffmpeg)
| Comando | Descrição | Exemplo |
|---|
/trim | Cortar um segmento de um vídeo | "cortar video.mp4 de 0:30 a 1:45" |
/compress | Reduzir o tamanho do arquivo com controle de qualidade | "comprimir para menos de 10MB" |
/merge | Combinar vários clipes em um | "mesclar clipe1.mp4 e clipe2.mp4 com fade" |
/resize | Alterar dimensões, proporção, cortar ou preencher | "redimensionar para 1080x1080 quadrado" |
/speed | Acelerar, desacelerar ou reverter | "velocidade 2x" ou "câmera lenta 0.5x" |
/stabilize | Remover tremor de câmera (vidstab duas passagens) | "estabilizar tremedeira.mp4" |
/watermark | Sobrepor imagem ou texto no vídeo | "adicionar logo.png canto inferior direito" |
/audio | Volume, normalizar, mixar, fade, extrair, mudo | "normalizar áudio para -14 LUFS" |
/thumbnail | Extrair quadro como imagem | "miniatura em 0:15" |
/gif | Criar GIF animado a partir de segmento de vídeo | "GIF de 0:05 a 0:10 a 320px" |
/extract | Extrair faixas de áudio ou legendas | "extrair áudio como mp3" |
/info | Mostrar metadados do vídeo e detalhes dos fluxos | "info video.mp4" |
Comandos de Criação (Remotion)
| Comando | Descrição | Exemplo |
|---|
/title-card | Cartela de título animada com suporte a tema | "cartela de título: Em Breve, tema wad, animação zoom" |
/lower-third | Sobreposição animada de nome/título | "barra de identificação: João Silva, CEO, estilo moderno" |
/end-card | Encerramento animado com CTA e redes sociais | "cartela final: Inscreva-se!, @usuario, tema ea" |
/teaser | Montagem multi-clipe com transições e títulos | "teaser da pasta clips/, 30 segundos" |
Comandos de Transcrição (Whisper)
| Comando | Descrição | Exemplo |
|---|
/transcribe | Gerar SRT/VTT a partir de fala | "transcrever entrevista.mp4" |
/add-captions | Transcrever + queimar legendas no vídeo | "adicionar legendas a palestra.mp4" |
Orquestração
| Comando | Descrição | Exemplo |
|---|
/pipeline | Cadeia de processamento multi-etapas | "cortar, adicionar cartela de título, comprimir para Instagram" |
Fluxo de Trabalho
Passo 1: Verificar Ferramentas Disponíveis
which ffmpeg ffprobe && echo "ffmpeg: ok"
node --version && echo "node: ok"
which whisper && echo "whisper: ok" || echo "whisper: não instalado (legendas precisam de .srt manual)"
ffmpeg -encoders 2>/dev/null | grep videotoolbox && echo "hw accel: ok" || echo "hw accel: não disponível"
ffmpeg -filters 2>/dev/null | grep vidstab && echo "vidstab: ok" || echo "vidstab: não disponível (brew install ffmpeg com --with-libvidstab)"
Se ffmpeg estiver faltando: "Instale com brew install ffmpeg"
Se Node.js estiver faltando: "Instale de https://nodejs.org ou brew install node"
Se vidstab estiver faltando: "Reinstale ffmpeg com vidstab: brew install ffmpeg --with-libvidstab"
Passo 2: Classificar Solicitação
| Intenção do Usuário | Motor | Caminho |
|---|
| Editar filmagens existentes | ffmpeg | Passo 3a |
| Criar novo conteúdo de vídeo | Remotion | Passo 3b |
| Manipulação de áudio | filtros de áudio ffmpeg | Passo 3a |
| Informações/inspeção | ffprobe | Passo 3a |
| Pipeline combinado | orquestrar ambos | Passo 3c |
| Publicação em plataforma | predefinições de redimensionamento + compressão | Passo 3a |
| Transcrição | Whisper + ffmpeg | Passo 3a |
Passo 3a: Caminho ffmpeg
- Perguntar pelo(s) arquivo(s) de entrada, se não fornecidos
- Inspecionar com ffprobe:
ffprobe -v quiet -print_format json -show_format -show_streams "<arquivo>"
- Detecção de aceleração de hardware (macOS Apple Silicon):
ffmpeg -encoders 2>/dev/null | grep h264_videotoolbox
- Tratamento de colisão de saída:
SAIDA="video_cortado.mp4"
CONTADOR=2
while [ -f "$SAIDA" ]; do
SAIDA="video_cortado_${CONTADOR}.mp4"
CONTADOR=$((CONTADOR + 1))
done
- Construir o comando ffmpeg
- Explicar cada flag em português claro
- Informar o nome do arquivo de saída (nunca sobrescrever a fonte)
- Perguntar: "Devo executar isso?"
- Executar, depois verificar:
if [ $? -eq 0 ]; then
echo "Sucesso"
ffprobe -v quiet -print_format json -show_format "$SAIDA" | grep -E '"duration"|"size"'
else
echo "Erro — verifique a saída do ffmpeg acima"
fi
- Relatar caminho da saída + tamanho do arquivo + duração
Convenções de nomenclatura de saída:
| Comando | Padrão de Saída |
|---|
| Cortar | cortado_<nome_arquivo> |
| Comprimir | comprimido_<nome_arquivo> |
| Mesclar | mesclado_saida.<ext> |
| Redimensionar | redimensionado_<nome_arquivo> |
| Velocidade | velocidade_<fator>x_<nome_arquivo> |
| Estabilizar | estabilizado_<nome_arquivo> |
| Marca d'água | marca_dagua_<nome_arquivo> |
| Legendas | legendado_<nome_arquivo> |
| Extrair áudio | <nome>.mp3 |
| Áudio modificado | audio_<nome_arquivo> |
| Extrair legenda | <nome>.srt |
| Miniatura | thumb_<nome>_<timecode>.jpg |
| GIF | <nome>.gif |
Passo 3b: Caminho Remotion
- Verificar se Node.js está instalado
- Cache de espaço de trabalho -- reutilizar espaço de trabalho existente:
ESPACO_TRABALHO="/tmp/remotion-workspace"
if [ -d "$ESPACO_TRABALHO/node_modules" ]; then
echo "Reutilizando espaço de trabalho Remotion em cache"
else
echo "Criando espaço de trabalho Remotion (primeira execução)..."
mkdir -p "$ESPACO_TRABALHO"
cp -r ~/project-templates/remotion-video/* "$ESPACO_TRABALHO/"
cd "$ESPACO_TRABALHO" && npm install
fi
- Carregamento de tema de
~/design-assets/color-palettes/:
- Escrever ou atualizar os arquivos de origem da composição conforme necessário
- Composições disponíveis:
TitleCard -- título animado com múltiplas predefinições de animação
LowerThird -- sobreposição de nome/título com barra de destaque
EndCard -- encerramento com CTA, redes sociais, logotipo
Teaser -- montagem multi-clipe com TransitionSeries
- Renderizar:
cd "$ESPACO_TRABALHO"
npx remotion render src/index.ts <CompositionId> /caminho/para/saida.mp4 \
--props='{"text":"Título","bg":"#09090B","fg":"#FFFFFF","accent":"#7C3AED"}'
- Copiar saída para o diretório de trabalho do usuário
- Relatar caminho da saída + duração
Passo 3c: Pipeline Combinado
Para solicitações multi-etapas (ex.: "crie um teaser com cartela de título, clipes e cartela final"):
- Planejar -- descrever cada etapa ao usuário antes de executar
- Criar -- gerar qualquer conteúdo Remotion primeiro (cartelas de título, cartelas finais)
- Processar -- cortar/redimensionar clipes de origem com ffmpeg
- Montar -- mesclar todas as peças com transições usando ffmpeg
- Finalizar -- comprimir para a plataforma de destino, se especificado
- Confirmar entre as fases principais (criação vs. edição vs. montagem)
Referência Rápida ffmpeg
Cortar (sem perda)
ffmpeg -ss <inicio> -to <fim> -i entrada.mp4 -c copy cortado_entrada.mp4
Comprimir -- web (CRF 23)
ffmpeg -i entrada.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k comprimido_entrada.mp4
Comprimir -- acelerado por hardware (macOS)
ffmpeg -i entrada.mp4 -c:v h264_videotoolbox -b:v 5M -c:a aac -b:a 128k comprimido_entrada.mp4
Mesclar com transição fade
ffmpeg -i clipe1.mp4 -i clipe2.mp4 \
-filter_complex "[0][1]xfade=transition=fade:duration=1:offset=<offset>,format=yuv420p[v];[0:a][1:a]acrossfade=d=1[a]" \
-map "[v]" -map "[a]" mesclado_saida.mp4
Redimensionar / Escalar
ffmpeg -i entrada.mp4 -vf "scale=1920:1080" redimensionado_entrada.mp4
ffmpeg -i entrada.mp4 -vf "scale=1080:-1" redimensionado_entrada.mp4
ffmpeg -i entrada.mp4 -vf "crop=min(iw\,ih):min(iw\,ih)" cortado_entrada.mp4
ffmpeg -i entrada.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" preenchido_entrada.mp4
Alteração de Velocidade
ffmpeg -i entrada.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" velocidade_2x_entrada.mp4
ffmpeg -i entrada.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" velocidade_0.5x_entrada.mp4
ffmpeg -i entrada.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" velocidade_4x_entrada.mp4
ffmpeg -i entrada.mp4 -vf "reverse" -af "areverse" revertido_entrada.mp4
Sobreposição de Marca d'Água
ffmpeg -i entrada.mp4 -i logo.png \
-filter_complex "overlay=W-w-20:H-h-20" marca_dagua_entrada.mp4
ffmpeg -i entrada.mp4 -i logo.png \
-filter_complex "overlay=20:20" marca_dagua_entrada.mp4
ffmpeg -i entrada.mp4 -i logo.png \
-filter_complex "[1]format=rgba,colorchannelmixer=aa=0.3[wm];[0][wm]overlay=(W-w)/2:(H-h)/2" marca_dagua_entrada.mp4
ffmpeg -i entrada.mp4 \
-vf "drawtext=text='Minha Marca':fontsize=24:[email protected]:x=W-tw-20:y=H-th-20" marca_dagua_entrada.mp4
Estabilização de Vídeo (vidstab duas passagens)
ffmpeg -i tremedeira.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null -
ffmpeg -i tremedeira.mp4 -vf vidstabtransform=smoothing=30:input=transforms.trf estabilizado_tremedeira.mp4
Manipulação de Áudio
ffmpeg -i entrada.mp4 -af "volume=1.5" audio_entrada.mp4
ffmpeg -i entrada.mp4 -af "loudnorm=I=-14:TP=-1:LRA=11" audio_entrada.mp4
ffmpeg -i video.mp4 -i musica.mp3 \
-filter_complex "[0:a]volume=1.0[a1];[1:a]volume=0.3[a2];[a1][a2]amix=inputs=2:duration=first[a]" \
-map 0:v -map "[a]" audio_entrada.mp4
ffmpeg -i entrada.mp4 -af "afade=t=in:ss=0:d=3,afade=t=out:st=<fim-3>:d=3" audio_entrada.mp4
ffmpeg -i entrada.mp4 -an mudo_entrada.mp4
ffmpeg -i entrada.mp4 -i nova_faixa.mp3 -c:v copy -map 0:v:0 -map 1:a:0 audio_substituido_entrada.mp4
Criação de GIF (duas passagens de paleta para qualidade)
ffmpeg -ss <inicio> -t <duracao> -i entrada.mp4 \
-vf "fps=15,scale=320:-1:flags=lanczos,palettegen" paleta.png
ffmpeg -ss <inicio> -t <duracao> -i entrada.mp4 -i paleta.png \
-filter_complex "[0:v]fps=15,scale=320:-1:flags=lanczos[v];[v][1:v]paletteuse" saida.gif
rm paleta.png
Extração de Miniatura
ffmpeg -ss <timestamp> -i entrada.mp4 -frames:v 1 -q:v 2 thumb_entrada_<timestamp>.jpg
ffmpeg -i entrada.mp4 -vf "fps=1/<intervalo>,scale=320:-1,tile=4x4" grade_thumb_entrada.jpg
Queimar legendas .srt
ffmpeg -i entrada.mp4 -vf "subtitles=legendas.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF'" legendado_entrada.mp4
Extrair áudio
ffmpeg -i entrada.mp4 -vn -c:a libmp3lame -q:a 2 saida.mp3
Informações do vídeo
ffprobe -v quiet -print_format json -show_format -show_streams entrada.mp4
Referência Rápida Remotion
Configuração de Espaço de Trabalho em Cache
ESPACO_TRABALHO="/tmp/remotion-workspace"
if [ ! -d "$ESPACO_TRABALHO/node_modules" ]; then
cp -r ~/project-templates/remotion-video/* "$ESPACO_TRABALHO/"
cd "$ESPACO_TRABALHO" && npm install
fi
Composição TitleCard
import { AbsoluteFill, spring, useCurrentFrame, useVideoConfig, Img } from 'remotion';
type Animation = 'fade' | 'slide-up' | 'slide-down' | 'zoom' | 'typewriter' | 'glitch' | 'blur-in';
export const TitleCard: React.FC<{
text: string;
subtitle?: string;
bg?: string;
fg?: string;
accent?: string;
animation?: Animation;
logo?: string;
}> = ({ text, subtitle, bg = '#09090B', fg = '#FFFFFF', accent = '#7C3AED', animation = 'fade', logo }) => {
const frame = useCurrent
...
[truncado para tradução]