← All posts

Compressão de vídeo com FFmpeg: guia de boas práticas

Domine compressão de vídeo com FFmpeg neste guia técnico denso cobrindo CRF, presets, two-pass, comparação de codecs, scaling de resolução e cenários reais.

FFHub·2026-05-11
Compressão de vídeo com FFmpeg: guia de boas práticas

Compressão de vídeo com FFmpeg se resume a balancear três botões — CRF (qualidade), preset (velocidade) e codec (eficiência). Este guia aprofundado cobre tudo: da matemática do CRF a two-pass encoding, benchmarks H.264 vs H.265 vs AV1, e cenários reais (web, social, arquivamento, HLS). Cada comando aqui é pronto pra copiar e colar.

Try it in your browser

Teste configurações de compressão no navegador antes de scriptar — solte um clipe, escolha CRF / preset, baixe o resultado.

Entendendo o CRF (Constant Rate Factor)

CRF é a configuração mais importante para compressão de vídeo baseada em qualidade. Ele diz ao encoder para mirar num nível de qualidade visual consistente, deixando o bitrate variar conforme necessário. CRF menor = qualidade maior = arquivo maior. CRF maior = qualidade menor = arquivo menor.

Valores de CRF para H.264 (libx264)

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

A escala CRF do H.264 vai de 0 (lossless) a 51 (pior qualidade). O que cada valor produz:

CRFNível de qualidadeCaso de uso típicoTamanho de arquivo (relativo a CRF 23)
0LosslessArquivamento, masters de edição10-50x maior
14Quase losslessPós-produção profissional4-6x maior
18Visualmente losslessEntrega de alta qualidade, streaming premium2-3x maior
20ExcelenteVídeo web de alta qualidade1.5-2x maior
23Boa (padrão)Uso geral, entrega web1x (baseline)
26AceitávelRedes sociais, entrega mobile0.5-0.7x
28ModeradaEntrega com banda restrita0.3-0.5x
32BaixaPreviews, thumbnails0.15-0.25x
40Muito baixaCompressão extrema (mal assistível)0.05-0.1x
51PiorNunca useMinúsculo

O sweet spot para a maioria dos casos é CRF 18-28. Abaixo de 18, você está gastando bits em diferenças de qualidade que a maioria dos espectadores nem percebe. Acima de 28, os artefatos ficam claramente visíveis.

Valores de CRF para H.265 (libx265)

H.265 atinge a mesma qualidade visual com aproximadamente 40-50% menos bitrate que H.264. No entanto, a escala de CRF muda: CRF 28 em H.265 equivale aproximadamente a CRF 23 em H.264.

ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
CRF (H.265)CRF H.264 equivalenteNível de qualidade
18~14Quase lossless
22~18Visualmente lossless
24~20Excelente
28~23Boa (padrão)
32~26Aceitável
36~30Baixa

Como escolher o CRF certo

Uma abordagem prática:

  1. Comece com o padrão (23 para H.264, 28 para H.265)
  2. Olhe o output — a qualidade está aceitável?
  3. Ajuste em 2-4 pontos em qualquer direção
  4. Faça teste A/B — encode a mesma cena complexa com dois valores de CRF e compare

As cenas que mais revelam artefatos de compressão são: movimento rápido, texturas finas (grama, tecido), gradientes (céu, neblina), e cenas escuras com detalhe sutil. Para uma introdução amigável a iniciantes, veja nosso guia de compressão de vídeo com FFmpeg.

Presets de encoding: velocidade vs qualidade

O parâmetro preset do FFmpeg controla quanto tempo de CPU o encoder gasta otimizando a compressão. Presets mais lentos atingem compressão melhor (arquivos menores na mesma qualidade) ao custo de tempos de encoding maiores.

Benchmark de preset H.264

Todos os testes abaixo usam CRF 23 com fonte 1080p 60fps (2 minutos):

PresetTempo de encodingTamanho do arquivoQualidade (VMAF)
ultrafast15s85 MB92.1
superfast22s62 MB93.8
veryfast30s48 MB94.5
faster40s42 MB95.0
fast52s38 MB95.3
medium70s35 MB95.5
slow120s33 MB95.7
slower210s31 MB95.8
veryslow450s30 MB95.9
placebo1800s29.5 MB95.9

