Criar miniatura a partir do vídeo

10

Como posso fazer uma captura simples de um vídeo? De preferência, a partir da linha de comando?

Idéia: tire nove fotos por nove vezes (na linha do tempo) e salve-as como JPGs

Exemplo:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

Qual é o melhor programa para fazer isso? Existe algum programa de código aberto?

    
por Siga 26.01.2011 / 16:05

3 respostas

5

O

ffmpeg é uma excelente ferramenta de código aberto para manipular vídeos, incluindo a extração de quadros.

Para extrair um único quadro de timestamp específico, você pode usar o comando like

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r é framerate. Você também pode usar o comando como

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

para obter um quadro a cada um minuto (considerando o vídeo a 24FPS). O% 05d significa que o número ordinal de cada imagem em miniatura deve ser formatado usando 5 dígitos.

Se você quer combinar imagens como montagem (sua grade), você pode usar o imagemagick depois de extrair quadros usando o ffmpeg.

    
por 26.01.2011 / 18:30
1

Não é um programa de linha de comando, mas você também pode usar o qframecatcher .

Para o ubuntu / debian, os requisitos são:     sudo apt-get instala o libqt4-dev libxine-dev build-essential

wget http://download.berlios.de/qframecatcher/qframecatcher-0.4.1.tar.gz
tar xzf qframecatcher-0.4.1.tar.gz
cd qframecatcher/src
qmake
make
./qframecatcher

Fonte: link

    
por 11.10.2012 / 08:28
0

Meu caso de uso é apenas uma miniatura de um vídeo, apenas um único arquivo para usar como um pôster da tag <video> . Então, qual seria uma maneira rápida de fazer isso?

Com ffmpeg , você pode fazer isso:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

Isso fornecerá o quadro próximo ao segundo 123 do video.mp4 salvo como poster.jpg .

O problema, como você pode ver, é que precisamos saber qual segundo é o certo.

Para manter nossas dependências baixas, usaremos o próprio ffmpeg para isso:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])//g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25% do vídeo parece ser uma escolha comum, mas você também pode obter 33% ou 50%.

Aqui está um script que faz isso .

    
por 27.06.2015 / 08:35