2010-04-27 10:05:36 +0000 2010-04-27 10:05:36 +0000
72
72

Como extrair um quadro de um vídeo a cada N segundos para uma imagem?

Como posso converter um ficheiro de vídeo para uma sequência de imagens, por exemplo um quadro a cada N segundos. Pode o mplayer ou ffmpeg fazer isto? Utilizei o MPlayer para obter capturas de ecrã manualmente, mas gostaria de automatizar isto para um vídeo longo.

Respostas (8)

73
73
73
2014-03-15 09:47:20 +0000

É muito simples com o ffmpeg, e can sai um frame a cada N segundos sem guião extra. Para exportar como uma sequência de imagem basta usar myimage_%04d.png ou semelhante como saída. O %0xd bit é convertido para um inteiro de x inteiro de myimage_0000.png dígitos - o exemplo que dei obtém a saída como

  • myimage_0001.png,
  • myimage_0002.png,
  • ffmpeg -formats -r n

Pode usar muitos formatos de imagem estática, png, jpeg, tga, o que quer que seja (ver n para uma lista completa).

Ok então agora sabemos como exportar o filme como uma sequência de imagens, mas digamos que não queremos exportar cada frame?

O truque é simplesmente mudar a taxa de frames da saída para o que quisermos utilizando a opção -r 1 onde -r 0.25 é o número de frames por segundo. 1 frame por segundo seria -r 0.1, um frame a cada quatro segundos seria input.mov, um frame a cada dez segundos seria output_0000.png e assim por diante. , Assim, para juntar tudo isto, seria assim que pouparia um frame de output_0001.png a cada quatro segundos a -r 0.25, -i input.mov etc.:

ffmpeg -i input.mov -r 0.25 output_%04d.png

Note que a opção %04d vai após a parte %05d, porque está a controlar a taxa de frames da saída. Se a colocar antes da entrada, trataria o ficheiro de entrada como se tivesse a taxa de fotogramas especificada.

Mude a %xd para o número de dígitos que precisar, por exemplo, se o comando criar mais de 10.000 fotogramas mude a % para ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png. Isto também funciona para ficheiros de entrada que são sequência de imagens. Leia mais aqui .

Usuários do Windows : Na linha de comando usar %%

exemplo: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

Em CMD e BAT Scripts usar %%

exemplo: %

Então duplo 0x6& em scripts, e simples 0x6& na linha de comando interactiva. Enganar-se em qualquer uma das situações gerará um erro.

28
28
28
2010-04-28 10:08:07 +0000
mplayer -vo jpeg -sstep 5 file.avi

guardará uma moldura como ficheiro jpeg a cada 5 segundos.

Contudo, não irá parar no fim do ficheiro, continuará a produzir cópias do último frame. Para evitar isto, encontrar a duração do vídeo em segundos, utilizando outro leitor, ou com o mplayer:

mplayer -vo null -ao null -frames 0 -identify file.avi

e procurar uma linha como “ID_LENGTH=147.00”.

Subtrair 2 do comprimento, e utilizar este valor para a opção -endpos. Por exemplo, para um vídeo de 147 segundos:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
11
11
11
2010-04-27 11:41:07 +0000

Com ffmpeg , pode fazer o seguinte:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

Este comando gera uma miniatura JPG de 320×240 no 4º segundo do vídeo. Ponha isto num script que muda a hora e o nome do ficheiro e está feito.

Mais informações: Criar uma imagem em miniatura a cada X segundos do vídeo

8
8
8
2013-06-04 08:15:55 +0000

Se estiver atrás de uma espécie de folha de contacto* e se estiver a trabalhar com um SO tipo Unix, pode usar este elaborado guião, chamado ao ponto Folha de contacto vídeo *NIX , curto vcs* .

No fundo, também usa ffmpeg (por defeito) ou mplayer, podendo assim lidar com muitos formatos de vídeo. Automatiza o processo de captura de imagens fixas do filme e compõe estas para uma imagem com algum cabeçalho e rodapé. Pode escolher, por exemplo, quantas capturas deseja ou, alternativamente, as diferenças de tempo entre elas.

Por um intervalo de 10 minutos, a invocação é assim:

vcs -i 10m input.avi

Verifique a lista completa de opções de linha de comando para algumas outras afinações.

Aqui está um exemplo de folha de contacto, retirada da página inicial :

7
7
7
2012-09-11 03:17:14 +0000

Com VLC 1.1.0 e superior, pode usar o filtro de vídeo de cena:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

O acima indicado guarda 1 de cada 24 fotogramas (–scene-ratio=24), começando às 00:00:10 e terminando às 00:00:11.

Apenas testado e confirmado que funciona com VLC 2.0.3 numa nova instalação do Windows 8 (não tenho plugins de vídeo ou software adicional).

Documentação completa: http://wiki.videolan.org/How_acriarminiaturas

2
2
2
2010-04-27 10:13:07 +0000

(http://www.virtualdub.org/) pode fazer isto por si

File -\i> Export -\i> Image sequence

1
1
1
2010-04-27 16:22:46 +0000

Pode também tentar este

a partir da linha de comando VLC…

& > vlc “C:\YOUR`file\file.avi” -V image –image-out-prefix=capname –image-outratio=60

& > file. avi é o vídeo que pretende capturar, capname é o prefixo das imagens guardadas, pode querer brincar com o rácio (60 significa que 1 em 60 imagens é capturada) Pode adicionar mais comandos, por exemplo –image-out-format jpeg irá guardar as suas caps como jpegs em vez de pngs, –snapshot-path permite escolher onde guardar as suas caps. Fonte do acima

1
1
1
2011-11-30 22:06:24 +0000

Pode saltar frames no VirtualDub. Basta usar a opção “Decimate By” localizada em Video -> Menu Frame Rate. Por exemplo, se definir “Decimate By 100”, então use File -> Export -> Sequência de imagens, irá guardar apenas cada 100º frame.