Optical audio on film has been a critical part of the presentation of motion pictures since the 1920s when variable-area/variable-density was first introduced. Converting scans of film can be difficult, and extracting audio moreso. There has been a very good tool for the past decade, AEO-Light, that is popular to use to convert the audio. However, the codebase is in C++, and it is difficult to understand how it works, and to add new features to. As a result, this project is to create a modern Optical to Digital conversion tool, written in python, that can convert optical audio of all shapes and sizes (possibly other formats too like Dolby-Digital or SDDS) and Dolby A/SR easily and effectivly. Also, another important goal is that anyone can understand how the audio conversions work and can extend the functionality into their own projects too.
- Sound-on-film https://en.wikipedia.org/wiki/Sound-on-film
- Dolby Stereo https://en.wikipedia.org/wiki/Dolby_Stereo
- Dolby SR https://en.wikipedia.org/wiki/Dolby_SR
- Dolby Digital https://en.wikipedia.org/wiki/Dolby_Digital
A basic web-based application now exists that converts individual images that contain Optical Audio to a .wav that is subsequently downloaded. More features are being added. Also, the KylesOpticalDecoder.py can be used standalone in CLI, allowing for other programs/scripting to run it in a pipeline.
Python CLI tool that can extract film optical audio
- Python 3.10+
- Node.js 18+
First time: start-dev-fresh.sh
Afterwards: start-dev.sh
Backend (Python):
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows
pip install opencv-python numpy natsort scipy fastapi uvicorn pydanticFrontend (React):
cd frontend
npm installStart the backend server:
python server.pyStart the frontend dev server (in a separate terminal):
cd frontend
npm run devThen open http://localhost:5173 in your browser.
KylesOpticalDecoder.py can also be used standalone from the command line:
python KylesOpticalDecoder.py --helpTODO
This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.
- Kyle Mikolajczyk
- Will Dirkschka
- Ben Peters
- Thomas Piccicone (35mm Scan Examples)
