dennogumi/content/post/2007-10-16-script-to-make-captures-of-movie-files.markdown
Luca Beltrame 64b24842b8
All checks were successful
continuous-integration/drone/push Build is passing
Update all posts to not show the header text
2021-01-13 00:05:30 +01:00

2.3 KiB

author categories comments date slug tags title omit_header_text disable_share wordpress_id
einar
General
Linux
true 2007-10-16T20:44:46Z script-to-make-captures-of-movie-files
bash
Linux
python
script
Script to make captures of movie files true true 312

The other day I was thinking about how to make screencaps for the anime I watch. Windows users often use Media Player Classic, which can create a video contact sheet (i.e., a series of captures) out of a movie file. I had two problems with this:

  • The biggest is that it runs on Windows, and I don't use Windows;

  • The frames needed to be manually cropped every time, which was slow.

Therefore, inspired by a video contact sheet script for Linux, I decided to write a small piece of code to make captures. It works rather easy, by taking snapshots every X minutes, where X is an integer number.

The code is here: it requires bash, python (just for checks) and mplayer to work correctly. It should work with every format mplayer suppports. It's hackish, but if you find it useful, let me know.

EDIT: I changed a line (thanks, greg) because this syntax highlighter messes up some formatting.

[code lang='c']

#!/bin/bash

(C) 2007 Luca Beltrame - licensed under the terms of the GPL v2

Simple script to output video frames with MPlayer. It takes the file

and a step argument to indicate how many minutes a capture should

be taken. The step must be an integer!

if [ $# -ne "2" ] then echo "Usage: $0 " exit fi

file=$1 step=$2 i=1

Requires python 2.5

verification=python -c "value = 0 if isinstance($step,float) else 1;print value" echo $verification

if [ $verification -eq "0" ] then echo "Step must be an integer!" fi

length=mplayer -benchmark -ao null -vo null -identify -frames 0 -quiet $file 2>/dev/null | grep ID_LENGTH | cut -f2 -d'='

end=echo $length/60| bc

while [ $i -lt $end ] do minutes="00:"$i":00" name="capture_"$i"min.png"

We take two captures as the first will be always black - mplayer bug?

mplayer -sws 9 -ao null -quiet -benchmark -vo "png:z=0" -frames 2 -ss $minutes "$1" &> /dev/null mv 00000002.png $name rm -f 00000001.png i=$[$i+$step] done

echo "Screenshots saved."

[/code]