Frame by frame?


#1

Is it possible to do a frame by frame playback?


#2

Hi @00gasman00,

Technically speaking, all playback is done frame by frame by default so I’m not exactly sure what you’re asking for. Can you please reiterate?

Thanks,


#3

Sure!
I critique animation for my university and the students use kaltura to store and share their animation. I also use the animation to critique.

Say I want to review or watch an animation one frame at a time, I’d like to go forward just one frame and go backward just one frame. That way, I can see if they are doing the animation correctly.

Does that make sense?


#4

Hi @00gasman00,

The player has a plugin called “Playback rate selector” which will allow you to play the video at different speeds. However, the lowest [slowest] available speed is 0.5 and I’m not sure that would be slow enough for your needs.

You can download the original video submission and run the ffprobe [part of ffmpeg] command which would detect the scene changes in the video and generate a thumbnail for each new frame. Here is a shell script that would do that:

#!/bin/sh -e
if [ $# -lt 1 ]; then
    echo "Usage: $0 </path/to/vid/file>"
    exit 1
fi
OUTDIR=/tmp/images
BASEDIR=`dirname $0`
VID=$1
mkdir -p $OUTDIR
rm -rf $OUTDIR/*
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=$VID,select=gt(scene\,0.1) " | sed -r 's/.*pkt_pts_time=([0-9.]{8,})\|.*/\1/' >> $OUTDIR/scenes.txt
I=0
while read SCENE_TIME; do
    echo $OUTDIR/${I}_${SCENE_TIME}.jpg
    ffmpeg -nostdin -ss "$SCENE_TIME" -i $VID -vframes 1 -q:v 2 -y $OUTDIR/${I}_${SCENE_TIME}.jpg 2> /tmp/log
    I=`expr $I + 1`
done < $OUTDIR/scenes.txt

Another option would be to use this command:

$ ffmpeg -i /path/to/vid/file -vf select='gt(scene\,0.1)',tile -frames:v 1 /path/to/out/image.png

Which would produce something similar to this:
https://cfvod.kaltura.com/p/2137932/sp/213793200/thumbnail/entry_id/1_6iswpts6/version/100001/width/560