External Captions for Video Installations (extsub)

processes and displays captions on a graphic LCD display while simultaneously playing fullscreen HD video on a separate monitor

Similar projects worth following
External Captions for Video Installations (extsub) plays fullscreen video (up to full HD) while simultaneously processing and displaying captions/subtitles in one or more selectable languages on a separate graphic LCD display. It is an affordable (~$150 USD per unit), easy-to-build, easy-to-maintain, open source project using completely off-the-shelf hardware.


"Approximately 15% of [U.S.] adults (37.5 million) aged 18 and over report some trouble hearing. " * Museums and art galleries that exhibit historical films or video artworks rarely accommodate this population; when they do, it is with open captions, an expensive and clumsy solution that sits atop the image, obscuring up to 20% of the frame (and in many cases significantly altering the work). 


External Captions for Video Installations removes captions from the primary monitor and places them on an independent, secondary screen. Since the captions are no longer "burned into" the image, they are now dynamic, which can allow the viewer to opt-in or opt-out of captions and for the exhibitor to accommodate other languages.


External Captions for Video Installations is already being tested by public institutions:  Museum of the Moving Image in NYC, implemented a public beta for an exhibition that opened this summer (2017). Public institutions will only increasingly rely on exhibiting film and video, and External Captions for Video Installations ensures that these are accessible to the hearing-impaired, as well as non-native language speakers. A big incentive for public institutions to use extsub is cost: standard museum-quality media players start at a price of  around $250. External Captions for Video Installations uses off-the-shelf, open source hardware that costs closer to $150.



GPL 2.0



plain - 17.62 kB - 09/11/2017 at 20:55


up-to-date masters available at

Zip Archive - 14.69 MB - 09/11/2017 at 20:04


  • 1 × Raspberry Pi 2 Model B or above
  • 1 × Arduino Mega 2560
  • 1 × Crystalfontz CFAG24064A graphic LCD display
  • 1 × monitor
  • 1 × HDMI cable

View all 10 components

  • todos

    jasoneppink09/11/2017 at 21:15 0 comments

    If you're planning to use extsub to display more than one language, the software currently requires that SRT files for the same video have the same number of captions with the same start and end times, regardless of language, with a maximum of two lines per caption. (e.g. The demo video has 88 caption.) This limitation will be fixed in future iterations.

    I'm also working on accommodating other screens with better aesthetic capabilities. More soon on that!

  • see extsub in action!

    jasoneppink09/11/2017 at 20:50 0 comments

View all 2 project logs

  • 1

      1. Upload extsub.ino to your Arduino.

      2. Connect your devices as pictured in the diagram (or in step 4 below).

      3. Starting with a fresh Raspbian Lite install on your Raspberry Pi, run the following command:  

    sudo raspi-config
    • expand the file system (option #1)
    • set the Raspberry Pi to boot to console and turn off the splash screen (option #2)
    • enter your locale, timezone, and keyboard layout (option #4)
    • finish and reboot

      4. Update software:

    sudo apt-get update
    sudo apt-get dist-upgrade    

      5. Install dependencies:

    sudo apt-get install omxplayer python-dbus python-pip git
    sudo pip install -U srt pyserial

      6. Clone the repository:

    git clone

      7. Change to the extsub directory and update config.txt with your details:

    cd extsub
    nano config.txt

      (Press ctrl+x, y, then enter to exit and save.)

      8. Test that your video and subtitles work: 

  • 2

    If everything is working, press ctrl+c to kill, then follow these steps to run extsub at boot.

      1. Make executable:

    chmod 755

      2. Open /etc/rc.local:

    sudo nano /etc/rc.local

      and add this line so extsub starts at boot (assuming user and home directory are "pi"):

    sudo -u pi /home/pi/extsub/

      3. Reboot! Video will begin to play automatically.

    sudo reboot
  • 3
    Killing extsub

    If you have extsub setup to run on boot and need to stop it for any reason:

      1. Connect the Raspberry Pi to a network, reboot it, take note of the IP address, and log in via SSH (assuming user is "pi"):

    ssh pi@[IP Address]

      2. Kill all instances of

    sudo killall

View all 4 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates