LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   multiple (equidistant) thumbnails for videos (https://www.linuxquestions.org/questions/linux-software-2/multiple-equidistant-thumbnails-for-videos-361072/)

philippeP 09-07-2005 10:20 AM

multiple (equidistant) thumbnails for videos
 
Hi,

I wrote a small shell script to obtain an HTML page which nicely presents a set of pictures with thumbnail navigation, etc.
I would like to extend my program to treat videos. I know how to extract a single frame (or consecutive frames) of a video using mplayer/mencoder. However since a single thumbnail may not be enough to distinguish videos easily, I would have liked to show 5-10 thumbnails for each video, hence showing some progression of the movie.

The idea would be to have a single command line, in which I give as input a video file and the numbers of frames I want. Independently of the video's length, the program should find out which frame numbers to grab (e.g. video is 2min long with 25fps so those are 3000 frames. If I want 5 thumbnails, than the the program would output the frames numbered 1, 750, 1500, 2250 and 3000).

It doesn't seem like ffmpeg or transcode offer any better option than mplayer, but this could be because those tools offer so many options that I missed the one I need.


Any idea how this can be done at best? Is there a tool which would do something similar?

If not, then how would you do this at best? ("tcprobe" -> get number of frames, then do some shell(perl?) programming to obtain the desired frame numbers and finally call mplayer as many times as I have frames to extract).

Thanks for a possible hint/help.
PhilippeP

PS: I don't know perl, so another solution would be nice ;-)

Snowbat 09-08-2005 02:16 PM

Parsing the output of tcprobe seems a good idea but it won't show the total number of frames on some files I have here.

You could use mplayer to dump the frame stats to a text file and then parse the last line of that:
mplayer -benchmark -nosound -vo null Chap.mpg | grep V: > vframes.txt

Edit: It seems there are no newline characters so there is no last line as such. Parsing the last 128 bytes works for the file I'm testing here:
mplayer -benchmark -nosound -vo null Chap.mpg | grep 'V:' | tail -c 128 | cut -d '/' -f2 | cut -d ' ' -f1 > vframes.txt

Snowbat 09-09-2005 03:25 AM

In the end I didn't bother with frames but used file size and mplayer -sb

Code:

#!/bin/sh

if [ $# -ne 2 ]
then
        echo "Usage: `basename $0` number /path/to/file"
  exit 1
fi

if [ $1 -gt 0 ] && [ $1 -lt 100 ]
then
        echo "Number accepted"
else
        echo "Unrealistic number"
        exit 1
fi

if test -f $2
then
        echo "Media file found"
else
        echo "File $2 not found"
        exit 1
fi

if ls *.jpg
then
        echo "Delete .jpg files in current directory first"
        exit 1
fi
FILESIZE=`ls -l $2 | awk '{print $5}'`
FRAMESREQ=`expr $1 + 1`
COUNT=1
while [ $COUNT -lt $FRAMESREQ ]
do
      OFFSET=`expr $FILESIZE / $FRAMESREQ \* $COUNT`
      echo $COUNT $OFFSET
      mplayer -sb $OFFSET -vo jpeg -frames 2 $2
      mv 00000001.jpg $COUNT.jpg
      COUNT=`expr $COUNT + 1`
done

exit 0


docmattman 07-10-2008 04:33 PM

What is the command to use for extracting multiple consecutive images from a video file uses FFMPEG? I can extract 1 frame at a time, but I need to extract multiple consecutive frames.


All times are GMT -5. The time now is 08:00 PM.