Eu faço a extração de cenas de vídeos usando vlc
para o linux. Se você não tiver, use
apt-get install vlc
para instalá-lo. Uma vez instalado, você pode usar uma variação da seguinte linha de comando para extrair o (s) quadro (s) do seu vídeo. O formato de imagem padrão é png
e é bom para o meu propósito. Se você insistir em gif
images, sugiro instalar imagemagick
para conversões de formato de imagem. Aqui está o comando que extrai os quadros:
cvlc ${videofile} \
--video-filter=scene \
--vout=dummy \
--start-time=${start-sec} --stop-time=${end-sec} \
--scene-ratio=1 --scene-prefix=${prefix} \
--scene-path=${MyStorePath} \
vlc://quit
onde
videofile
is an mp4 format video. Other formats might be possible but didn't test
start-sec
is where you want your frame grab starts from, in seconds from the beginning
end-sec
is where you want your frame grab ends, in seconds from the beginning. Must be greater thanstart-sec
prefix
is the prefix of the file names for captured images.
MyStorePath
is the path where you want to store captured images.
Este comando ajuda você a descobrir a duração do vídeo:
ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
A saída está no formato HH:MM:SS.xx
. para converter isso em tamanho de vídeo em segundos, eu uso
l=$(ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//)
h=$(echo $l|cut -d: -f1)
m=$(echo $l|cut -d: -f2)
s=$(echo $l|cut -d: -f3|cut -d"." -f1)
(( hh=$h*3600 ))
(( mm=$m*60 ))
(( LengthSeconds=$hh+$mm+$s ))
neste ponto, você pode manipular a variável LengthSeconds
para determinar automaticamente os horários de início e término. Infelizmente, para que meu comando vlc
funcione, você precisa especificar uma fatia de tempo para extrair quadros de.