Сводный лист (предпросмотр) фильма
Материал из Gentoo Linux Wiki
- Вернуться в раздел советов
Содержание |
[править] Описание
Если вам необходимо создать "предпросмотр" к фильму - набор скриншотов, обьединённых на одной картинке, то можно использовать скрипт, приведённый на этой странице.
[править] Требования к программам
Скрипт использует программы mplayer из пакета media-video/mplayer и convert из пакета media-gfx/imagemagick
[править] Примечания к скрипту
- Скрипт корректно обрабатывает имена с пробелами, скобками , например:
./make-thumbs.sh Мой\ любимый\ фильм\[\]\{\}\"\".avi
./make-thumbs.sh "Мой любимый фильм[]{}\"\".avi"
- Промежуточные файлы создаются в директории /tmp
- Выходной файл создаётся в формате jpg , качество 100.
- Если отсутствуют аргументы - выводится подсказка по скрипту и скрипт завершается.
[править] Использование
<расположение скрипта>/make-thumbs.sh <имя видео-файла> [кол-во строк] [кол-во столбцов] [разрешение выходного изображения] [временное смещение] [суффикс выходного файла]
[править] Что такое временное смещение?
Скрипт выбирает кадры из фильма в определённых позициях.
С помощью временного смещения можно сдвигать эти позиции, "отлавливая" более удачные комбинации кадров.
[править] Что такое суффикс выходного файла?
С помощью суффикса можно создавать файлы вида <имя видео-файла>_<суффикс>.jpg
Например, Фильм_1.jpg , Фильм_2.jpg и так далее. Удобно при "отлове" кадров.
[править] Примеры использования
[править] Без параметров
- /home/<имя пользователя>/make-thumbs.sh <имя видео-файла>
- ./make-thumbs.sh Elephants_Dream_1024.avi
Получаю - картинку <имя видео-файла>.jpg с 3мя строками , 3 мя столбцами, разрешением 1024х768
[править] С параметрами 4 строки x 3 столбца
- /home/<имя пользователя>/make-thumbs.sh <имя видео-файла> 4 3 0 1 1
- ./make-thumbs.sh Elephants_Dream_1024.avi 4 3 0 1 1
Получаю - картинку <имя видео-файла>_1.jpg с 4мя строками , 3 мя столбцами, разрешением 1024х768, смещением кадров +1
[править] С параметром 4 строки x 3 столбца x разрешением 1280x1024
- /home/<имя пользователя>/make-thumbs.sh <имя видео-файла> 4 3 1280x1024
- ./make-thumbs.sh Elephants_Dream_1024.avi 4 3 1280x1024
Получаю - картинку <имя видео-файла>.jpg с 4мя строками , 3 мя столбцами, разрешением 1280х1024
| Примечание: x- английская ! |
[править] Скрипт
| Файл: make-thumbs.sh |
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;
#--- Вставляем кадры
# Меняем размер
convert /tmp/tmp0.jpg -auto-orient -thumbnail $Image_Resolution -quality 100 /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"
|
[править] Источник
! Скрипт публикуется с согласия авторов. !
- Спасибо Doctor за тестирование.
- Обсуждение в этой теме форума gentoo.ru
- Кадры из фильма Elephants Dream
--Wadlax 19:34, 21 июня 2007 (UTC)
.
