it-swarm-pt.tech

Como converter vídeo em imagens?

Como posso converter um arquivo de vídeo para uma seqüência de imagens, por exemplo, um quadro a cada N segundos. O mplayer ou o ffmpeg podem fazer isso? Eu usei o MPlayer para pegar screenshots manualmente, mas eu gostaria de automatizar isso para um longo vídeo.

68
Liam
mplayer -vo jpeg -sstep 5 file.avi

salvará um quadro como um arquivo jpeg a cada 5 segundos.

No entanto, ele não irá parar no final do arquivo, ele continuará produzindo cópias do último quadro. Para evitar isso, encontre a duração do vídeo em segundos, usando outro player ou com o mplayer:

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

e procure por uma linha como "ID_LENGTH = 147.00".

Subtraia 2 do comprimento e use esse valor para -endposoption. Por exemplo, para um vídeo de 147 segundos:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
27
Liam

É muito simples com o ffmpeg, e pode produzir um quadro a cada N segundos sem script extra. Para exportar como uma seqüência de imagens, use myimage_%04d.png ou similar como a saída. O bit %0xd é convertido em um inteiro preenchido com zero x dígitos long - o exemplo que eu dei obtém a saída como myimage_0000.png myimage_0001.png etc. Você pode usar muitos formatos de imagem estática, png, jpeg, tga, qualquer coisa (veja ffmpeg -formats para uma lista completa).

Ok, para exportar como uma seqüência de imagens, podemos usar um formato de imagem como a saída com um nome de arquivo sequencial, mas não queremos exportar todos os quadros. Então, simplesmente altere a taxa de quadros da saída para o que quisermos usando a opção -r n, em que n é o número de quadros por segundo. 1 frame por segundo seria -r 1, um frame a cada quatro segundos seria -r 0.25, um frame a cada dez segundos seria -r 0.1 e assim por diante.

Então, para juntar tudo, é assim que se olha para salvar um quadro de input.mov a cada quatro segundos para output_0000.png, output_0001.png etc .:

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

Altere o% xd para quantos dígitos você precisar, por exemplo, se o comando criar mais de 10.000 quadros, altere o %04d para %05d. Isso também funciona para arquivos de entrada que são seqüência de imagens. Leia mais aqui .

Usuários do Windows: Na linha de comando, use %

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

Em scripts CMD e BAT use %%

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

Não use apenas um % em scripts e não use %% na linha de comando. Ambas as situações geram um erro.

66
stib

Com ffmpeg , você pode fazer o seguinte:

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

Esse comando gera uma miniatura JPG de 320 × 240 no quarto segundo do vídeo. Coloque isso em um script que mude o horário e o nome do arquivo e pronto.

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

11
Nifle

Se você está atrás de uma folha de contato e se você está trabalhando com um SO similar ao Unix, você pode usar este script elaborado, chamado até o ponto Folha de contato de vídeo * NIX , curta vcs =.

Em segundo plano, ele também usa ffmpeg (por padrão) ou mplayer, portanto, pode lidar com muitos formatos de vídeo. Ele automatiza o processo de captura de imagens estáticas do filme e as compõe em uma imagem com algum cabeçalho e rodapé. Você pode escolher por exemplo quantas capturas você 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 o lista completa de opções de linha de comando para alguns outros ajustes.

Aqui está um exemplo de folha de contato, tirada da página inicial :

enter image description here

8
mpy

Com o VLC 1.1.0 e superior, você 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 salva 1 de cada 24 frames (--scene-ratio = 24), começando às 00:00:10 e terminando às 00:00:11.

Apenas testei e confirmei que isso funciona com o VLC 2.0.3 em uma nova instalação do Windows 8 (não tenho nenhum plug-in de vídeo ou software adicional).

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

7
Michael

VirtualDub pode fazer isso por você

File -> Export -> Image sequence

enter image description here

2
Shevek

Você também pode tentar isso

da linha de comando do VLC ...

vlc "C:\SEU arquivo\caminho\arquivo.avi" -V imagem --image-out-prefix = capname --image-out-ratio = 60

file.avi é o vídeo que você deseja capturar, capname é o prefixo das imagens salvas, você pode querer brincar com a proporção (60 significa que 1 de 60 imagens é capturada) Você pode adicionar mais comandos, por exemplo O jpeg --image-out-format salvará seus limites como jpegs em vez de pngs, --snapshot-path permite que você escolha onde salvar seus limites.

fonte acima

1
Nifle

Você pode pular quadros no VirtualDub. Basta usar a opção "Decimar por" localizada no menu Vídeo -> Taxa de quadros. Por exemplo, se você definir "Decimate By 100", em seguida, use File -> Export -> Sequência de imagens, ele salvará somente a cada 100 quadros.

1
Alex