MOVIE CLEANUP

For years I used the TVGuardian device to filter profanity from my movies, but it did not have the ability to handle all DVDs and Blu-ray movies due to the lack of closed captioning.  Like many others I too looked for a free solution and stumbled upon the "Mute Profanity" plugin from Scott Brown, used in Kodi Media Player (formally XBMC).  This is my attempt to share knowledge and processes to make the default Kodi player mute, skip and superimpose a solid black screen when applicable.  Using these three options it is possible to mute audio (profanity), skip video (inappropriate scenes) and cover video while retaining audio by using subtitles vector shapes (cover inappropriate scenes while still listening to the story line).  The use of the Mute Profanity plugin makes automating a lot of this possible by creating Edit Decision List (edl) file to control the mute and skip functions for each movie. The web page instructions are from a Windows 10 client, but the resultant files can be used with the movie on any supported Kodi system.
Download my edl files available for your use.

Note
: The edl skip functionality is broken in the current version of Kodi (version 18.x).  I have successfully tested this functionality in version 16.x.  Further development of version 18.x should address the issue.

Mute Profanity - Kodi Forum
Mute Profanity - Github
Mute Profanity plugin download (zip file). Install through Kodi system plugin menu

Use the following link to configure Kodi with the plugin (this is where I started).  Great guide for setting up Kodi and the plugin.
Zeilk Creative - Remove Profanity From Movies The Easy Way!
PDF of above link.

Table of contents:


EDL - how it works in Kodi - simplified)

Kodi uses a Edit Decision List (EDL).  Basically it is a text file that is named the same as the movie with an extension of .edl. The following notation is used:

[start time] [end time] [action]

Start and end times can be in:
Seconds:

95.728
00095.7
00095.728

4276.6
04276.600

Or timecode:
00:01:35.728

Note
: Do not use a comma or alternate character for the period before the last three zeros in a timecode entry. - 00:00:00.000
Note: Do not mix seconds and timecode entries on the same line:
            04276.600  01:59:35.728  1  #THESE TIME STAMPS ARE MIXING NOTATIONS AND ARE INVALID TOGETHER

Actions may be "0" for skip or "1" for mute. The action will be performed between the two time-frames

The sequence of each time-frame and action do not have to be in ascending order (it just makes it easier to read).  In fact I like to keep all my video skips at the end of my file in timecode format.

Note: Mute and Skip time-frames can not overlap otherwise no action will occur

