Sensible-cinema is a program that allows you to do pre-programmed scene selection (i.e. “mute out” or “bleep out” scenes) on arbitrary media players like netflix online, vlc, etc.

Currently it takes as input a list of “skippable” scenes, and a player description. It then tracks whichever player you are using, and mutes or blanks out the system appropriately, during the scenes specified.

It works out of the box with the hulu and VLC players on windows. It isn't hard to add new players, and probably wouldn't be too hard to add more operating systems.

How to Use ==

Start playing your movie in its respective player, then startup sensible-cinema from the command line thus:

C:\> jruby -S sensible-cinema

It prompts you for a scene descriptions file (ex: bambi.yml), and then for a player description file (ex: hulu_full_screen.yml).

Sensible-cinema will now run in a console window, screen tracking the player to monitor its position, and react appropriately.

It is presumed that you'll then minimize the console window and proceed to enjoy the movie.

You'll know that it's working if, when you change the time of your player (ex: dragging it to a new spot in the playback), the screen output in sensible-cinema's console should change to match the new time.

How to install ==

First you'll need to install jruby (in case you haven't already), from www.jruby.org Make sure you check the box “add it to my path” or something similar to that.

Next install the gem by either opening up the command window or hitting windows+r (run) and typing

     C:\> jruby -S gem install sensible-cinema 

it's jruby only currently (since jruby allows for proper thread concurrency, has an easy GUI, and feels actually sane on windows).
It could theoretically be ported to MRI 1.9.2, if anybody wanted to do so.
Also if anybody would be interested in porting this to Linux I'd be happy to collaborate.

You can test that it's installed by running it (see above) and selecting the “example_scene_list.yml”, and choosing the hulu player.

It will proceed do a few “demo” mutes and blank outs.

Programming Your Own Scene Descriptions File ==

To program sensible-cinema, you create a scene description list it can use.

An Edit Decision List (EDL) looks something like this trivial example:

mutes:

"01:00:00" : "01:01:02.5" # mute from exactly one hour to one hour, one minute, two seconds and a half will be muted.

blank_outs:

"01:00:00" : "01:01:02.5" # also blank out (overlay with blank window) the same.

Here's one with more detail

github.com/rdp/sensible-cinema/blob/master/zamples/scene_lists/example_scene_list.yml

Basically your job is to save an appropriate file like that somewhere, then start sensible-cinema and instruct it to use your new file.

To create it, basically you notice something you want to add to the list, add it, then go back a few seconds in your media player, and it should now be muted/blanked out automatically.

So here is a way to create your scene descriptions file. First create a new file [2], and now select it for use in sensible-cinema (even though it's still blank). Now “preview” your movie. As you do, you're going to add scenes to that file, and then test your additions.

So as you watch when you encounter a questionable scene, go back several seconds using your player's controls. When you encounter it again, track its beginning and ending time. One way to do this is to, just before and just after the scene, hit the space bar *in the sensible-cinema window*.

Hitting the space bar outputs the current time. If you hit it twice, once before and once after, you should now have two reasonably accurate “timestamps” displayed. Add the beginning and ending times to your scene descriptions file (changes will be automatically picked up), then review your additions by rewinding your player and letting it play through the scene in question again. It should now skip it appropriately. If not, adjust your timestamps and try again.

Once you're done then you can contribute your scene descriptions file if desired, back to the project [1].

1

github.com/rdp/sensible-cinema/issues

2

The easiest way to do this is to start sensible-cinema, then instead of choosing an existing file,

“right click” on the existing file “example_scene_list.yml” and choose “Copy” now right click below the list of files and choose “paste” This will create the file “example_scene_list Copy.yml” Right click on it, choose rename, and give it a better name. Now “right click -> Open” to open it in an editor (recommend installing notepad++ and using that).

FAQ ==

  1. Can I watch movies this way on my TV, not just on my computer?

  2. Not yet. And maybe. Currently you'll either need to attach your computer to your TV (buy some long cables, or a new graphics card, etc.) or get some computer that you can move closer to the TV and do the same (ex: buy a used older laptop with s-video out, use that). If you're really aggressive you could run an ethernet cable from your computer, as well [1]. I'd be happy to do a linux port of sensible-cinema if anybody requests it for their dedicated TV computer. There has also been some work toward getting your computer to stream “live” to your wii/ps3/xbox. github message me if you're interested in trying it out (testers wanted)!

  3. What movies does this work with?

  4. Any that you program it for :) (Assuming the player is compatible, which most probably are.)

  5. What movies are freely available to watch online?

  6. Not many are available free (hulu, youtube have a few), though Netflix has quite a few with its default subscription.

    Plus you can watch your existing DVD's, or rent or borrow DVD's and watch them using sensible-cinema.

  7. Why does my mouse bounce up and down while sensible-cinema is going?

  8. This enables your player to keep its on-screen time tracker, which in turn allows sensible-cinema to track where you're at. Message me if this bugs you too much and we'll see what we can do for it.

  9. Why does it seem really laggy at time detection at the beginning?

  10. It takes it awhile to warm up its digit detection. Ping me if you would like to see this improved speed-wise.

1

ps3mediaserver.org/forum/viewtopic.php?f=6&t=5731#p34279

Advanced Usage ==

You could specify the scene descriptions list and player list on the command-line, if you don't want to have to pick them each time, like:

C:\> jruby -S sensible-cinema scene_descriptions_list.yml player_description.yml

Also if you specify “test” for the scene descriptions file, it will pause 4s, take a snapshot of the player, then exit. You can also specify -v or -t if you want to enable more verbose (chatty) output.

Thanks ==

Thanks to Jarmo for the win32-screenshot gem, mini_magick gem authors, jruby guys, etc.

The combination made programming this actually somewhat of a pleasure.

License ==

See the LICENSE file for licensing, usage terms (basically gplv3).

Related ==

The concept isn't too novel:

en.wikipedia.org/wiki/Edit_decision_list (linear editing tool) www.imdb.com/swiki/special?ParentalGuideHelp search for “scene description” www.oreillynet.com/sysadmin/blog/2005/06/make_your_own_phantom_edit_wit.html

imdb.com tends to have reasonably good lists of what occurs in movies (find a movie, click on “parent's guide” on the left). Sometimes it even lists the time signatures for events (ex: “Labyrinth” www.imdb.com/title/tt0047673/parentalguide) which you could use to translate into a sensible-cinema compatible list.

Feedback ==

Feedback, including feature requests, welcome.

github.com/rdp/sensible-cinema