Have you ever wanted to create keywords based on the filename of a video?
With the scripting support in Fast video cataloger, this is actually pretty easy. Here is a sample script to do just that, create keywords from the filename or path of a video.
The provided script takes the currently selected videos and adds keywords and actors based on the name of the video file.
You might want to tweak the script a bit to suit your own naming standard.
The array of separators
list the characters that should be treated as keyword separators.
The array ignore_words
is a list of common words that should simply be ignored and not added as keywords.
The integer min_length
is the number of characters that a word needs to contains to be added as a keyword.
Finally, if a string contains the @
character that sentence will be treated as an actor. First name before the @ and last name after the @. The actors are created and added as cast to the video.
As usual, to run a script in Fast video cataloger you load it into the console window and click the Run button.

Script console and web browser open.
#region title_to_keywords using System; using System.IO; using System.Runtime; using System.Linq; using System.Collections.Generic; using VideoCataloger; /// <summary> /// Take the title and use it to generate keywords. /// If there is a @ in the title we treat that as an actor /// the text before @ is first name and the text after is last name /// if an actor with that name already exist we use that one. /// </summary> class KeywordsFromTitle { static public void Run(IScripting scripting, string arguments) { scripting.GetConsole().Clear(); var catalog = scripting.GetVideoCatalogService(); ISelection selection = scripting.GetSelection(); List<long> selected = selection.GetSelectedVideos(); foreach (long video in selected) { // Get the video file entry var entry = catalog.GetVideoFileEntry(video); scripting.GetConsole().WriteLine(System.Convert.ToString("Processing..." + entry.FilePath)); char[] separators = { ' ', ',', '.', '-', '[' ,']', '{', '}', '_' }; string[] ignore_words = { "is", "are", "who", "where" }; string title = entry.Title; string[] keywords = title.Split(separators); int min_length = 3; foreach (string word in keywords) { if (word.Length>= min_length) { if (!ignore_words.Contains(word)) { if (word.Contains("@")) { // Actor string[] names = word.Split('@'); string first_name = names[0]; string last_name = names[1]; scripting.GetConsole().WriteLine( "Actor FirstName:"+ first_name + " LastName:" + last_name ); int actor_id = -1; VideoCataloger.RemoteCatalogService.Actor[] current_actors = catalog.GetActors(null, first_name, last_name, true); if (current_actors.Length >= 1) { actor_id = current_actors[0].ID; } else { VideoCataloger.RemoteCatalogService.Actor actor = new VideoCataloger.RemoteCatalogService.Actor(); actor.FirstName = first_name; actor.LastName = last_name; actor_id = catalog.AddActorToDB(actor); } if (actor_id != -1) catalog.AddActorToVideo(video, actor_id); } else { // Keywords scripting.GetConsole().WriteLine("Keyword:" + word ); scripting.GetVideoCatalogService().TagVideo(video, word); } } } } } // refresh the gui to show the changed file paths. scripting.GetGUI().Refresh(""); } } #endregion