1

Тэма: Стварэньне скрыншотаў

Спадарства,

а як лепш дадаваць скрыншоты ?

Я так разумею, што адзіны варыянт - Media Player Classic. Ці існуе нешта пад Linux ?

І яшчэ пытаньне - скрыншоты 4x4(напрыклад http://www.torrent.by/topic/136/) досыць инфармацыйныя. Але яны не адлюстроўваюць якасьць запісу.

Якія скрыншоты лепш выкладаць ?

2

Працяг: Стварэньне скрыншотаў

chtosci
Лепш за ўсё скрыншоты з сапраўдным памерам і з выкладаньнем іх пад спойлер, але на жаль тэг [sp][/sp] тут не працуе.

3

Працяг: Стварэньне скрыншотаў

Я знайшоў як рабіць скрыншоты пад Linux !!! Ну няма ў мяне вінды, няма. wink
Каму спатрэбіцца - SMPlayer, мэню Video/Preview...

4

Працяг: Стварэньне скрыншотаў

chtosci
ну а я рабіў слайдшоў звычайна па-лінуксоваму, з дапамогай скрыпта. Вось ён, знайшоў, нарэшце:

#!/bin/bash

FILE="$1"; # імя файлу

Image_Rows="$2"; # колькасьць радкоў
Image_Columns="$3"; # колькасьць слупкоў
Image_Resolution="$4"; # разрозьненьне выніковага малюнку

# Дзеля "адлову" кадраў
Time_Shift="$5"; # Часовае сумяшчэньне
File_Suffix="$6"; # Суфікс файлу,напрыклад, aaa.avi -> aaa_1.jpg aaa_2.jpg

#+++ У выпадку, калі парамэтры ня вызначаны
if [ "$FILE" = "" ]
then
echo 'Ня вызначаны відэафайл!';
echo 'Выкарыстоўваньне <відэафайл> [колькасьць радкоў] [колькасьць слупкоў] [разрозьненьне выніковага малюнку] [часовае сумяшчэньне] [суфікс выніковага фай$
echo 'Суфікс файлу звычайна лічба. Выніковы файл <відэафайл>_<лічба-суфікс>.jpg';
echo 'Якасьць выніковага jpg-файлу - 100';
exit 1;
fi

if [ "$Image_Rows" = "" ]
then
Image_Rows="3"
fi

if [ "$Image_Columns" = "" ]
then
Image_Columns="3"
fi

if [ "$Image_Resolution" = "" ]
then
Image_Resolution="1024x768"
fi
if [ "$Image_Resolution" = "0" ]
then
Image_Resolution="1024x768"
fi

if [ "$Time_Shift" = "" ]
then
Time_Shift="0"
fi

if [ "$File_Suffix" != "" ]
then
File_Suffix="_$File_Suffix";
fi

#--- У выпадку, калі памер ня вызначаны
FILENAME=${FILE%.*};

# Пераменная INFO захоўвае дадзеныя аб відэа-файле
INFO=`mplayer -msglevel all=0 -identify -nosound -vc dummy -vo null "$1"`;

# Вышыня зыходнага кадру
HEIGHT=`expr "$INFO" : '.*HEIGHT=\([0-9]*\)'`;

# шырыня зыходнага відэа-кадру
WIDTH=`expr "$INFO" : '.*WIDTH=\([0-9]*\)'`;

# колькасьць кадраў
NUM=$(($Image_Rows*$Image_Columns));

# Часовы крок - інтэрвал часу паміж здымкамі
LEN=$((`expr "$INFO" : '.*LENGTH=\([0-9]*\)'`/( $NUM +2)));

#+++ набор кадраў
for kadr in `seq 1 $NUM`
do
echo "Апрацоўка кадраў $kadr з $NUM";
mplayer -msglevel all=0 -nosound -vo jpeg:outdir=/tmp:quality=100 -frames 2 -ss `echo $Time_Shift+$kadr*$LEN|bc` "$1" > /dev/null;
rm /tmp/00000001.jpg;
mv /tmp/00000002.jpg /tmp/"$kadr.jpg";
done
#--- набор кадраў

#+++ Устаўляем кадры
echo Устаўка кадраў...;
Command="convert ";
for i in `seq 1 $Image_Rows`
do
for j in `seq 1 $Image_Columns`
do
kadr=`echo "($i-1)*$Image_Columns+$j"|bc`;
x_pos=$(( ($HEIGHT+10)*($i-1) ));
y_pos=$(( ($WIDTH+10)*($j-1) ));
Command="$Command -page +$y_pos+$x_pos /tmp/$kadr.jpg";

done
done
Command="$Command -background white -mosaic -bordercolor white -border 10x10 -quality 100 /tmp/tmp0.jpg";
$Command;
#--- Устаўляем кадры
cp /tmp/tmp0.jpg /tmp/tmp.jpg

#+++ Выдаленьне часовых файлаў
for kadr in `seq 1 $NUM`
do
rm /tmp/"$kadr.jpg";
done
rm /tmp/tmp0.jpg;
#--- Выдаленьне часовых файлаў

mv /tmp/tmp.jpg "$FILENAME$File_Suffix.jpg"
echo Гатова! - файл "$FILENAME$File_Suffix.jpg"

Скрыпт знойдзены недзе на прасторах інтэрнэт.
Патрабуе усталяванага mplayer'у.
Вось прыклад ягонае працы - слайдшоў фільму "16 кварталаў" (апрацаваны mencoder'ам у кансолі smile ):
http://albums.foto.tut.by/userpics/z/d/1000042634/3x4_16.kvartalau405499.jpg

5

Працяг: Стварэньне скрыншотаў

Дзякуй, добрая ідэя. Але, нажаль, няма тэхнічнай інфармацыі, як у mpc ці smplayer.

6

Працяг: Стварэньне скрыншотаў

Siroga, а ці можна ўзор выкліку скрыпту?

7

Працяг: Стварэньне скрыншотаў

Сінтаксіс можна паглядзець, калі запусьціць скрыпт без аргумэнтаў.  smile
Я, звычайна, запускаю яго з прыкладна такім наборам:

$ slideshow 16.kvartalau.SatRip.BelsatTV.2009-12-05_menc.avi 4 3 950 15

Дзе:
slideshow - назва скрыпта (можа быць якой заўгодна);
16.kvartalau.SatRip.BelsatTV.2009-12-05_menc.avi - назва файлу;
4 - колькасьць радкоў;
3 - колькасьць слупкоў;
950 - разрозьненьне малюнку;
15 - крок (у хвілінах, быццам бы) паміж кадрамі.
Там яшчэ нешта з аргумэнтаў было, але я абыходжуся гэтым.
Скрыпт запускаецца з тэчкі, дзе месьціцца відэафайл.
Сам скрыпт я паклаў да ўсіх астатніх у /usr/bin. Ну і нялішнім будзе нагадаць, што канешне ж ён павінен мець правы на запуск:

# chmod +x /usr/bin/slideshow

8

Працяг: Стварэньне скрыншотаў

Дзякуй

9

Працяг: Стварэньне скрыншотаў

Там у скрыпце ёсьць адна памылка, з-за якой выдае дзьве) Вось выпраўлены варыянт:

#!/bin/bash

FILE="$1"; # імя файлу

Image_Rows="$2"; # колькасьць радкоў
Image_Columns="$3"; # колькасьць слупкоў
Image_Resolution="$4"; # разрозьненьне выніковага малюнку

# Дзеля "адлову" кадраў
Time_Shift="$5"; # Часовае сумяшчэньне
File_Suffix="$6"; # Суфікс файлу,напрыклад, aaa.avi -> aaa_1.jpg aaa_2.jpg

#+++ У выпадку, калі парамэтры ня вызначаны
if [ "$FILE" = "" ]
then
echo 'Ня вызначаны відэафайл!';
echo 'Выкарыстоўваньне <відэафайл> [колькасьць радкоў] [колькасьць слупкоў] [разрозьненьне выніковага малюнку] [часовае сумяшчэньне] [суфікс выніковага файлу]'
echo 'Суфікс файлу звычайна лічба. Выніковы файл <відэафайл>_<лічба-суфікс>.jpg';
echo 'Якасьць выніковага jpg-файлу - 100';
exit 1;
fi

if [ "$Image_Rows" = "" ]
then
Image_Rows="3"
fi

if [ "$Image_Columns" = "" ]
then
Image_Columns="3"
fi

if [ "$Image_Resolution" = "" ]
then
Image_Resolution="1024x768"
fi
if [ "$Image_Resolution" = "0" ]
then
Image_Resolution="1024x768"
fi

if [ "$Time_Shift" = "" ]
then
Time_Shift="0"
fi

if [ "$File_Suffix" != "" ]
then
File_Suffix="_$File_Suffix";
fi

#--- У выпадку, калі памер ня вызначаны
FILENAME=${FILE%.*};

# Пераменная INFO захоўвае дадзеныя аб відэа-файле
INFO=`mplayer -msglevel all=0 -identify -nosound -vc dummy -vo null "$1"`;

# Вышыня зыходнага кадру
HEIGHT=`expr "$INFO" : '.*HEIGHT=\([0-9]*\)'`;

# шырыня зыходнага відэа-кадру
WIDTH=`expr "$INFO" : '.*WIDTH=\([0-9]*\)'`;

# колькасьць кадраў
NUM=$(($Image_Rows*$Image_Columns));

# Часовы крок - інтэрвал часу паміж здымкамі
LEN=$((`expr "$INFO" : '.*LENGTH=\([0-9]*\)'`/( $NUM +2)));

#+++ набор кадраў
for kadr in `seq 1 $NUM`
do
echo "Апрацоўка кадраў $kadr з $NUM";
mplayer -msglevel all=0 -nosound -vo jpeg:outdir=/tmp:quality=100 -frames 2 -ss `echo $Time_Shift+$kadr*$LEN|bc` "$1" > /dev/null;
rm /tmp/00000001.jpg;
mv /tmp/00000002.jpg /tmp/"$kadr.jpg";
done
#--- набор кадраў

#+++ Устаўляем кадры
echo Устаўка кадраў...;
Command="convert ";
for i in `seq 1 $Image_Rows`
do
for j in `seq 1 $Image_Columns`
do
kadr=`echo "($i-1)*$Image_Columns+$j"|bc`;
x_pos=$(( ($HEIGHT+10)*($i-1) ));
y_pos=$(( ($WIDTH+10)*($j-1) ));
Command="$Command -page +$y_pos+$x_pos /tmp/$kadr.jpg";

done
done
Command="$Command -background white -mosaic -bordercolor white -border 10x10 -quality 100 /tmp/tmp0.jpg";
$Command;
#--- Устаўляем кадры
cp /tmp/tmp0.jpg /tmp/tmp.jpg

#+++ Выдаленьне часовых файлаў
for kadr in `seq 1 $NUM`
do
rm /tmp/"$kadr.jpg";
done
rm /tmp/tmp0.jpg;
#--- Выдаленьне часовых файлаў

mv /tmp/tmp.jpg "$FILENAME$File_Suffix.jpg"
echo Гатова! - файл "$FILENAME$File_Suffix.jpg"

Ёсьць такое пытаньне:
У гэтым скрыпце скрыншоты робяцца праз MPlayer. Ці можна гэтае самае зрабіць празь іншы прайгравальнік? Напрыклад праз VLC? Проста я не жадаю ўсталёўваць тое, чым карыстацца амаль ня буду.

Апошні раз адрэдагавана jauhien.h (2011-01-15 01:05:18)

10

Працяг: Стварэньне скрыншотаў

Я раблю праз SMPlayer

11

Працяг: Стварэньне скрыншотаў

менавіта праз прайгравальнік ці праз скрыпт, у якім прапісаныя пэўныя каманды да гэтага прайгравальніка?

12

Працяг: Стварэньне скрыншотаў

Праз прайгравальнік: menu Video/Preview...

13

Працяг: Стварэньне скрыншотаў

mplayer з mencoder'ам пад вінды тут