Friday, June 4, 2010

How I started creating MovieCaptioner

To be honest, I'm not a programmer. I actually have a degree in Art (emphasis in drawing), and I often wonder what twists in the road of life led me to this point. MovieCaptioner seems to me to be a coming-together of different interests and knowledge I've gained over the years.

About 9 years ago, in my first days of my day job (multimedia specialist for a large college), I was lucky enough to be able to get hired on before my predecessor left. He was a gifted videographer who was moving to another state with his soon-to-be wife. That week he had showed me what he does with QuickTime Pro in regard to adding text tracks to QT movies. I found it quite fascinating and explored the capability even further. I was even eventually able to get a QT movie to trigger Javascript events, something Apple later disabled for fear of security holes, I guess. The problem with text tracks, though, is that it seems to be quite a complicated process for the average Joe. Overly complicated, I thought.

Years later, I was trying to figure out a good way to caption a video for a friend of mine who is deaf. I tried some of the software available for the Mac and either found them unintuitive or worse yet, they didn't even work. I started thinking about how text tracks were simply text files and that they could be written by a program easily, so I thought I'd give it a try. After learning some basic programming, I was soon putting together an interface that I thought would work. Since I didn't have a foot pedal, something that transcriptionists use when they play bits of an audio file they are trying to type, I decided to take advantage of QuickTime's ability to play a selected portion of a movie in a loop. I found this to be ideal for me to be able to listen to all the words of say a 4 second clip of the movie and be able to type just that portion. I also found that it occasionally cut out bits of words in the beginning, so I added an Overlap button to force the loop to start a second or so earlier. That way I could better hear what was being spoken. I was able to get it to save each caption to a list when I hit the Return key.

Please try MovieCaptioner to make your movies accessible. You can download a free 14 day demo.
This was great. Now I could easily make QT text files to import into the QuickTime Player. Then I thought, wouldn't it be cool to automate the text track import? I was surprised at how quickly I was able to figure this out. A bit of a hack, but hey, it worked! Now I had a little app that could not only create the text tracks, but import them as well. And I found that exporting to create a text transcript was a piece of cake.

It wasn't long after that, when I'd sent it out to a few people to try, someone from NASA asked if I could get it to do SAMI files for Windows Media movies. They were a Windows-based organization, but the creative department was all Mac people. Initially I thought "no", but as I looked into it, I remembered that the Flip4Mac plugin allowed for QuickTime to play WMV files. Cool! The rest was just creating the right format for the SAMI captions. No import needed with them. So now I had two exports that it was capable of doing.

I also explored the possibility of importing text. While it wasn't difficult initially, I wanted it to be able to break up text after a certain number of characters, and have it happen between words as well, so they wouldn't get cut off. This was quite frustrating, but I eventually figured it out. I even made the text limit per caption adjustable when I was done.

Within a month or two of that, Adobe announced that CS3 would support captioned video using the DFXP, Timed Text (TT) format. Again, another text-based format. I actually had it working the night Adobe announced it. My export list was getting longer.

After many changes over the coming months (and about a zillion bug fixes), I was contacted by someone from NOAA, who was using it to get different caption formats. He had SCC (line 21) caption files he got from someone else that he wanted to import to create the other formats with. I had explored this format previously and thought again "no way", but decided to at least give it an attempt. He supplied me with various SCC files and their matching videos. I was able to decode the binary numbers and figure out much of the format from a website created by MacPoodle. He also even helped me on a couple of occasions via email when I was stuck with a particular issue. After about 6 months of working late at night, I got it to import the SCC files with fairly good accuracy. It felt good to know that I was not only helping NASA now, but also NOAA! Very cool indeed.

After I got MovieCaptioner to import the SCC captions, I thought, hey, I might be able to reverse the process and be able to export them as well. This proved to be much more difficult than I thought. With importing, there was a lot of formatting I was able to just toss out the window. I just basically needed the text and the timecode decoded. Exporting, however, I needed to be able to create the whole shebang. This meant understanding the whole format. SCC is a pretty crazy format if you ask me. It allows up to four lines for each caption and only up to 32 characters per line. So I had to devise a scheme to force any export into that limitation. I decided to have it put forced line breaks where it could between words every 32 characters and also alert the user if the caption went beyond that. More late nights! This was a tough logic to figure out and was really frustrating. I was able to get it to simply put the captions left justified at first, but I knew I wanted them to be centered. This was an amazingly difficult logic to figure out as I'd have to figure out which of four lines was the longest, make sure that one is centered and make the others left-justified to that one. After working till midnight plus for many nights, I eventually figured it out, but it required me to input many, many lines of code by hand. It actually took two weeks just to input that much code, and I had to split up the function as it wouldn't even compile because it had reached some sort of size limit. Wow! But I got it to work! I was ecstatic.

The software started to gain in popularity once I added the ability to export SCC captions. There were many bumps in the road initially, but I was able to figure most out and independent video producers now had an inexpensive tool to create them. In the meantime, Apple released Final Cut Pro 7, which had the ability to import SCC captions when you print to tape. Great! I was also able to get it to import the SCC captions right into the QT movies similar to the embedded QT text tracks. It just required me to have a closedCaptionImporter plugin that was free from Apple.

I've since added other formats, such as STL for use in DVDs and SRT/SUB formats for YouTube.

I've had a ton of requests from users, and relatively few support questions to be honest. When I do get support questions, I see this as an opportunity to see how people are actually using it and how I can make it better and easier to use. I've helped several people using iChat's screen sharing capability as well. It's cool when you're on with someone as far away as Germany, Canada, and even Hawaii and you can show them in real time how to fix their problem.

Creating MovieCaptioner has opened some new doors for me and allowed me to create a lot of new friends in far away places. It is being used by people all over the world. It's nice to know my little app is making an impact in helping the deaf to read what the rest of us hear.

Please try MovieCaptioner to make your movies accessible. You can download a free 14 day demo.