Dissertation Project (Collab Video)

During my third year studying Computer Science at the University of Nottingham, I completed an individual dissertation module. For this, I was required to create a piece of software, working from an intial concept, designing the solution, developing and finally testing.

The core idea of the project was to create a system that would allow a number of remote video editors to collaborate on a single project together. It was inspired by my work with RASA Studios on the Noxsquad Gameshow: Season 1, where a number of editors needed to contribute to different parts of any given episode. My system allowed for the work on a project to be distributed between the editors such that each could contribute “clips” (i.e. fully edited sections of the project), and all of these could then be stitched into a single output video. A number of options could be applied to each clip individually - the user could adjust the start and end time of each clip, and change the volume of each clip (with this functionality being extendable to add more options in the future).

The technologies that I chose for this project were a combination of Python, MongoDB, and FFmpeg. Python was used in order to provide the logic for the webserver (using Flask), as well as sending emails (using Flask-Mail), communicating with the MongoDB database (using PyMongo, interfacing with FFmpeg, handling video files stored on the hard disk. Additionally, MediaInfo was used in order to determine the length of video clips.

A feature that I’m particularly proud of is the ability for the server to interface with FFmpeg. The main functionality of the system is provided by FFmpeg’s “complex filtergraphs”, which provides the ability to concatenate files, and apply a number of filters to each file individually. By utilising these, the software could be extended in the future by adding more filters from this list as options for clips (e.g. applying low/highpass filters to the audio, or blurring a certain clip).

If I was to do something like this in the future, I would adjust how I set out the initial plan for the work. Originally, my plan was to implement all of the back end (server code, including the API) during the first semester, and then the front end (web pages, client-side code) in the second semester. However, I found that a lot of the code in the front and back end influenced one another. Often I would realise while working on one of the web pages (e.g. the user management page) that additional back end code would be required (e.g. a function that returned all email addresses for the guests in a project). Therefore, in order to let projects run more smoothly, I would allow myself to be more flexible and instead organise plans by features (such as video manipulation code, or user management code).

Overall, I achieved a mark of 72% (a first) for my dissertation, and thoroughly enjoyed the project as a whole.