Comments at the beginning of a line can be included with a hash symbol (pound symbol #) and a space before the comment text
Comments after the action simply use a hash symbol and then the text

Examples:

00095.728    00096.577    1    #Mute between these two timestamps. This text can be whatever text you like
00154.233    00155.054    1    #Muted:'damn'
00:01:59:33.483    00:02:00:02.493    1    #Muted:'freakin'
05203.885    05204.743    1    #Muted:'crap'

# EDITS
00:00:00.042    00:00:34.456    0    #SKIPPING INTRO
01:04:23.849    01:05:12.054    0    #sex scene
# REV_1

Using the edl file

In short, you could watch your movie and then use accurate time stamps to mute and skip content.  Name the file exactly the same as your movie file but with the .edl extension and keep the file in the same location as the movie file.

Mute Profanity plugin

The Mute Profanity plugin compares a filter.txt file (%AppData%\Kodi\addons\mute-profanity-master\resources\filter.txt) that contains profanity words with the subtitle file.  Based on the timestamps in the subtitle file, it calculates where the filtered word probably is.

The plugin is not used for the playback of a movie but is used for automating the creation of the edl file that controls what the player does (skip\mute).  I use the plug in on my computer where I edit the movie but not on my Android media player where I watch the edited movies that is hooked to my TV.

Subtitle issues

It is my experience that the results from the  Mute Profanity plugin can be between 30%-99% accurate.  Why the big difference?  Its really not the plugins fault, but is wholly dependent upon the subtitle file that is used.  Since the subtitle file is downloaded from opensubtitles.org , it is dependent upon the work of other individuals.  Issues can arise from any of the following:

Known Mute Profanity issues:

Mute Profanity configuration adjustment

If you have not configured Kodi nor the plugin, please use Zeilk Creative - Remove Profanity From Movies The Easy Way! tutorial.

In the plugin settings, unselect the configuration option "Replace found profanity with **** in subtitle file".  This is necessary to keep the profanity in the subtitle file for reuse by other tools or re-running the plugin after making adjustments.

Using the Mute Profanity plugin

For your movie to show up in the Mute Profanity movie list, it must have gone through the scraping process so that it retrieves the correct movie database information.  After selecting your movie to be processed, the plugin first looks for an existing subtitle file with the same as the movie before attempting to download one.

When the plugin has completed its process successfully, you will find a subtitle (.srt) and a edit decision list (.edl) file with the same name as the movie, in the same location as the movie.  If the downloaded subtitle file is accurate the edl file will be good.  Verify that the subtitles file is accurate by playing the movie in your favorite player that can display subtitles.  Verify the following:

This completes the use of the Mute Profanity plugin portion

Verify the contents of the edl

Remove mute false positives

Open the edl file in a text editor and look for any false positive entries.  These may be correct uses of god, hell, balls etc.  Since the plugin only identifies the word that was blocked, it can be difficult to know the context without searching the subtitle file for each occurrence.  I created a PowerShell script (_ProfanityContext.ps1) that will use the same filter.txt file as the plugin.  It will search and create a report for each line where the word was found.  You can find the script in the PowerShell Scripts section.  The following is an example of the script's output:

----------- jesus ----

      8959 Holy mother of Jesus!
     11125 Baby Jesus, help us!


----------- lord ----

      3411 That's right, Sister. Call the Lord and tell
      7293 The Lord have truly bless you all          
     11123 Oh, dear Lord, please!                     


----------- god ----

       157 Goddamn!                                          
      1863 God da...                                         
      3697 My God.                                           
      4097 Goddamn, man!

Add any skip entries

If you are aware of any scenes in the movie that you want to skip, you will need to find them and manually add this information.  See below.

Configure HPC-HC and its usage

For exact timestamps, I use the free HPC-HC video player.  You can customize the hot keys to display the time stamps that can be copy\pasted to the edl file.  The "Go To" function can configured by using the "View" Menu, "Options" item.  Under "Player|Keys" option, configure the "Key" combination you want to use to bring up the timestamp.

   

If the "Go To" hot key is set to Ctrl+G, I would perform the following:

  1. Play the movie in the HPC-HC player.
  2. Find the exact spot where the skip\mute should begin.
    1. The arrow keys can be used for small increments
    2. Ctrl+arrow key will advance one frame at a time
  3. Skip only: For the beginning of the skip, reverse three frames
    1. It has been my experience that the Kodi player dips about three frames into the skip environment with a brief pause (dependent upon the hardware capabilities).  It can be very embarrassing if the pause is a still frame of an undesired image that you are trying to skip.
  4. Read the timecode from the bottom status bar or use the following key sequences to put the same timecode on the clipboard (to paste into the edl).
    1. CTRL + G --This displays the Go To menu
    2. CTRL + A --This select all the text in the field where the cursor is blinking (selects all the timecode)
    3. CTRL + C --This copies the selected text to the windows clipboard (system memory)
    4. Open the edl file; place the cursor on an empty line (bottom of the file is good); right click and paste (CTRL + V)
    5. If you want to use seconds (default for the plugin) instead of the timecode, use my "_TimeCodeConverter.ps1" PowerShell script
    6. Press the "Tab" key to separate the next function.
  5. Find where the skip\mute should end.  Skip only: Add an additional two frames. 
  6. Repeat step four
    1. Press the "Tab" key and type a number zero for skip or a number one for mute.
    2. Press the "Tab" key and type a "#" followed by any text comment you want to make.  For example:

      00:21:15.983    00:22:38.732    0    #Sex scene
  7. Save the changes to the edl file and test that the skip\mute performs as expected.
  8. Note: Any overlapping mutes and skips will invalidate both functions.  Make sure you comment out any conflicting mutes.

Verify each mute

This process took me the longest and is the most time consuming, but also the most important.

Edited For Content - Superimposing \ covering the video

Sometimes it is necessary to simply cover the screen if you do not want to skip the scene (plot dependent) and hear the audio.

Note: Keep only your ass files with your movie file.  You will want to store your srt files in another location away from the movie file or else they will automatically display when an ass file is not present.
Note: Anyone made aware of how this works can easily disable subtitles to avoid the censorship.

Troubleshooting

My Files

Edit Decision List (edl) Files

Below you will find a link to my edl files.  99% of my files are based on 23.97 fps (NTSC - Region 1\A).  Even if your movie is at the same speed, it is possible that the timestamps may not match up (differences in source and possible dropped frames in the encoding process to but mention a few).  To help with this situation, I have also included the subtitle file (for comparison) and a "MediaInfo" file that you can use to compare against a "MediaInfo" file generated from your movie file.

If you find there is a constant discrepancy between your movie and my edl, you can use a PowerShell script (_EdlOffSetAdjuster.ps1) to shift all of the edl time entries forwards or backwards.  You can find the script in the PowerShell Scripts section.

Download a comma delimited file (.csv) of all of my edl files
Download all the edl files
Browse for a single movie


PowerShell Scripts

All PowerShell scripts were created and tested in Windows 10 (PowerShell v5).  These are available to you at your own risk.  I will take no responsibility for lost data. Be diligent and backup your edl files before using any of these.

_EdlCurseJumperCreator.ps1
_EdlOffSetAdjuster.ps1
_ProfanityContext.ps1
_TimeCodeConverter.ps1

_EdlCurseJumperCreator.ps1

Description:
I wrote this script to eliminate the time taken to make a change and "find" the same place in the movie again in order to test my edit.  It examines the Mute Profanity entries in a movie file:

Note: The script strictly looks for entries between the beginning and ending comments for Mute Profanity and assumes all entries are sequential.

Usage:

Download

_EdlOffSetAdjuster.ps1

Description:
This PowerShell script purpose is to shift the timestamp values in a edl forward or backwards.. 
For example, you have a edl file based off of a movie from a DVD source and now you have the same movie from a Blu-ray source.  When you watch the movie you notice that the mutes and skips are off by about one second. Rather than editing every entry in the file, use this script to shift the timestamps forward or backwards based on a value in seconds.

Usage:

Note: The script will handle either notations in seconds and timecode (00:01:34.843) formats

Download

_ProfanityContext.ps1

Description:
I created this script because the Mute Profanity plugin gives me the filtered word in the comment section of the edl, but not the context of the the sentence where the word was found.  This script will use the same filter.txt file as the plugin; search and create a text file report for each line where the word was found in the subtitles file (.srt).  The following is an example of the script's output:

----------- jesus ----

      8959 Holy mother of Jesus!
     11125 Baby Jesus, help us!


----------- lord ----

      3411 That's right, Sister. Call the Lord and tell
      7293 The Lord have truly bless you all          
     11123 Oh, dear Lord, please!                     


----------- god ----

       157 Goddamn!                                          
      1863 God da...                                         
      3697 My God.                                           
      4097 Goddamn, man!

Usage:

Download

_TimeCodeConverter.ps1

Description:

This script will toggle between timeframe notations of seconds (that Mute Profanity plugin uses) and timecode (that humans use - 00:32:35.943).  The output will automatically be placed on the clipboard (in memory) so that it can be pasted into any application.

Usage:

Download

Other files

Mute Profanity Filter.txt - Copy of the Mute Profanity plugin file that I use (added entries).  Since I have all my Mute Profanity "blocking severity" settings all configured to "Very High" the numbers in the filter.txt are not used (since I block them all).  You may want to adjust the numbers if this is important to you.

EditedForContent_Subtitle_Template.ass - This is a template file for the "Aegisub" application in order to create black boxes to cover the screen.

Documentation form (template) - Print this form and keep it close when watching a movie.  Pause the movie when profanity or a inappropriate scene is experienced that you want to clean up.  Use the form to document the movie; timestamp; reason and come back to edit your movie at a later time.















Contact: moviecleanupATpanhandle.rr.com

Last updated  02/25/2019