← All posts

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.

FFHub·2026-04-21
Como Fazer Conversão de Vídeo com FFmpeg

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.

ContainerCodecs de Vídeo ComunsCodecs de Áudio ComunsMelhor Para
MP4H.264, H.265, AV1AAC, MP3Web, mobile, uso geral
MKVQualquer umQualquer umArquivamento, mídia multi-faixa
MOVH.264, H.265, ProResAAC, PCMEcossistema Apple, edição
WebMVP8, VP9, AV1Vorbis, OpusWeb (open-source)
AVIH.264, MPEG-4MP3, PCMCompatibilidade 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

CodecCompressãoVelocidadeSuporte em NavegadoresLicença
H.264BoaRápidaUniversalLicenciado
H.265MelhorMédiaCrescendoLicenciado
VP9MelhorLentaTodos modernosSem royalties
AV1Melhor de todosMuito lentaCrescendoSem 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 ÁudioQualidadeTamanho do ArquivoMelhor Container
AACBoaPequenoMP4, MOV
OpusExcelenteO menorWebM, MKV
MP3BoaPequenoMP4, AVI, MKV
FLACSem perdasGrandeMKV
PCMSem perdasMuito grandeMOV, 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 +faststart para arquivos MP4 servidos pela web
  • Use scripts em lote para converter diretórios inteiros de uma vez

Artigos Relacionados

Como Fazer Conversão de Vídeo com FFmpeg | FFHub