Observações-chave:

  • medium é o padrão e o sweet spot para a maioria dos workflows
  • Indo de medium para slow economiza ~6% de tamanho mas leva 70% mais tempo
  • Indo de medium para veryslow economiza ~14% mas leva 6.4x mais tempo
  • placebo oferece praticamente nenhuma melhoria sobre veryslow — nunca use
  • ultrafast produz arquivos 2.4x maiores que medium — evite na entrega final
# Good default for most use cases
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium output.mp4

# When encoding time matters more than file size
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast output.mp4

# When file size matters more than encoding time
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow output.mp4

Comportamento dos presets H.265

Os presets H.265 seguem a mesma convenção de nomes, mas o encoding é significativamente mais lento em cada nível:

PresetTempo H.264Tempo H.265Tamanho H.265
fast52s180s25 MB
medium70s300s22 MB
slow120s600s20 MB

Encoding H.265 leva aproximadamente 3-5x mais tempo que H.264 no mesmo preset, mas produz arquivos 30-40% menores em qualidade equivalente.

Two-pass encoding

Two-pass encoding te dá controle preciso sobre o bitrate de saída, o que é essencial quando você precisa atingir um tamanho de arquivo específico (ex.: "este vídeo tem que ter menos de 50MB").

Como funciona

  • Pass 1: FFmpeg analisa o vídeo e cria um arquivo de log com dados de complexidade
  • Pass 2: FFmpeg usa o log para distribuir bits de forma ótima — mais bits para cenas complexas, menos para simples

Comando básico de two-pass

# Pass 1 — analyze (output is discarded)
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 1 -f null /dev/null

# Pass 2 — encode using analysis data
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 2 output.mp4

Calculando o bitrate alvo

Para encaixar um vídeo num tamanho de arquivo alvo:

Video bitrate = (Target file size in bits - Audio size in bits) / Duration in seconds

Exemplo: vídeo de 10 minutos, alvo de 100MB, áudio 128kbps:

Audio size = 128,000 bps × 600s = 76,800,000 bits = 9.6 MB
Video bitrate = (100 MB - 9.6 MB) × 8,000,000 / 600 = 1,205,333 bps ≈ 1.2 Mbps
ffmpeg -i input.mp4 -c:v libx264 -b:v 1200k -pass 1 -c:a aac -b:a 128k -f null /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 1200k -pass 2 -c:a aac -b:a 128k output.mp4

CRF vs two-pass: quando usar qual

AbordagemMelhor paraControle
CRFQualidade consistente, tamanho desconhecidoFoco em qualidade
Two-passTamanho ou bitrate alvoFoco em tamanho
CRF + maxrateQualidade com teto de bitrateStreaming

Para streaming com teto de bitrate:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 4M -bufsize 8M output.mp4

Isso mira na qualidade do CRF 23 mas limita o bitrate em 4 Mbps — útil para streaming onde a banda é limitada.

Comparação de codecs: H.264 vs H.265 vs VP9 vs AV1

Escolher o codec certo é trade-off entre eficiência de compressão, velocidade de encoding, e compatibilidade de playback.

Eficiência de compressão

Em qualidade visual equivalente (VMAF 95), tamanhos relativos:

CodecTamanho relativoCompressão vs H.264
H.264 (libx264)100%Baseline
H.265 (libx265)55-65%35-45% menor
VP9 (libvpx-vp9)55-65%35-45% menor
AV1 (libaom-av1)40-50%50-60% menor

Velocidade de encoding

Tempo relativo de encoding para fonte 1080p 60fps em qualidade equivalente:

CodecTempo de encoding (relativo)Notas
H.2641xRápido, bem otimizado
H.2653-5xSignificativamente mais lento
VP95-10xMuito lento (single-thread por padrão)
AV1 (libaom)20-50xExtremamente lento
AV1 (SVT-AV1)3-8xImplementação AV1 muito mais rápida

Compatibilidade de playback (2026)

