81 lines
2.3 KiB
Markdown
81 lines
2.3 KiB
Markdown
---
|
|
author: einar
|
|
comments: true
|
|
date: 2007-10-16 20:44:46+00:00
|
|
layout: page
|
|
slug: script-to-make-captures-of-movie-files
|
|
title: Script to make captures of movie files
|
|
wordpress_id: 312
|
|
categories:
|
|
- General
|
|
- Linux
|
|
tags:
|
|
- bash
|
|
- Linux
|
|
- python
|
|
- script
|
|
---
|
|
|
|
The other day I was thinking about how to make screencaps for the anime I watch. Windows users often use [Media Player Classic](http://sourceforge.net/projects/guliverkli/), 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](http://freshmeat.net/projects/video-contact-sheet/), 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](http://mplayerhq.hu) 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]
|