Retirar imagens fixas de um vídeo — e porque parecem mais moles do que o vídeo
Publicado a 10/08/2026 · 12 min de leitura · Ferramentas de ficheiros
Daniel Okonkwo — Programador front-end e redator de Tecnologia na OneKitly
Desempenho web · Formatos de ficheiro
Verificado a partir de 4 fontes
O extrator de fotogramas corre ffmpeg dentro do seu navegador e constrói um de três comandos. Um fotograma: -ss <segundos> -i <ficheiro> -frames:v 1 -q:v 2. O salto fica antes da entrada, portanto o ffmpeg vai ao fotograma-chave anterior mais próximo e descodifica em frente até ao seu instante. Um número fixo de fotogramas: -i <ficheiro> -vf fps=<número a dividir pela duração> -frames:v <número>, que os reparte de forma regular por todo o clipe. Um fotograma a cada N segundos: -i <ficheiro> -vf fps=<1 a dividir por N> -frames:v <número>. O JPG é escrito com -q:v 2, o segundo melhor degrau da escala MJPEG que vai de 2 a 31; o PNG não leva indicador de qualidade nenhum, porque é sem perdas. Seja qual for o modo, a ferramenta para aos 60 fotogramas e di-lo no ecrã antes de começar. Duas coisas antes de confiar na imagem. Primeira: um fotograma não é uma fotografia. O vídeo guarda uma imagem completa só nos fotogramas-chave, em geral um a cada uma a dez segundos, e reconstrói tudo o que fica pelo meio a partir de listas de diferenças. Tire um fotograma do meio dessa série e obtém a reconstrução do descodificador, mais mole e mais quadriculada do que uma foto à mesma resolução; os fotogramas-chave são a exceção e são de facto nítidos. Segunda: os botões de largura são tetos, não alvos. Tornam-se scale=w='min(W,iw)':h=-2, pelo que um botão quer dizer «no máximo esta largura»: peça menos do que a origem e obtém-no, peça mais e o fotograma volta ao seu próprio tamanho. Um clipe vertical de 1080x1920 a que se pedem 1280 sai em 1080x1920, intacto, porque ampliar um fotograma não inventa nada e só engorda o ficheiro.
Três comandos escondem-se atrás de três botões: um fotograma num instante dado, um número fixo repartido pelo clipe, ou um a cada N segundos. Eis os argumentos exatos, o teto de 60 fotogramas e a razão por que um fotograma tirado do meio de um clipe comprimido nunca será tão nítido como um fotograma-chave.
Três botões, três comandos ffmpeg diferentes
A interface oferece um número de fotogramas, um intervalo ou um único instante, e cada um monta um comando diferente. «Um número de fotogramas» divide o número que escreveu pela duração do clipe e passa o resultado ao filtro fps: peça 12 fotogramas de um clipe de 6 segundos e o filtro fica fps=2.000000, com -frames:v 12 para o parar aí. «A intervalo regular» inverte antes o intervalo — um fotograma a cada 5 segundos dá fps=0.200000 — e calcula o número a partir da duração. «Um só fotograma» salta o filtro por completo e usa -ss antes da entrada com -frames:v 1.
Essa colocação conta mais do que parece. Pôr -ss antes de -i permite ao ffmpeg saltar diretamente para um ponto de busca em vez de descodificar o ficheiro todo até ao seu instante, o que é a diferença entre uma fração de segundo e uma espera longa num clipe grande. Um conselho antigo diz que um salto na entrada só é preciso ao fotograma-chave; deixou de ser verdade há anos, e esta versão salta com precisão por omissão quando transcodifica: descodifica o troço curto entre o ponto de busca e o seu instante e deita-o fora. O fotograma que vê no cursor de pré-visualização é o que obtém.
Um fotograma não é uma fotografia
Todo o codec de vídeo moderno guarda imagens completas apenas de vez em quando. São os fotogramas-chave, e tudo o que fica entre eles é escrito como instruções: este bloco moveu-se quatro píxeis para a esquerda, aquela zona é igual à anterior, este pedaço mudou nestas pequenas quantidades. Uma gravação de uma hora a 30 fotogramas por segundo contém 108 000 fotogramas mas talvez só uns milhares de imagens completas. Quando pede o fotograma aos 47,3 segundos, o descodificador procura o último fotograma-chave anterior e repete todas as instruções desde aí para reconstruir o que deveria aparecer.
A reconstrução é fiel o bastante para se ver e dececionante para congelar. Como o codificador gastou os seus bits no que muda, um fundo parado que não é refrescado há dois segundos carrega dois segundos de aproximação acumulada. Um desfoque de movimento que se lê como movimento a 30 fotogramas por segundo lê-se como uma mancha quando se para nele. E qualquer bloco que o codificador decidiu que ninguém olharia de perto — zonas escuras, zonas desfocadas, panorâmicas rápidas — é exatamente onde o quantificador poupou. É por isso que um fotograma tirado de um clipe muito comprimido parece mais mole do que uma fotografia da mesma cena com a mesma contagem de píxeis.
Os fotogramas-chave são a exceção e vale a pena procurá-los. Se a imagem importa — uma matrícula, um rosto, um marcador — extraia vários fotogramas à volta do instante em vez de um. Numa série de dez fotogramas seguidos, um costuma ser um fotograma-chave ou estar perto, e vai ver-se claramente mais limpo do que os vizinhos. Os modos de intervalo e de número facilitam isso: nunca deixam apontar um fotograma-chave diretamente, mas uma amostragem suficientemente densa acaba por cair num.
Os botões de largura são tetos, não alvos
Quatro botões oferecem Original, 640, 1280 e 1920. Escolha um e a cadeia de filtros recebe scale=w='min(W,iw)':h=-2, que limita a largura a esse número e deixa o ffmpeg calcular uma altura que mantenha a forma, arredondada ao par mais próximo. A palavra que conta é «limita». Num clipe de 1920x1080 o botão 1280 dá 1280x720, exatamente o esperado. Num clipe vertical de 1080x1920 o mesmo botão dá 1080x1920 — a origem, intacta — porque 1280 é mais largo do que o clipe e a ferramenta fica com o menor dos dois.
Esse teto vale a pena porque ampliar um fotograma não traz nada. O aumento de escala não inventa detalhe: interpola, portanto a imagem fica maior e mais pesada sem ficar mais nítida — mais mole, aliás, porque a interpolação alisa o pouco detalhe que sobreviveu à compressão de vídeo. Sem o teto os botões leem-se como alvos, e um clipe vertical a que se pediam 1920 saía em 1920x3414: mais do triplo dos píxeis da origem, todos adivinhados. Se quer uma imagem maior do que o clipe contém, a resposta não está aqui — está numa fonte gravada com mais resolução.
Sessenta fotogramas — e o teto não quer dizer o mesmo nos dois modos
A ferramenta não produz mais de 60 fotogramas de uma vez, e di-lo antes de começar: peça 500 e a linha sob os botões de modo passa a 60 e acrescenta um aviso. Até aí, honesto. O que o aviso não diz é que o teto se comporta de maneira diferente nos dois modos por lote, e essa diferença decide se obtém um sobrevoo de todo o vídeo ou apenas do seu início.
No modo «número», a taxa de amostragem vem da duração: 60 fotogramas de uma gravação de vinte minutos dá fps=0.050000, portanto caem de vinte em vinte segundos do princípio ao fim. No modo «intervalo», a taxa vem do seu intervalo e o número é só um sinal de paragem: um fotograma por segundo nessa mesma gravação de vinte minutos dá fps=1.000000 com -frames:v 60, e o ffmpeg para ao fim de sessenta segundos de imagem. Obtém o primeiro minuto do vídeo, sessenta vezes, e nada dos dezanove restantes. O número no ecrã diz a verdade sobre quantos ficheiros vai ter; não diz nada sobre de onde vêm. Se quer cobertura, use o modo «número».
Mais uma coisa que a interface conta mal sobre si própria. A nota sob os botões afirma que cada fotograma é uma descarga separada e que não há arquivo para os agrupar. Há: o botão «Descarregar tudo» reúne os fotogramas em images-video.zip sempre que haja mais de um, e pergunta ao navegador uma só vez. Os botões de descarga individuais sob cada miniatura servem para quando quer dois fotogramas em sessenta, não porque a ferramenta não saiba comprimir.
Para que servem realmente os fotogramas
Três usos cobrem quase tudo aquilo para que se extraem fotogramas. A folha de contacto: doze a vinte e quatro fotogramas repartidos por todo o clipe, impressos pequenos, é a forma mais rápida de encontrar onde acontece algo numa hora de imagem sem andar a arrastar. O modo «número» com a largura em 640 é feito para isso. A miniatura: as plataformas julgam um vídeo pela sua primeira imagem fixa, e a escolha automática é quase sempre pior do que a sua. Use o modo de um só fotograma, arraste o cursor até a pré-visualização mostrar o fotograma que quer, e extraia à largura Original. E a prova: um instante que é preciso mostrar a alguém que não vai ver o vídeo.
Para esse terceiro uso, escolha PNG e não mexa na largura. Um JPG a -q:v 2 é muito bom, mas é uma segunda geração com perdas por cima da compressão do próprio vídeo, e quem examinar a imagem de perto estará a olhar para artefactos de dois codificadores em vez de um. O PNG guarda exatamente o que o descodificador produziu, os ficheiros pesam cinco a quinze vezes mais, e nada é acrescentado. A imagem continuará a ser uma reconstrução e não uma fotografia — nenhum formato resolve isso — mas ao menos essa reconstrução será a única aproximação que contém.
| Botão de largura | De 1080×1920 (telemóvel, vertical) | De 1920×1080 (horizontal) | De 3840×2160 |
|---|---|---|---|
| Original | 1080×1920 inalterado | 1920×1080 inalterado | 3840×2160 inalterado |
| 640 px | 640×1138 — menos 65 % de píxeis | 640×360 — menos 89 % de píxeis | 640×360 — menos 97 % de píxeis |
| 1280 px | 1080×1920 inalterado — limitado | 1280×720 — menos 56 % de píxeis | 1280×720 — menos 89 % de píxeis |
| 1920 px | 1080×1920 inalterado — limitado | 1920×1080 inalterado | 1920×1080 — menos 75 % de píxeis |
Perguntas frequentes
- Devo escolher JPG ou PNG?
- JPG para tudo o que vá olhar, partilhar ou colar num documento: a ferramenta escreve-o a -q:v 2, o segundo melhor ajuste numa escala que vai de 2 a 31, e os artefactos que acrescenta são muito mais discretos do que os que o vídeo já traz. PNG para tudo o que vá ser examinado, ampliado ou discutido, porque não acrescenta nada: guarda a saída do descodificador byte a byte. Conte com ficheiros PNG cinco a quinze vezes maiores do que o JPG equivalente. Não há controlo de qualidade para nenhum dos dois: o nível JPG está fixado no código e o PNG não tem nível a regular.
- Porque é que o meu fotograma sai mais desfocado do que o vídeo parecia?
- Porque o movimento esconde a compressão e a imobilidade revela-a. A 30 fotogramas por segundo, o seu olho integra trinta aproximações por segundo e lê o resultado como uma cena nítida; pare numa delas e só resta a aproximação. Além disso, o fotograma que escolheu provavelmente não é um fotograma-chave: é uma reconstrução erguida sobre uma cadeia de instruções de diferença. Experimente extrair uma rajada curta à volta do mesmo instante e compare: um será claramente mais limpo, e esse está num fotograma-chave ou muito perto.
- Posso obter absolutamente todos os fotogramas do vídeo?
- Numa só vez não: o teto são 60 fotogramas, um pouco mais de dois segundos de imagem a 25 fotogramas por segundo. Esse teto não é arbitrário — sessenta imagens em plena resolução já representam dezenas ou centenas de megabytes retidos ao mesmo tempo na memória do navegador, e um separador tem muito menos espaço do que um programa de secretária. Se precisa mesmo de todos os fotogramas de uma passagem curta, corte primeiro o clipe nos segundos que lhe interessam e depois use o modo de intervalo com um intervalo igual à duração de um fotograma — um a dividir pela frequência do clipe, ou seja 0,04 para um clipe a 25 fotogramas por segundo. Pedir menos não traz nada: o filtro fps não tem fotogramas a mais para dar e limita-se a repetir os que tem. Continuará a parar aos sessenta, mas serão sessenta fotogramas seguidos e não uma amostra.
- O meu vídeo é enviado para algum lado?
- Não. O descodificador é o ffmpeg compilado para WebAssembly e servido pelo próprio site em vez de por uma rede de distribuição, e corre dentro do separador. O seu ficheiro é lido para a memória da própria página, processado aí, e os fotogramas resultantes são-lhe devolvidos como descargas. Nada sai da máquina, e é também por isso que um clipe longo demora: uma única linha de execução do navegador faz um trabalho que um computador de secretária repartiria por todos os seus núcleos.
- Porque é que um fotograma por segundo só me dá o início de um vídeo longo?
- Porque o modo de intervalo fixa a taxa de amostragem e depois para no teto de 60 fotogramas. Um fotograma por segundo é fps=1.000000, e -frames:v 60 para o ffmpeg depois do sexagésimo fotograma de saída, ou seja aos sessenta segundos da origem. Tudo o que vem depois do primeiro minuto nunca é alcançado. O modo «número» não se comporta assim: deduz a taxa da duração total, portanto 60 fotogramas de uma gravação de duas horas dão fps=0.008333 e caem de dois em dois minutos do princípio ao fim. Use o modo «número» sempre que queira ver o vídeo inteiro, e o de intervalo só para o início ou para um clipe já cortado.
Artigos que podem interessar-lhe
Todos os guias →Ferramentas relacionadas
Estas quatro ferramentas correm ffmpeg no seu navegador: nada é enviado, e nada aqui depende de um servidor se manter de pé. O comportamento descrito foi lido no código de cada componente e depois confirmado executando os mesmos conjuntos de argumentos contra a compilação de ffmpeg que o site inclui, pelo que vale para a versão em linha hoje e não para o ffmpeg em geral. Os tamanhos e os valores de intensidade sonora vieram de ficheiros de teste sintéticos e curtos; o seu próprio material dará outros números com os mesmos comandos. Onde o texto no ecrã de uma ferramenta e o seu código se contradizem, este artigo segue o código.
Fontes
Detetaste um erro neste artigo?