CodecBrowsersMobileSmart TVsDecode em hardware
H.26499%+99%+99%+Universal
H.265Safari, Edge (parcial)iOS, Android 5+Maioria modernaComum
VP9Chrome, Firefox, EdgeAndroid 5+LimitadoCrescendo
AV1Chrome, Firefox, Edge, Safari 17+Celulares topo de linhaLimitadoEmergente

Comandos práticos

# H.264 — maximum compatibility
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# H.265 — 40% smaller, good mobile support
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4

# VP9 — royalty-free, good for web
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -row-mt 1 -c:a libopus -b:a 128k output.webm

# AV1 (SVT-AV1) — best compression, modern devices
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 6 -c:a libopus -b:a 128k output.mp4

Qual codec escolher

CenárioCodec recomendadoPor quê
Compatibilidade máximaH.264Toca em todo lugar
Economia de banda, ecossistema AppleH.265Boa compressão, nativo iOS/macOS
Web-first, royalty-freeVP9Suporte Chrome/Firefox, sem licenciamento
À prova de futuro, melhor compressãoAV1 (SVT-AV1)50%+ economia, suporte crescendo
Audiência mistaH.264 com fallback H.265/AV1Sirva o melhor codec por dispositivo

Para mais detalhes sobre conversão entre containers, veja nosso guia de conversão de formato de vídeo.

Boas práticas de scaling de resolução

Fazer downscale de vídeo direito envolve mais que só mudar a resolução.

Resoluções alvo comuns

NomeResoluçãoBitrate típico (H.264)Bitrate típico (H.265)
4K UHD3840x216015-30 Mbps8-15 Mbps
1440p2560x14408-15 Mbps4-8 Mbps
1080p Full HD1920x10804-8 Mbps2-4 Mbps
720p HD1280x7202-4 Mbps1-2 Mbps
480p SD854x4801-2 Mbps0.5-1 Mbps
360p640x3600.5-1 Mbps0.3-0.5 Mbps

Scaling preservando aspect ratio

Sempre use -1 numa dimensão para manter o aspect ratio, e use -2 para garantir que o valor seja divisível por 2 (exigido pela maioria dos codecs):

# Scale to 720p width, auto-calculate height (divisible by 2)
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:v libx264 -crf 23 output.mp4

# Scale to 1080 height, auto-calculate width
ffmpeg -i input.mp4 -vf "scale=-2:1080" -c:v libx264 -crf 23 output.mp4

Qualidade do filtro de scaling

O FFmpeg oferece múltiplos algoritmos de scaling. O padrão (bilinear) é tranquilo na maioria dos casos, mas para a melhor qualidade no downscale, use Lanczos:

# High-quality downscale with Lanczos
ffmpeg -i input.mp4 -vf "scale=1280:720:flags=lanczos" -c:v libx264 -crf 23 output.mp4
AlgoritmoVelocidadeQualidade no downscaleMelhor para
fast_bilinearMais rápidoBaixaProcessamento em tempo real
bilinearRápidoModeradaPadrão, uso geral
bicubicMédioBoaNecessidades moderadas
lanczosMais lentoMelhorEntrega final, qualidade crítica
splineMais lentoExcelenteAlternativa ao Lanczos

Não faça upscale

Como regra geral, nunca faça upscale de vídeo. Encodar uma fonte 720p como 1080p desperdiça banda sem adicionar detalhe real. Se você precisa fazer upscale, mantenha mínimo e use Lanczos:

# If you must upscale (avoid when possible)
ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output.mp4

Compressão de áudio

Áudio frequentemente é negligenciado em workflows de compressão de vídeo, mas otimizá-lo pode economizar banda significativa.

Configurações de áudio recomendadas

Caso de usoCodecBitrateComando
Vídeo web geralAAC128 kbps-c:a aac -b:a 128k
Vídeo de alta qualidadeAAC192 kbps-c:a aac -b:a 192k
Conteúdo focado em músicaAAC256 kbps-c:a aac -b:a 256k
Vídeo WebM/VP9Opus128 kbps-c:a libopus -b:a 128k
Podcast/vozAAC64 kbps-c:a aac -b:a 64k
Podcast/voz (Opus)Opus48 kbps-c:a libopus -b:a 48k

Normalizando o loudness do áudio

Níveis de áudio inconsistentes entre vídeos é um problema comum. O filtro loudnorm do FFmpeg normaliza para padrões de broadcast:

