Сводный лист (предпросмотр) фильма

Материал из 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 и так далее. Удобно при "отлове" кадров.

[править] Примеры использования

[править] Без параметров

Результат работы скрипта без дополнительных ключей. Размер 346K
Результат работы скрипта без дополнительных ключей. Размер 346K
  • /home/<имя пользователя>/make-thumbs.sh <имя видео-файла>
    • ./make-thumbs.sh Elephants_Dream_1024.avi

Получаю - картинку <имя видео-файла>.jpg с 3мя строками , 3 мя столбцами, разрешением 1024х768

[править] С параметрами 4 строки x 3 столбца

Изображение 4 ряда x 3 столбца, разрешение 1024x768, смещение кадров +1. Размер 457K
Изображение 4 ряда x 3 столбца, разрешение 1024x768, смещение кадров +1. Размер 457K
  • /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

Изображение с с 4мя строками , 3 мя столбцами, разрешением 1280х1024. Размер 674K
Изображение с с 4мя строками , 3 мя столбцами, разрешением 1280х1024. Размер 674K
  • /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"

[править] Источник

  • Авторы данного скрипта pasha и Wadlax

! Скрипт публикуется с согласия авторов. !

  • Спасибо Doctor за тестирование.


--Wadlax 19:34, 21 июня 2007 (UTC)

.

Личные инструменты
На других языках