Making a Video Recording Booth, Part 1: Brainstorming

My friends Jacqui and John got married, and they’ve asked me to provide a video booth/kiosk for their celebration party (in less than three weeks from now, eek!). The idea is that guests will be able to record their own video messages to the bride and groom – essentially a multimedia guestbook. This is very similar to the self-service photo booth, which has become a ‘must-have’ item at weddings and parties, and there are a number of commercial and open source photo booth software solutions available (SparkBooth, PhotoBoof, etc.)

I assumed that there would be similar software available for self-service video recording booths, but my Google-fu has largely failed me here. It seems that most of the software for this use is commercially developed and packaged with turn-key hardware solutions. I don’t have big bucks to spend here, so I won’t be buying/renting a commercial video booth. After much fruitless searching for a suitable product, I’ve determined that I’ll be writing my own video booth software.

My requirements for video booth software:

  1. Should have a simple, intuitive and bulletproof user interface. Anyone should be able to record a video without ever having used a computer before (I’m looking at you, Grandma), and the workflow must survive enthusiastic button-mashing by tipsy guests.
  2. Should not need expensive hardware (again, tipsy guests). I don’t have a powerful computer available to me for this project. This may be a challenging requirement, as video encoding in software is very CPU-intensive.
  3. Should be able to handle continuous use. If there’s a line of people waiting to record a greeting, a guest should be able to begin recording as soon as the previous person has finished their recording. This implies that I’ll either be encoding captured video/audio in real time or using background encoding tasks that are invisible to users, either of which may be a challenge considering my ‘no expensive hardware’ requirement.
  4. Should be able to record high quality video. I would hate see once-in-a-lifetime video memories look pixelated and crappy. My cell phone can take good video, so my video booth had better take great video. I’d be happiest with 1920×1080 (1080p HD), and I’d settle for 1280×720 (720p HD). A frame rate of 30FPS is preferable, but I’d go to 24 or 25FPS if needed, and I’d like to keep a data rate around 5000kbps. Absolute worst case scenario: 640×480 (SD) resolution at 24FPS and 500kbps data rate; I refuse to go any lower. I know I’m really challenging myself here, considering the need for cheap hardware and continuous use.

The spare computer that I have available for this project is an Acer Aspire AX1430. It’s got a wimpy little AMD E-450 processor, which is only slightly better than the dual-core Atoms.  The computer has 4GB of RAM, a 500GB HDD, and I’ve replaced the optical drive with a 32GB SSD. It’s essentially a high-end nettop, and doesn’t have much available horsepower for tasks like video encoding.  In order to keep resource usage as light as possible, the machine is running Lubuntu 12.04.

Other hardware that I have available to play with:

  • Logitech C260 webcam.
  • An Arduino microcontroller.
  • Wireless RF keyboard and mouse.
  • I’m considering using a Big Red Button for the user interface:

The user experience I have in mind is exceedingly simple:

  1. A webcam sits on top of a large monitor, which displays a full-screen preview of the video camera feed at all times. There won’t be a keyboard or mouse available, just a big illuminated red button in front of the monitor. In the idle (waiting) state, a text overlay invites the guest to “Press the button to begin recording.”
  2. When a guest presses the button, the text overlay gives them a quick countdown (3…2…1) and then recording begins. An overlay message (maybe including the ubiquitous flashing red circle ‘recording’ symbol) instructs the guest to “Press the button to stop recording.”  The big red button will flash during recording.
  3. The guest records their video message and then presses the button to complete their recording. A quick “Thank you!” message flashes, and then we’re back to the idle state, ready for the next person.

There won’t be an Internet connection at the party, so I’m not considering features like streaming video, automated uploading, email notifications, etc. at this time.

For the video capture and encoding backend, it looks like GStreamer is the de-facto choice as far as libraries go. I’ve used Processing to interface with arduino in the past, so I’d like to reuse some of that code (there’s a time crunch here!). There’s an implementation of GStreamer for Processing called GSVideo which seems to have garnered a substantial following, so that may be the best choice for the UX.

Now I’m off to run some GStreamer tests and see if my wimpy little computer will be capable of on-the-fly previewing and encoding of HD video. My suspicion is ‘no’, but I’m ever-hopeful! I’ll follow up soon with those results.

Advertisements

About Matt Greensmith
Sysadmin, robot-builder, linux geek, etc.

10 Responses to Making a Video Recording Booth, Part 1: Brainstorming

  1. mark says:

    Great idea!! I hope my daughter doesn’t catch wind of this cause she’s to be married on the 3rd of August. We’ll both be scrambling 🙂 . Anyhow a thought or 2 crossed my mind and thought I’d share.

    Guests at a reception more than likely are a little drunk. Well maybe more than a little:-) I might be concerned that the button might not get pushed sometimes to stop the recording. You could place a motion detector in the booth for a time out function .

    It would be funny if once motion was detected, before the button was pushed, the recording was secretly rolling. Then you could capture some “rehursal” footage of ” let’s do this” without them knowing. Lol

    • Ooh, these are great ideas! I really like the idea of recording whenever there’s motion. I think it would be possible to do this without relying on an eternal detector, by just detecting activity in the camera feed. If I captured video every time there’s motion, I could probably combine the results into a timelapse of the whole event. In that case, the button would just serve to generate timestamped ‘start’ and ‘end’ points, and I could extract the corresponding snippets from the larger motion-triggered videos.

  2. mark says:

    I’m curious how you would increment the file name for each new video…

    mov = new GSMovie(this, “movie.avi”);

    • I’ll probably have to use a pipeline object, since I want simultaneous previewing and file-recording on the stream. I’ve been playing with this, without much success so far. Regardless which type of object I use, it will have to be re-declared and re-instantiated for each output file.

  3. Jesse Decker says:

    Sounds like a fun project! I’m working on a Qt-based video recorder right now and I’m struggling with some random bugs. Admittedly, I’m trying to do keyframe detection, seamless file changes, audio/video preview and analysis alongside encode; things that are not strictly documented as easy-to-do.

    Would you be willing to share lessons learned, and even source code? I’m hoping that I’m missing some stupid-simple ways around these inconsistencies!

  4. Marco says:

    Hi Matt,

    i’m from germany and i have a almost working solution for our idea. My problem is the sound of the videos. I’m not able to record the sound (till now) !
    My tool shows the lifestream of a camera on the screen. If somebody is in the box and press a buzzer, a small movie with a countdown is shown on the screen. After this movie, the recording is starting and records a movie for 20 sec. after this an other video is shown with a “thank you” movie. And then the lifestream is on the screen again. For each movie an new file will be created. My code is written in Python and i have to say, that i’m a python beginner, so my code is very bad.

  5. Miguel says:

    Matt if you make it work please let me know I will be very interested on buying a copy from you
    thank you

    • Marco says:

      Hi,
      I’ve got it working with one small problem. The recording procedure is running in a own window. But the rest is working fine. If i find the time i’m working on it. If you are still interested contact me.
      Cheers Marco

  6. mani says:

    Hi

    I am interested in buying software like this for a video kiosk that I am currently putting together, can anyone help?

  7. Duncan says:

    Hi
    Did you get any further with this, I too would be interested in buying but the wedding I want it for is in about 6 weeks !!! I’ve been searching google and no luck.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s