# Normalize to -16 LUFS (standard for streaming)
ffmpeg -i input.mp4 -c:v copy -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:a aac -b:a 128k output.mp4

Removendo o áudio

Se você não precisa de áudio:

ffmpeg -i input.mp4 -an -c:v libx264 -crf 23 output.mp4

Copiando o áudio sem re-encode

Se o áudio já está num formato adequado:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4

Cenários reais de compressão

Entrega web (uso geral)

O cenário mais comum — comprimir vídeo para embed em sites:

ffmpeg -i input.mp4 \
  -c:v libx264 -crf 23 -preset medium \
  -vf "scale=1920:1080:flags=lanczos" \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output.mp4

Detalhes-chave:

  • -movflags +faststart move os metadados para o início do arquivo, habilitando playback progressivo (essencial para web)
  • CRF 23 dá um bom equilíbrio entre qualidade e tamanho
  • AAC 128k é suficiente para a maior parte do conteúdo web

Otimização para redes sociais

Plataformas como Twitter/X, Instagram e TikTok têm requisitos específicos:

# Optimized for social platforms (H.264, AAC, fast start)
ffmpeg -i input.mp4 \
  -c:v libx264 -crf 23 -preset medium \
  -profile:v high -level:v 4.0 \
  -pix_fmt yuv420p \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
  -c:a aac -b:a 128k -ar 44100 \
  -movflags +faststart \
  output.mp4
  • -profile:v high -level:v 4.0 garante compatibilidade ampla
  • -pix_fmt yuv420p garante playback em todos os dispositivos
  • O filtro scale + pad cria um vídeo vertical 9:16 com letterboxing

Arquivamento (qualidade máxima, perda mínima)

Para storage de longo prazo onde tamanho importa menos:

ffmpeg -i input.mp4 \
  -c:v libx264 -crf 16 -preset slow \
  -c:a flac \
  output.mkv
  • CRF 16 preserva praticamente todo o detalhe visual
  • Áudio FLAC é lossless
  • O container MKV suporta mais codecs que MP4

Streaming (bitrate adaptativo com HLS)

Gerando múltiplos níveis de qualidade para streaming adaptativo:

ffmpeg -i input.mp4 \
  -map 0:v -map 0:a -map 0:v -map 0:a -map 0:v -map 0:a \
  -c:v libx264 -crf 22 \
  -c:a aac -b:a 128k \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -b:v:0 5M -maxrate:v:0 5.5M -bufsize:v:0 10M -s:v:0 1920x1080 \
  -b:v:1 2.5M -maxrate:v:1 2.75M -bufsize:v:1 5M -s:v:1 1280x720 \
  -b:v:2 1M -maxrate:v:2 1.1M -bufsize:v:2 2M -s:v:2 854x480 \
  -f hls -hls_time 6 -hls_list_size 0 \
  -master_pl_name master.m3u8 \
  stream_%v/playlist.m3u8

Script de compressão em lote

Para processar um diretório inteiro de vídeos:

#!/bin/bash
# 批量压缩目录下所有视频
for f in *.mp4; do
  ffmpeg -i "$f" \
    -c:v libx264 -crf 23 -preset medium \
    -c:a aac -b:a 128k \
    -movflags +faststart \
    "compressed_${f}"
done

Compressão na cloud com FFHub

Todos os comandos deste guia funcionam direto com FFHub.io — só mande via API:

# Compress a video in the cloud (no local FFmpeg needed)
curl -X POST https://api.ffhub.io/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "command": "ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart output.mp4"
  }'

Isso joga o trabalho pesado de encoding (CPU-intensive) para a cloud, deixando sua máquina ou servidor livre. Particularmente útil para transcodificação em lote ou quando rodar FFmpeg no seu servidor de aplicação afetaria a performance.

Cheat sheet de referência rápida

Comandos de uma linha

# Good default compression
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4

# Aggressive compression (smaller file)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k output.mp4

# High-quality compression (larger file)
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k output.mp4

# Maximum compression with H.265
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4

# Future-proof with AV1
ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 6 -c:a libopus -b:a 128k output.mp4

