Over at Oasis Digital, some of us work together in our St. Louis office, while others are almost entirely remote. I’ve written before about tools for distributed teams, and we’ve added at least one new tool since then: talk while drawing on a a whiteboard, record video, upload it to where the whole team can watch it. There are fancier ways to record a draw-and-talk session (for example, record audio of the speaker, and video of drawing on a Wacom tablet), but it’s hard to beat the ease of pointing a video camera and pressing Record.
This is effective, but I am disappointed by the state of video encoding today.
Good: Recording with a Video Camera
We tried various video cameras and still cameras with a video feature. There are problems:
- Some cameras have a short video length limit.
- Some cameras emit a high-pitched noise from their autofocus system, picked up by the microphone. (The worst offender I’ve heard so far is an Olympus camera. Many other cameras manage to autofocus quietly.)
- Some cameras have a hilariously poor microphone.
- Many cameras lack the ability to accept an external microphone.
- Some cameras have a hard time focusing on a whiteboard until there is enough written on it.
- Many cameras lack the depth of field to accommodate both a whiteboard and a person standing in front of it.
For example, I recorded a whiteboard session yesterday, 28 minutes of video, using a GoPro camera at 1080 HD (so that the whiteboard writing is clear). The GoPro camera did a good job. I’d prefer it have a narrower field of view (a longer lens) to yield a flatter, less distorted image, but it is acceptable for this impromptu daily use.
The GoPro produces high quality, but poorly compressed, MP4 video. In this example, the file size was ~5 GB for 38 minutes.
Bad: Uploading and Downloading
The question is: how to provide this video to others? We have a good internet connection at headquarters, but 5 GB still takes a while to upload and download. Even if the transfer speed was greatly improved, as a person who remembers computers with kilobytes of memory, I find 5 GB for 38 minutes morally offensive.
Good: Re-Encoding to Reduce File Sizer
The answer of course, is to re-encode the video. A better encoder can pack 38 minutes of HD video into much less than 5 GB. Keeping the resolution the same, with common encoding systems this 5 GB is easily reduced by 80% or more. If I’m willing to give up some resolution (1080 to 720), it can be reduced by 90%.
By the way, I describe this as a re-encoding rather than transcoding because most often we use the same encoder (H.264) for both. Sometimes we use Google’s VP8/9/WEBM/whatever, as that sounds like it might be “the future”.
Bad: Re-Encoding in the Cloud
I love the idea of making re-encoding someone else’s problem. Various companies offer a video encoding service in the cloud; for example Amazon has Elastic Transcoder. But that doesn’t solve the problem I actually have, which is that I want to never upload 5 GB in the first place.
Good: Ease of Re-Encoding / Transcoding
There are plenty of tools that will perform the re-encoding locally with a few clicks. I have used these recently, and many more in the past:
- iMovie
- ffmpeg (directly and via Miro Video Converter)
- Screenflow
Worse: Encoding Speed
With the computers I most often use (a MacBook air, a Mac Mini, various others) the encoding time for good compression is a multiple of real time. For example, my experience yesterday which led to this blog post was 38 minutes of video re-encoding in 3+ hours on my Air. (It would’ve been considerably faster than that on the faster Mac Mini, but still a long time).
Is There a Good Solution?
I’m hoping someone will point me to a piece of hardware that does high quality transcoding to H.264 or WEBM, at real-time speed or better, for a not-too-painful price. It seems like such a thing should exist. It is just computation, and there are ASICs to greatly speed some kinds of computations (like BitCoin mining) at low cost. There are GPUs, which speed video rendering, but from reviews I have seen the GPU based video encoders tend to do a poor-quality job, trading off video quality and compression rate for speed. Is there a box that speeds of transcoding greatly, while keeping high quality and high compression? Or the the only improvement a very fast (non-laptop) PC?
To properly cash in on the e-sports craze and “casting” or “streaming” or whatever the term is, Nvidia graphics cards now come with a feature that allows you to record your screen while you game.
The FAQ [http://www.geforce.com/geforce-experience/faq] says it’ll record a minute of footage at medium quality in 165MB, which should put you well below 5GB for 40 minutes of footage. Not sure what resolution “medium” quality is, though.
Perhaps you could load the GoPro footage on a machine with a Nvidia card, and then use ShadowPlay to re-record the video as it plays? Not all Nvidia cards support ShadowPlay, but I picked mine up for $200. Comes in handy for Counter-Strike Tuesdays as well.