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.
#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
How do I add keywords from folder name to all videos within that folder? My videos are generated original files from cameras, they do not have keywords in them. The folders contain dates and places or events. I need folder names to be keywords for the videos. Thank you
Do you want each folder from the root, or do you have some format in the folders names? Can you give an example?
If you change “entry.Title” to “entry.FilePath” the script will use the complete path instead of just the title.
If you add ‘\\’ as a separator token it should separate out the folders.