Árvore de decisão

  1. Precisa de compatibilidade máxima? Use H.264
  2. Precisa de arquivos menores? Use H.265 (Apple/mobile) ou VP9 (web)
  3. Precisa dos menores arquivos e tem tempo? Use AV1
  4. Precisa de tamanho específico? Use two-pass encoding
  5. Precisa de qualidade consistente? Use CRF
  6. Processando muitos arquivos? Use preset fast ou veryfast
  7. Processando um arquivo importante? Use preset slow

Conclusão

Compressão de vídeo eficaz se resume a entender e equilibrar três fatores: qualidade (CRF), velocidade (preset), e tamanho (escolha de codec). Comece com os padrões — CRF 23, preset medium, H.264 — e ajuste com base nos seus requisitos específicos. Teste com seu conteúdo real, porque o comportamento de compressão varia drasticamente entre vídeos talking-head e sequências de ação.

Os comandos deste guia são FFmpeg padrão — eles vão funcionar na sua máquina local, em qualquer servidor, ou através de um serviço cloud como o FFHub. Domine esses fundamentos e você vai dar conta de qualquer desafio de compressão de vídeo que aparecer.

Try it in your browser

Valide uma combinação CRF / preset / codec em um clipe real antes de plugar no seu pipeline. Mesmas flags do FFmpeg, sem instalar nada.

Perguntas Frequentes (FAQ)

Qual CRF usar para vídeo em streaming?

Para streaming adaptativo HLS / DASH, o padrão é CRF 21–23 com tetos de -maxrate e -bufsize. CRF mantém a qualidade consistente entre mudanças de complexidade, enquanto o teto de bitrate protege contra picos de banda do espectador. Use CRF 23 pra variante de maior qualidade, CRF 24–25 pra qualidade média, CRF 26–28 pra a menor.

Two-pass vs CRF: quando usar cada um?

Use CRF quando você se importa com qualidade consistente (qualquer workflow web ou de arquivamento). Use two-pass quando você precisa atingir uma dimensão específica (limite de 25MB do Discord, especificação de broadcast, spec de anúncio). Two-pass leva ~2x mais que CRF mas dá controle preciso de tamanho. Pra streaming com teto de bitrate mas comportamento priorizando qualidade, combine CRF com -maxrate e -bufsize.

Por que H.265 demora tanto mais que H.264?

H.265 avalia muito mais tamanhos de bloco, modos de predição e vetores de movimento por quadro pra alcançar sua vantagem de compressão de 30–40%. A spec HEVC é intencionalmente mais complexa que a do H.264 em troca dessa eficiência. Mundo real: H.265 com libx265 -preset medium é cerca de 3–5x mais lento que H.264 com libx264 -preset medium pra a mesma saída de qualidade.

AV1 está pronto pra uso em produção em 2026?

Sim pra entrega, com ressalvas. Decodificadores AV1 em hardware agora são comuns em celulares topo de linha, consoles da geração atual e Apple Silicon, mas dispositivos antigos ainda precisam de fallback H.264. Pra encoding, SVT-AV1 (libsvtav1) é a escolha prática — 3–8x mais lento que H.264 em qualidade equivalente, contra 20–50x mais lento pra libaom-av1. Netflix, YouTube e Vimeo já servem AV1 a clientes capazes.

Como comprimir vídeos em lote mantendo qualidade consistente entre fontes diferentes?

Use modo CRF, não modo bitrate — CRF se adapta à complexidade de cada fonte. Um loop shell simples com -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart produz qualidade percebida uniforme entre entradas misturadas. Se você também precisa de teto rígido de tamanho, sobreponha -maxrate e -bufsize (por exemplo, -maxrate 4M -bufsize 8M).

-preset slow realmente deixa arquivos menores?

Sim, mas com retornos decrescentes. De mediumslow você economiza ~6% de tamanho na mesma qualidade, mas a codificação leva ~70% mais. mediumveryslow economiza ~14% por 6.4x o tempo de encode. placebo é virtualmente idêntico a veryslownão use placebo. Pontos ideais práticos: medium (padrão), slow (lotes noturnos, entrega final), fast (workflows tempo real ou proxy).

Artigos relacionados

Compressão de vídeo com FFmpeg: guia de boas práticas | FFHub