Bhinish Dhiman

Cortar vídeo sem recodificar: onde o corte cai de verdade

Traduzido do original em inglês. Ler o original

Um corte só por cópia começa num quadro-chave. Em passos de 0.1 segundo em seis arquivos, o início pedido foi atingido exatamente em 0.5% a 9.2% dos casos; a diferença média foi de 4.06 s no padrão do x264, 0.96 s com quadro-chave a cada 2 s e 0.46 s a cada 1 s. Os quadros extras continuam no arquivo; uma lista de edição os esconde.

Todo cortador sem perdas diz que o corte se encaixa num quadro-chave. Nenhum diz o quanto, num arquivo como os que você realmente tem. Medimos isso em seis.

Dois termos

Um quadro-chave (keyframe) é um quadro guardado como imagem completa. Cada quadro entre dois quadros-chave é guardado como uma diferença em relação aos vizinhos, então um decodificador que comece em qualquer outro ponto não tem sobre o que aplicar as diferenças. Um corte só por cópia move os pacotes codificados para um novo contêiner sem decodificá-los; ele não consegue começar no meio de uma diferença, então o início real da cópia é o último quadro-chave no ponto pedido ou antes dele.

A medição

Geramos cinco arquivos com o FFmpeg 6.0 e gravamos um sexto com o Chromium: um clipe de 60 segundos codificado com as configurações padrão do x264 a 30 fps (quadro-chave a cada 250 quadros); o mesmo clipe com quadros-chave forçados a cada 1 s e a cada 2 s; uma apresentação de 42 segundos com catorze fotos, com a detecção de mudança de cena do x264 ativada; a mesma apresentação em VP9 num WebM com intervalo de 240 quadros; e uma gravação de 9 segundos de duas páginas deste site, do jeito que o Playwright grava. Para cada arquivo, pedimos ao EncodedPacketSink.getKeyPacket() do mediabunny (a chamada por trás do número que nossa ferramenta de corte mostra) o quadro-chave anterior a cada ponto, de 0 até o fim, em passos de 0.1 s, e registramos a diferença. Foram 2 730 consultas no total, em 1º de outubro de 2026.

Arquivo Intervalo entre quadros-chave Diferença média Mediana Percentil 90 Maior Exato Acima de 1 s
Padrão do x264, 30 fps 8.33 s 4.06 s 4.03 s 7.47 s 8.30 s 0.5% 86.5%
Quadro-chave a cada 1 s 1.00 s 0.46 s 0.50 s 0.90 s 1.00 s 9.2% 0%
Quadro-chave a cada 2 s 2.00 s 0.96 s 1.00 s 1.80 s 2.00 s 4.5% 49.0%
Apresentação, mudança de cena a cada 3 s 3.00 s 1.46 s 1.50 s 2.70 s 3.00 s 2.9% 65.7%
VP9 WebM, intervalo de 240 quadros 8.00 s 3.83 s 3.80 s 7.10 s 8.00 s 1.2% 85.2%
Gravação de tela do Chromium, VP8 5.12 s 2.29 s 2.28 s 4.30 s 5.10 s 1.1% 76.7%

A diferença média é metade do intervalo entre quadros-chave, como tem de ser para um ponto escolhido de forma uniforme. O número que vale guardar é o da última coluna: num arquivo com as configurações padrão do x264, que é o caso da maioria das exportações feitas no computador, mais de quatro em cada cinco cortes começam mais de um segundo antes do ponto escolhido.

O que está no arquivo, e o que o player mostra

Depois fizemos a cópia em si, com a mesma configuração de Conversion da ferramenta, pedindo o trecho de 10.0 s a 15.0 s do arquivo com o padrão do x264. O quadro-chave mais próximo estava em 8.333 s. O resultado tinha 200 quadros, ou 6.67 segundos de vídeo, mas também trazia uma lista de edição (edit list), uma instrução do MP4 que diz ao player onde a apresentação começa. O FFmpeg decodificou 150 quadros e informou 5.00 s. O elemento de vídeo do Chromium informou uma duração de 5.000 s. Instruído a ignorar a lista de edição, o FFmpeg decodificou os 200 e informou 6.67 s.

Então a resposta para “onde o corte cai” tem duas metades. Os bytes começam no quadro-chave: 1.67 s de imagem que você não pediu estão no arquivo, e é por isso que o resultado é maior que a fração que você manteve. A apresentação começa onde você pediu, em qualquer player que respeite listas de edição, o que no nosso teste incluiu o Chromium e o FFmpeg. Um player ou editor que as ignora mostra os 1.67 s extras e parece ter cortado no lugar errado.

Contra a recodificação

Só cópia Decodificar e recodificar
Ponto de início Quadro-chave; apresentação cortada pela lista de edição Qualquer quadro
Imagem Bytes idênticos Perda de geração, pior na segunda passada
Tempo para um clipe 1080p Limitado pela leitura do arquivo Limitado pela codificação
Codificador necessário Nenhum Um codificador de vídeo funcionando
Quadros extras no arquivo Até um intervalo entre quadros-chave Nenhum

O que define o número no seu arquivo

O intervalo entre quadros-chave é definido por quem codificou o arquivo. Exportações pensadas para streaming costumam usar um ou dois segundos, porque um player que salta para um ponto do stream enfrenta exatamente a mesma restrição que um cortador. O padrão do x264 é 250 quadros, e os gravadores de tela muitas vezes usam intervalos ainda maiores, porque uma área de trabalho estática comprime tão bem que os quadros-chave parecem caros. Depois que o arquivo existe, o cortador não pode fazer nada além de medir e avisar, e é por isso que nossa ferramenta procura o quadro-chave real para o ponto que você definiu e mostra a diferença antes que você clique no botão.