Ранее я уже рассказал как вручную добавлять описание к фильму в медиаплеере Kodi. Сейчас я расскажу как я немного автоматизировал этот процесс.
Поскольку медиаплеер записывает в базу данных информацию, полученную извне - возможны различные написания одного и того-же.
Например, один и тот-же жанр может отображаться по-разному просто за счёт разного регистра или стиля написания. Так: Экшн, Экшен, экшн, Action и action - это пять разных жанров и если хочется собрать все фильмы в одну подборку - надо чтобы написание жанра во всех фильмах было одинаковым.
Точно так-же обстоят дела со страной производителя. USA, United States of America, сша, США и пр... - это всё разные страны по версии Kodi. Чтобы ВСЕ фильмы, произведённые в этой стране отображались в одном списке - они все должны иметь одинаковое написание страны производства.
А ещё есть ряд однотипных задач, которые можно автоматизировать. В прошлой статье я говорил что имена файлов должны иметь общий "корень" ("оригинальное название (год)"). Опечатка в одной букве в любом фале приведёт к тому, что "магия" не сработает и описание не "подтянется".
Более того, лично я использую домашний сервер, чтобы можно было смотреть одни и те-же фильмы на всех устройствах в доме. А это - Большой телевизор, маленький монитор перед кроватью, полноценный стационарный компьютер, два ноутбука, планшет и телефоны.
Чтобы всё это было возможно - мне необходимо положить видеофайлы на отдельный диск в сетевом хранилище, а значит что после создания файла с описанием, самого фильма и всей графики - мне необходимо переместить их в сетевое хранилище.
В общем - целый ряд однотипных действий, которые можно автоматизировать при помощи создания скрипта на базе shell.
Сам скрипт я опубликую в конце статьи, сейчас просто расскажу о логике его действий.
Итак, вводные:
- Операционная система - Debian
- Для работы скрипта мне потребовалось установить утилиту Dialog
Первое что делает этот сценарий - создаёт служебные файлы test.nfo и name.nfo, в которые записывается введённая информация. С этого момента - везде, где потребуется внести в название файла оригинальное название - будет подставлена внесённая информация из файла name.nfo.
При выборе жанра или страны производителя - нет возможности вручную указать эту информацию, а есть возможность выбрать из предложенных вариантов. Это как раз то, о чём я писал выше. При таком подходе - одна страна всегда будет иметь одно написание и все фильмы, произведённые в этой стране будут находиться в одном месте при сортировке.
После того, как я ввёл ОБЯЗАТЕЛЬНЫЕ на мой взгляд данные - сценарий переименовывает файлы так, чтобы они имели единый для всех стандарт и тут-же переносит их на локальный сервер.
Теперь - я могу обновить медиатеку на ЛЮБОМ устройстве в доме, чтобы новый фильм отобразился на нём.
В следующей статье я расскажу как я создал домашний сервер для хранения фильмов и как настроить Kodi чтобы фильмы, хранящиеся на домашнем сервере можно было смотреть.
Сам сценарий оставлю ниже для тех, кто понял что я хотел сказать:
#!/bin/bash
cd /home/barshadow/Загрузки
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Требуется указать Русское название фильма\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
<title>"$(cat $tempfile)"</title>"> ./test.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Требуется указать оригинальное название фильма\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "<originaltitle>"$(cat $tempfile)"</originaltitle>">> ./test.nfo
echo ""$(cat $tempfile)"">> ./name.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
###
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Требуется указать имя режиссёра\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "<director>"$(cat $tempfile)"</director>">> ./test.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
###
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Требуется указать имя автора сценария\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "<credits>"$(cat $tempfile)"</credits>">> ./test.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
###
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Страна производитель" \
--menu "" 20 51 4 \
"Argentina" "Аргентина" \
"Australia" "Австралия" \
"Belgium" "Бельгия" \
"Canada" "Канада" \
"China" "Китай" \
"Czech Republic" "Чехия" \
"Denmark" "Дания" \
"France" "Франция" \
"Germany" "Германия" \
"Ireland" "Ирландия" \
"Italy" "Италия" \
"Japan" "Япония" \
"Mexico" "Мексика" \
"Netherlands" "Нидерланды" \
"New Zealand" "Новая Зеландия" \
"Norway" "Норвегия" \
"Russia" "Россия" \
"South Korea" "Южная Корея" \
"Soviet Union" "СССР" \
"Spain" "Испания" \
"Sweden" "Швеция" \
"Ukraine" "Украина" \
"United Kingdom" "Великобритания" \
"United States of America" "США" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<country>$choice</country>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Страна производитель" \
--menu "" 20 51 4 \
"Argentina" "Аргентина" \
"Australia" "Австралия" \
"Belgium" "Бельгия" \
"Canada" "Канада" \
"China" "Китай" \
"Czech Republic" "Чехия" \
"Denmark" "Дания" \
"France" "Франция" \
"Germany" "Германия" \
"Ireland" "Ирландия" \
"Italy" "Италия" \
"Japan" "Япония" \
"Mexico" "Мексика" \
"Netherlands" "Нидерланды" \
"New Zealand" "Новая Зеландия" \
"Norway" "Норвегия" \
"Russia" "Россия" \
"South Korea" "Южная Корея" \
"Soviet Union" "СССР" \
"Spain" "Испания" \
"Sweden" "Швеция" \
"Ukraine" "Украина" \
"United Kingdom" "Великобритания" \
"United States of America" "США" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<country>$choice</country>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Страна производитель" \
--menu "" 20 51 4 \
"Argentina" "Аргентина" \
"Australia" "Австралия" \
"Belgium" "Бельгия" \
"Canada" "Канада" \
"China" "Китай" \
"Czech Republic" "Чехия" \
"Denmark" "Дания" \
"France" "Франция" \
"Germany" "Германия" \
"Ireland" "Ирландия" \
"Italy" "Италия" \
"Japan" "Япония" \
"Mexico" "Мексика" \
"Netherlands" "Нидерланды" \
"New Zealand" "Новая Зеландия" \
"Norway" "Норвегия" \
"Russia" "Россия" \
"South Korea" "Южная Корея" \
"Soviet Union" "СССР" \
"Spain" "Испания" \
"Sweden" "Швеция" \
"Ukraine" "Украина" \
"United Kingdom" "Великобритания" \
"United States of America" "США" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<country>$choice</country>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
###
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Выберите жанр" \
--menu "" 20 51 4 \
"боевик" "" \
"вестерн" "" \
"военный" "" \
"детектив" "" \
"драма" "" \
"история" "" \
"комедия" "" \
"криминал" "" \
"мелодрама" "" \
"музыка" "" \
"мультфильм" "" \
"приключения" "" \
"семейный" "" \
"телевизионный фильм" "" \
"триллер" "" \
"ужасы" "" \
"фантастика" "" \
"фентези" "" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<genre>$choice</genre>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Выберите жанр" \
--menu "" 20 51 4 \
"боевик" "" \
"вестерн" "" \
"военный" "" \
"детектив" "" \
"драма" "" \
"история" "" \
"комедия" "" \
"криминал" "" \
"мелодрама" "" \
"музыка" "" \
"мультфильм" "" \
"приключения" "" \
"семейный" "" \
"телевизионный фильм" "" \
"триллер" "" \
"ужасы" "" \
"фантастика" "" \
"фентези" "" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<genre>$choice</genre>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "Выберите жанр" \
--menu "" 20 51 4 \
"боевик" "" \
"вестерн" "" \
"военный" "" \
"детектив" "" \
"драма" "" \
"история" "" \
"комедия" "" \
"криминал" "" \
"мелодрама" "" \
"музыка" "" \
"мультфильм" "" \
"приключения" "" \
"семейный" "" \
"телевизионный фильм" "" \
"триллер" "" \
"ужасы" "" \
"фантастика" "" \
"фентези" "" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo "<genre>$choice</genre>">>./test.nfo;;
1)
echo "Отказ от ввода.";;
255)
echo "Нажата клавиша ESC.";;
esac
clear
###
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Описание\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "<plot>"$(cat $tempfile)"</plot>">> ./test.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Ввод данных" --clear \
--inputbox "Год\nУказать нужно в этой строке:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "<year>"$(cat $tempfile)"</year>">> ./test.nfo
echo " ("$(cat $tempfile)")">> ./name.nfo
;;
1)
echo "Отказ от ввода.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
clear
echo "
<actor>
<name></name>
<role></role>
<order>1</order>
<thumb></thumb>
</actor>
<actor>
<name></name>
<role></role>
<order>2</order>
<thumb></thumb>
</actor>
<actor>
<name></name>
<role></role>
<order>3</order>
<thumb></thumb>
</actor>
<actor>
<name></name>
<role></role>
<order>4</order>
<thumb></thumb>
</actor>
<actor>
<name></name>
<role></role>
<order>5</order>
<thumb></thumb>
</actor>
</movie>">>test.nfo
mv ./test.nfo "$(echo ""$(cat name.nfo)"".nfo)"
mv ./*.mp4 "$(echo ""$(cat name.nfo)"".mp4)"
mv ./*.avi "$(echo ""$(cat name.nfo)"".avi)"
mv ./poster.jpg "$(echo ""$(cat name.nfo)""-poster.jpg)"
mv ./fanart.jpg "$(echo ""$(cat name.nfo)""-fanart.jpg)"
mv ./*.mkv "$(echo ""$(cat name.nfo)"".mkv)"
sudo scp "$(echo ""$(cat name.nfo)"")"*.jpg pi@192.168.1.4:/media/Movies/
sudo scp "$(echo ""$(cat name.nfo)"")"*.mp4 pi@192.168.1.4:/media/Movies/
sudo scp "$(echo ""$(cat name.nfo)"")"*.avi pi@192.168.1.4:/media/Movies/
sudo scp "$(echo ""$(cat name.nfo)"")"*.mkv pi@192.168.1.4:/media/Movies/
rm *.nfo
rm *.jpg
exit