Last Updated or created 2022-05-18
old post : https://www.henriaanstoot.nl/2021/02/08/kodi-movies-and-metadata/
Added poster art generator at the bottom of this page
Made a new NFO generator to get private movies properly scraped in kodi.
What does it do?
- Genererates NFO for Kodi
- Goes recursive though given directories
- Skips movies with existing nfo
- Previews the movie using VLC (So you can see what it is you are adding information for)
- Tries to make a nice title from filename and year
- Gets year from metadata
- Fills tags from yad forms
- next version i will add a poster generator from another nfo script i made. (It allready works, but i want to add a frame selector.
- Adds new genre/actors/places if they dont exists


#!/bin/bash
# Needs mediainfo and yad
#find /media/geisha/private/Media/video/ -type f | egrep -i "mkv$|avi$|mpg$|mp4$|ogv$" | while read ; do
find $1 -type f | egrep -i "mkv$|avi$|mpg$|mp4$|ogv$" | while read ; do
# check if nfo exists
short=$(echo "$REPLY" | rev | cut -f-2 -d/ | rev)
file=$( echo "$REPLY" | rev | cut -f2 -d. | rev).nfo
filename=$( basename "$REPLY" | cut -f1 -d. )
if [ -f "$file" ] ; then
echo "$file found .. so skipping"
else
echo "Not found $file"
nohup vlc "$REPLY" &
# check if find date
year=$(mediainfo "$REPLY" | grep Encoded |head -1 2>/dev/null | awk '{ print $5 }' | cut -c-4)
yeartitle="$year - "
if [ "$year" == "" ] ; then
year=$(echo $file | tr -cd '2[0-9][0-9][0-9]')
if [ ! "$year" == "" ] ; then
#no year in filename
yeartitle=""
else
yeartitle="$year - "
fi
fi
# create nfo
forminfo=$(yad --title="nfo form $short" --text="Please enter:" --form --field="Title" --field="Year" --field="Placenew" --field="Genrenew" "$yeartitle $filename" "$year" "" "" --form --columns=2 --item-
separator="," --field="Place":CB --field="Genre":CB "$(paste -s -d"," < places)" "$(paste -s -d"," < genres)")
#echo $forminfo
#2020 - |2020|placenem|genrene|Hilversum|Vacation|
title=$(echo $forminfo | cut -f1 -d\|)
year=$(echo $forminfo | cut -f2 -d\|)
placenew=$(echo $forminfo | cut -f3 -d\|)
genrenew=$(echo $forminfo | cut -f4 -d\|)
place=$(echo $forminfo | cut -f5 -d\|)
genre=$(echo $forminfo | cut -f6 -d\|)
# Plot
plot=$(yad --form --field="Text::TXT" --geometry="600x200")
#plot=$( echo $plot | cut -f1 -d\\)
#plot=$( echo $plot | cut -f1 -d|)
# Actors
actors=$(yad --list --geometry="200x480" --print-all --column= --column=:chk --column= --column=:chk $( cat actors | cut -f1 -d" " |while read user; do echo -n "$user false " ;done ) )
echo $actors | grep "NEW|TRUE" >/dev/null
if [ $? -eq 0 ] ; then
vi actors
actors=$(yad --list --geometry="200x480" --print-all --column= --column=:chk --column= --column=:chk $( cat actors | cut -f1 -d" " |while read user; do echo -n "$user false " ;done ) )
fi
if [ ! "$placenew" == "" ] ; then
place="$placenew"
echo "$placenew" >> places
fi
if [ ! "$genrenew" == "" ] ; then
genre="$genrenew"
echo "$genrenew" >> genres
fi
(
echo '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'
echo "<movie>"
echo " <plot>$plot</plot>"
echo " <outline />"
echo " <title>$title</title>"
echo " <year>$year</year>"
echo " <country>$place</country>"
cat actors | cut -f1 -d" " | while read actorname ; do
echo $actors | grep "$actorname|TRUE" >/dev/null
if [ $? -eq 0 ] ; then
name=$(grep $actorname actors | cut -f2 -d\" )
echo "<actor>"
echo " <name>$actorname</name>"
echo " <role>$name</role>"
echo "</actor>"
fi
done
echo " <genre>$genre</genre>"
echo " <art>"
echo " </art>"
echo "</movie>"
) > "$file"
fi
killall vlc
done
And some files
> actors
Firstname "Firstname Lastname"
> genres
Vacation
Pruts
> places
Netherlands
Poster generator (select poster thumbnail to use)
Generates 3 poster images and 3 thumbs to select.
Thumbs are 10 seconds into the movieclip, midway and on 2/3
short=$(basename $1 | cut -f1 -d.)
three=$(( $(mediainfo --Inform="Video;%Duration%" $1) / 3000 ))
rm -f thumb*.jpg poster*.jpg
first=10
#ffmpeg -ss $first -i $1 -vf scale=320:-1 -frames:v 1 -q:v 2 thumb1.jpg -hide_banner -loglevel error
ffmpeg -ss $first -i $1 -frames:v 1 -q:v 2 thumb1.jpg -hide_banner -loglevel error
second=$(( $three ))
ffmpeg -ss $second -i $1 -frames:v 1 -q:v 2 thumb2.jpg -hide_banner -loglevel error
third=$(( $three * 2 ))
ffmpeg -ss $third -i $1 -frames:v 1 -q:v 2 thumb3.jpg -hide_banner -loglevel error
convert thumb1.jpg -resize x1000 -gravity center -crop 666x1000 poster1.jpg
convert thumb1.jpg -resize x320 -gravity center -crop 212x320 thumb1s.jpg
convert thumb2.jpg -resize x1000 -gravity center -crop 666x1000 poster2.jpg
convert thumb2.jpg -resize x320 -gravity center -crop 212x320 thumb2s.jpg
convert thumb3.jpg -resize x1000 -gravity center -crop 666x1000 poster3.jpg
convert thumb3.jpg -resize x320 -gravity center -crop 212x320 thumb3s.jpg
out=$(yad --form --title="Select poster thumbnail" --geometry="+0+0" \
--columns="3" \
--field="!thumb1s-1.jpg! :fbtn" "echo poster1-1.jpg" \
--field="!thumb2s-1.jpg! :fbtn" "echo poster2-1.jpg" \
--field="!thumb3s-1.jpg! :fbtn" "echo poster3-1.jpg"
)
if [ ! "$out" == "|||" ] ; then
choice=$(echo $out | sed s/\ \|\|\|//g | rev | cut -f1 -d" " | rev)
echo cp $choice ${short}-poster.jpg
fi