Generator filmowych miniaturek
Internet 11th Jan 2012
Często zamieszczając na stronie streszczenie jakiegoś filmu brakowało mi narzędzia, które było by w stanie zamiast zrzutu pojedynczej klatki wygenerować mi miniaturkę składającą się przynajmniej z 4 zrzutów pochodzących z różnych części filmu. W repozytorium znalazłem tylko mplayer-snapshot, ale nijak nie działało. Ponieważ potrzebowałem tylko 4 zrzuty szybko skleiłem prosty skrypt Basha wykorzystujący FFMpegThumbnailer (powinien być w każdym repo) do robienia zrzutów i montage (pakiet imagemagick) do ich klejenia.
#!/bin/sh
usage()
{
cat << EOF
usage: $0 [options] -i MOVIE-FILE
OPTIONS:
-h show this message
-i input movie file
-o output JPG file name
-a percentage or absolute time hh:mm:ss, default 20
-b percentage or absolute time hh:mm:ss, default 40
-c percentage or absolute time hh:mm:ss, default 60
-d percentage or absolute time hh:mm:ss, default 80
-n number of columns
EOF
}
FILE=
OUT=
COLUMNS=2
T1=20
T2=40
T3=60
T4=80
while getopts "hi:o:a:b:c:d:n:" OPTION
do
case $OPTION in
h)
usage
exit 1
;;
i)
FILE=$OPTARG
OUT=${OPTARG}.jpg
;;
o)
OUT=$OPTARG
;;
a)
T1=$OPTARG
;;
b)
T2=$OPTARG
;;
c)
T3=$OPTARG
;;
d)
T4=$OPTARG
;;
n)
COLUMNS=$OPTARG
;;
?)
usage
exit
;;
esac
done
if [[ -z $FILE )
then
usage
exit 1
else
ffmpegthumbnailer -t $T1 -s 400 -o /tmp/thumb-1.jpg -i $FILE
ffmpegthumbnailer -t $T2 -s 400 -o /tmp/thumb-2.jpg -i $FILE
ffmpegthumbnailer -t $T3 -s 400 -o /tmp/thumb-3.jpg -i $FILE
ffmpegthumbnailer -t $T4 -s 400 -o /tmp/thumb-4.jpg -i $FILE
montage -mode concatenate -tile ${COLUMNS}x -adjoin /tmp/thumb*.jpg $OUT
rm /tmp/thumb*.jpg
fi
Dla przykładu weźmy trailer Hobbita. Po pobraniu go na dysk i zapisaniu jako hobbit.flv wystarczy odpalić skrypt i wskazać plik:
movie-thumbnails.sh -i hobbit.flv
Skrypt powinien wypluć plik o nazwie hobbit.flv.jpg:
Jak to jednak przy generowaniu miniaturek bywa czasami zdarza się złapać jakaś niepożądana klatkę. Aby ją wymienić należy wskazać którą z czterech klatek wymieniamy (a,b,c czy d) oraz podać procentowo lub dokładnie (np. 00:03:28) czas filmu, z którego ma zostać pobrana.
Domyślnie:
a - 20%
b - 40%
c - 60%
d - 80%
Czyli jeżeli chcemy wymienić np. miniaturkę 2 na coś jaśniejszego wystarczy zrobić:
movie-thumbnails.sh -i hobbit.flv -b 27
wynik:
Używając parametru -n możemy sterować też ilością kolumn:
movie-thumbnails.sh -i hobbit.flv -n 1
movie-thumbnails.sh -i hobbit.flv -n 4
Na koniec parametrem -o sterujemy nazwą pliku wyjściowego
movie-thumbnails.sh -i hobbit.flv -o hobbit.jpg
Linki
- movie thumbnailer (mtn) - podobny generator
- montage - instrukcja sklejania zdjęć
- FFMpegThumbnailer - instrukcja pobierania zrzutów z filmu
Komentarze z jogger.pl
Fajne, z pewnością przyda się kiedyś. Dzięki.
ja ostatnio z VideoCut'a korzystałem, poza tym ze w wersji która miałem nie potrafił zapisywac do jpg, tylko do png (bug naprawiony w nowych wersjach) to jest ok
Dostosowałem trochę oryginalny skrypt do własnych celów (opcja QUALITY=10, obsługa plików ze spacjami, /bin/bash żeby działało na moim głupim Ubuntu)
https://gist.github.com/1599880
Zrobiłem też generator HTML-a (tworzy miniaturki ze wszystkich filmów .avi w bieżącym katalogu i umieszcza w movie-index.html razem z linkami do imdb.org). Może komuś się przyda ;)
https://gist.github.com/1599889