Como posso converter um arquivo de vídeo em uma sequência de imagens, por exemplo, um quadro a cada N segundos. O mplayer ou o ffmpeg podem fazer isso? Eu usei o MPlayer para capturar capturas de tela manualmente, mas gostaria de automatizar isso para um vídeo longo.
71
Respostas:
É muito simples com o ffmpeg e pode gerar um quadro a cada N segundos sem scripts extras. Para exportar como uma sequência de imagens, use
myimage_%04d.png
ou similar à saída. O%0xd
bit é convertido em um número inteiro preenchido com zerox
- o exemplo que eu dei obtém saída comomyimage_0000.png
,myimage_0001.png
,myimage_0002.png
etc ..
Você pode usar muitos formatos de imagem estática, png, jpeg, tga, o que for (veja
ffmpeg -formats
a lista completa).Ok, agora sabemos como exportar o filme como uma sequência de imagens, mas dizemos que não queremos exportar todos os quadros?
O truque é simplesmente alterar a taxa de quadros da saída para o que quisermos usando a
-r n
opção onden
está o número de quadros por segundo. 1 quadro por segundo seria-r 1
, um quadro a cada quatro segundos-r 0.25
, um quadro a cada dez segundos-r 0.1
e assim por diante.Então, para juntar tudo, é assim que seria possível salvar um quadro a
input.mov
cada quatro segundosoutput_0000.png
,output_0001.png
etc .:Note que a
-r 0.25
opção vai depois a-i input.mov
parte, porque ele está controlando a taxa de quadros da saída . Se você o colocar antes da entrada, ele tratará o arquivo de entrada como se tivesse a taxa de quadros especificada.Altere o% xd para quantos dígitos você precisar, por exemplo, se o comando criar mais de 10.000 quadros, mude
%04d
para%05d
. Isso também funciona para arquivos de entrada que são sequê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
Nos scripts CMD e BAT, use
%%
exemplo:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Portanto, duplique os
%%
scripts e escolha%
a linha de comando interativa. Se errar em qualquer situação, isso gerará um erro.fonte
-r
se quiser exportar todos os quadros? Se eu conheço o FPS do vídeo, acho que insiro isso, mas e se eu não?jpegs
isso, a menos que tenha certeza depng
que é o que deseja. No meu caso,jpeg
s eram cerca de 50kb cada epng
es eram cerca de 2MB.-q:v 1
é uma opção muito útil aqui, como em superuser.com/questions/318845/…irá salvar um quadro como um arquivo JPEG a cada 5 segundos.
No entanto, ele não para no final do arquivo, 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:
e procure uma linha como "ID_LENGTH = 147.00".
Subtraia 2 do comprimento e use esse valor para a
-endpos
opção Por exemplo, para um vídeo de 147 segundos:fonte
mpv --vo=image --sstep=5 movie.mkv
funciona muito bem sem o bug mencionado anteriormente ( mpv é um fork do mplayer) usando o mpv 0.27.0 no Debian.Com
ffmpeg
, você pode fazer o seguinte:Este comando gera uma miniatura JPG de tamanho 320 × 240 no 4º segundo do vídeo. Coloque isso em um script que altera a hora e o nome do arquivo e pronto.
Mais informações: crie uma imagem em miniatura a cada X segundos do vídeo
fonte
-ss position
sinalizador para procurar mais no arquivo?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
antes do-i
para que a busca ocorra antes que o vídeo de entrada seja decodificado. isso deve acelerar. fonteSe você está atrás de um tipo de folha de contato e está trabalhando com um sistema operacional semelhante ao Unix, pode usar este script elaborado, chamado ao ponto Folha de contato de vídeo * NIX , vcs curtos .
Em segundo plano, ele também usa
ffmpeg
(por padrão) oumplayer
, 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 deseja ou, alternativamente, as diferenças horárias entre elas.Por um intervalo de 10 minutos, a chamada é assim:
Verifique a lista completa de opções da linha de comando para ver outros ajustes.
Aqui está um exemplo de folha de contato, retirada da página inicial :
fonte
Com o VLC 1.1.0 e superior, você pode usar o filtro de vídeo de cena:
O exemplo acima salva 1 de cada 24 quadros (--cene-ratio = 24), iniciando às 00:00:10 e terminando às 00:00:11.
Acabei de testar e confirmar que isso funciona com o VLC 2.0.3 em uma nova instalação do Windows 8 (não tenho plug-ins de vídeo ou software adicionais).
Documentação completa: http://wiki.videolan.org/How_to_create_thumbnails
fonte
O VirtualDub pode fazer isso por você
File
->Export
->Image sequence
fonte
Você também pode tentar isso
Fonte acima
fonte
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 "Dizimar por 100" e usar Arquivo -> Exportar -> Sequência de imagens, ele salvará apenas cada centésimo quadro.
fonte