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.