During my time at Kink.com, I was tasked with automating as much of the post-production workflow as possible. My major software projects included:
- A robust ingest and expiration strategy for raw content shot on tapeless cameras. This was implemented in Perl to take advantage of suidperl, as file ownership changes were required to keep the content secure.
- Automating all video-on-demand encoding for final distribution into a variety of file formats, using a farm of transcoders running Rhozet's Carbon Coder via their XML API, backed by a large EMC SAN and various CDNs. This is implemented in PHP to take advantage of Kink's in-house PHP expertise. It uses ffmpeg and ImageMagick to remove old copyright information from video files, takes advantage of a variety of other OSS video tools to combine video files, and stores data in MySQL.
- Automatic live show control. The most recent iteration uses PHP scripts called from cron, which query the database for show status and communicate via ssh with OSX-based video encoders running Telestream Wirecast. Wirecast is controlled with Applescript, and video files are automatically moved and archived at the conclusion of a show.
- Previous live show iterations. An earlier version of the live product used BitGravity's video encoder. This encoder is based on a custom build of ffmpeg that produces a nonstandard h.264 video file, running on OSX. We had trouble ingesting video on OSX, so I reverse-engineered their changes to ffmpeg by examining the output files, and ported their encoder to Linux. I'm glad we stopped using this solution. ffmpeg is not a reasonable live encoder.
- Automated management of the ~80 terabyte archive of edited, full-quality footage. I wrote code to re-encode ten years of archived footage to current Internet video distribution standards, while organizing and standardizing its largely ad-hoc file structure. This code, once completed, took nearly a year to run. I kept tabs on it regularly, updating cpu usage and storage projections.
- Occasional MySQL query performance tuning for the development team.
I did a lot of other stuff at Kink, but that's detailed on other pages.