Como Fazer Conversão de Vídeo com FFmpeg
Guia prático de conversão de vídeo com FFmpeg — MP4, MOV, AVI, WebM, MKV. Escolha de codec, controle de qualidade e scripts de conversão em lote.

A conversão de formato de vídeo é uma das tarefas mais comuns no processamento de mídia. Seja MP4 para a web, MOV para fluxos da Apple, ou WebM para projetos open-source, o FFmpeg resolve tudo via linha de comando. Este guia cobre desde conversões básicas até escolha avançada de codec e processamento em lote.
Como fazer uma conversão básica de formato?
A conversão mais simples só troca o container. O FFmpeg detecta o formato de saída pela extensão do arquivo:
# Convert MKV to MP4
ffmpeg -i input.mkv output.mp4
# Convert AVI to MOV
ffmpeg -i input.avi output.mov
# Convert MP4 to WebM
ffmpeg -i input.mp4 output.webm
Quando você não especifica codecs, o FFmpeg escolhe os padrões para o container alvo. Funciona, mas você não tem controle sobre qualidade ou compatibilidade.
Qual a diferença entre container e codec?
Antes de avançar, vale entender a diferença:
- Container (MP4, MKV, MOV, AVI, WebM) — o formato de arquivo que guarda vídeo, áudio e metadados
- Codec de vídeo (H.264, H.265, VP9, AV1) — como os dados de vídeo são comprimidos
- Codec de áudio (AAC, Opus, MP3, FLAC) — como os dados de áudio são comprimidos
Um container é como uma caixa; os codecs são o que vai dentro. O mesmo codec de vídeo pode viver em containers diferentes.
| Container | Codecs de Vídeo Comuns | Codecs de Áudio Comuns | Melhor Para |
|---|---|---|---|
| MP4 | H.264, H.265, AV1 | AAC, MP3 | Web, mobile, uso geral |
| MKV | Qualquer um | Qualquer um | Arquivamento, mídia multi-faixa |
| MOV | H.264, H.265, ProRes | AAC, PCM | Ecossistema Apple, edição |
| WebM | VP8, VP9, AV1 | Vorbis, Opus | Web (open-source) |
| AVI | H.264, MPEG-4 | MP3, PCM | Compatibilidade legada |
Como escolher o codec certo?
H.264 — Compatibilidade máxima
H.264 (libx264) toca em praticamente todo dispositivo e navegador. É a escolha mais segura para distribuição geral.
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
H.265 (HEVC) — Melhor compressão
H.265 (libx265) gera arquivos cerca de 50% menores com a mesma qualidade. O suporte está crescendo, mas ainda não é universal.
ffmpeg -i input.avi -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4
Atenção: o H.265 usa uma escala de CRF diferente. CRF 28 em H.265 equivale aproximadamente ao CRF 23 em H.264.
VP9 — Open-source, amigável para web
VP9 é o codec livre de royalties do Google. Combina com WebM e é suportado por todos os navegadores modernos.
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
O -b:v 0 diz ao FFmpeg para usar modo CRF puro (sem teto de taxa de bits).
AV1 — Próxima geração
AV1 oferece a melhor taxa de compressão, mas a codificação (encoding) é muito lenta. Use quando você tiver tempo e quiser os menores arquivos.
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -cpu-used 4 -c:a libopus -b:a 128k output.mkv
-cpu-used 4 acelera bastante a codificação (faixa 0-8, maior = mais rápido mas qualidade menor).
Comparação de codecs
| Codec | Compressão | Velocidade | Suporte em Navegadores | Licença |
|---|---|---|---|---|
| H.264 | Boa | Rápida | Universal | Licenciado |
| H.265 | Melhor | Média | Crescendo | Licenciado |
| VP9 | Melhor | Lenta | Todos modernos | Sem royalties |
| AV1 | Melhor de todos | Muito lenta | Crescendo | Sem royalties |
Como combinar codec de áudio com container?
Cada container funciona melhor com certos codecs de áudio:
# MP4 + AAC (most common pairing)
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4
# WebM + Opus (best quality per bitrate)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
# MKV + FLAC (lossless audio)
ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a flac output.mkv
# MOV + PCM (uncompressed, for editing)
ffmpeg -i input.mp4 -c:v copy -c:a pcm_s16le output.mov
| Codec de Áudio | Qualidade | Tamanho do Arquivo | Melhor Container |
|---|---|---|---|
| AAC | Boa | Pequeno | MP4, MOV |
| Opus | Excelente | O menor | WebM, MKV |
| MP3 | Boa | Pequeno | MP4, AVI, MKV |
| FLAC | Sem perdas | Grande | MKV |
| PCM | Sem perdas | Muito grande | MOV, WAV |
Como fazer conversão instantânea com stream copy?
Quando os codecs de origem são compatíveis com o container de destino, você pode copiar as faixas (streams) sem reencodar. É instantâneo e sem perdas:
# Remux MKV to MP4 without re-encoding
ffmpeg -i input.mkv -c copy output.mp4
# Copy video, re-encode audio only
ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 128k output.mp4
O stream copy só funciona quando os codecs são suportados pelo container alvo. Por exemplo, você não consegue colocar vídeo VP9 dentro de um container AVI.
Qualidade vs. tamanho do arquivo: como balancear?
Modo CRF — melhor para arquivos locais
CRF (Constant Rate Factor) entrega a melhor relação qualidade-tamanho. O encoder ajusta a taxa de bits cena a cena. Para um aprofundamento em técnicas de compressão, veja nosso guia de compressão de vídeo.
# High quality (larger file)
ffmpeg -i input.avi -c:v libx264 -crf 18 -c:a aac -b:a 192k output.mp4
# Balanced quality
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
# Smaller file (lower quality)
ffmpeg -i input.avi -c:v libx264 -crf 28 -c:a aac -b:a 96k output.mp4
Codificação em duas passadas — melhor para tamanho-alvo
Quando você precisa de um tamanho específico de arquivo, use duas passadas:
# Pass 1: analyze
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/null
# Pass 2: encode
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 128k output.mp4
Presets — velocidade vs. compressão
Presets mais lentos produzem arquivos menores com a mesma qualidade:
# Fast encoding, larger file
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset fast -c:a aac output.mp4
# Slow encoding, smaller file
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset slow -c:a aac output.mp4
Como converter mudando a resolução?
Combine conversão de formato com escala:
# Convert to 720p MP4
ffmpeg -i input.mkv -c:v libx264 -crf 23 -vf "scale=-2:720" -c:a aac -b:a 128k output.mp4
# Convert to 1080p WebM
ffmpeg -i input.avi -c:v libvpx-vp9 -crf 30 -b:v 0 -vf "scale=-2:1080" -c:a libopus output.webm
Como converter vários arquivos em lote?
Converter todos os arquivos de um diretório
# Convert all AVI files to MP4
for f in *.avi; do
ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac -b:a 128k "${f%.avi}.mp4"
done
# Convert all MKV files to MP4 (stream copy if possible)
for f in *.mkv; do
ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"
done
Converter com qualidade customizada por formato
#!/bin/bash
# Batch convert to multiple formats
INPUT="input.mp4"
# Web-optimized MP4
ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart web.mp4
# High-quality MKV archive
ffmpeg -i "$INPUT" -c:v libx265 -crf 22 -preset slow -c:a flac archive.mkv
# WebM for open-source hosting
ffmpeg -i "$INPUT" -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k web.webm
Conversão recursiva
# Find and convert all AVI files recursively
find . -name "*.avi" -exec sh -c '
ffmpeg -i "$1" -c:v libx264 -crf 23 -c:a aac "${1%.avi}.mp4"
' _ {} \;
Como otimizar MP4 para web com faststart?
Para arquivos MP4 servidos pela web, sempre adicione -movflags +faststart. Isso move os metadados para o início do arquivo, e o player consegue começar a tocar antes do download terminar:
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -movflags +faststart output.mp4
Quais são as receitas de conversão mais comuns?
Comandos prontos para os casos mais frequentes:
# MOV (iPhone) to MP4 for sharing
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4
# AVI to MP4 (re-encode)
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
# MP4 to WebM for web embedding
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
# MKV to MP4 (lossless remux)
ffmpeg -i input.mkv -c copy -movflags +faststart output.mp4
# Any format to GIF (short clip)
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" -t 5 output.gif
# MP4 to HLS for streaming
ffmpeg -i input.mp4 -c copy -hls_time 10 -hls_list_size 0 output.m3u8
Como resolver problemas comuns?
Avisos "Discarding packet" — O container de origem tem problemas de compatibilidade. Adicione -err_detect ignore_err para ignorar pacotes corrompidos.
Erros "Non-monotonous DTS" — Problemas de timestamp na origem. Corrija com:
ffmpeg -i input.mkv -fflags +genpts -c:v libx264 -crf 23 -c:a aac output.mp4
Codec não suportado pelo container — Você está tentando colocar um codec incompatível em um container (ex: VP9 em AVI). Mude o container ou reencode com um codec compatível.
Arquivo de saída maior que o de entrada — Acontece quando você converte de um codec mais eficiente para um menos eficiente, ou quando a origem já estava muito comprimida. Tente baixar o valor de CRF ou usar um codec mais eficiente.
Alternativa em nuvem com FFHub
Converter formato de vídeo localmente funciona bem para tarefas pontuais, mas conversões em lote podem prender sua máquina por horas. O FFHub deixa você rodar comandos FFmpeg na nuvem via API — mesma sintaxe do FFmpeg, sem usar CPU local.
Isso é especialmente útil quando você precisa converter grandes lotes de arquivos, integrar conversão de formato em uma aplicação web, ou processar vídeos em máquinas que não têm FFmpeg instalado.
Resumo
- Use stream copy (
-c copy) quando os codecs forem compatíveis — é instantâneo - Escolha H.264 + AAC em MP4 para compatibilidade máxima
- Escolha VP9 + Opus em WebM para entrega web livre de royalties
- Use modo CRF para codificação focada em qualidade
- Adicione
-movflags +faststartpara arquivos MP4 servidos pela web - Use scripts em lote para converter diretórios inteiros de uma vez
Artigos Relacionados
- How to Compress Video with FFmpeg - Reduza o tamanho do arquivo com CRF, presets e escala de resolução
- How to Extract Audio from Video with FFmpeg - Extraia faixas de áudio de qualquer formato de vídeo
- FFmpeg Video Compression Best Practices - Estratégias avançadas de codificação para qualidade e tamanho ideais