Jobs

Here are a number of jobs (tasks and/or problems) that I'd like to complete but can't seem to find the time to do. They are typically things that would help my in my teaching and research, and sometimes things that would help others as well (students and staff). Or they are just things that I find interesting. Most, if not all are computer related.

The reason I'm posting this list is in case any students are interested in completing these jobs for me (or even better, have a solution already they can give me). If you are interested, then let me know or simply get started.

Completing these tasks is not directly related to any specific course - you will not get marks for it. However you may learn things that will help for your studies and therefore indirectly improve your grades. Also, there is no financial reward. Its not my intention to treat students as slaves: only choose to undertake a job if you are interested in the problem or technology.

Optimise Audio/Video Quality and File Size for Lectures

Background
I provide screencasts (with audio) of my lectures to students. Currently I provide the videos in both MPEG4 and WEBM formats. I believe the codecs I've chosen and their corresponding parameters produce reasonable trade-offs in terms of audio/video quality and file size. But there may be better options ...
Task
Experiment with different codec options to produce an optimal trade-off of audio/video quality and file size.
Requirements
  1. Must run on the command line in Ubuntu Linux 10.04 or later
Tools
ffmpeg, HandBrake, faac, flac, Bash shell script
Output
Bash shell script
Details
The inputs are two files: an MPEG4 screencast and a FLAC audio recording of the lecture. The screencast is created with ffmpeg using a command similar to below:
$ ffmpeg -v 0 -f x11grab -r 2 -s 1024x768 -i :0.0 -sameq -vcodec libx264 -vpre lossless_ultrafast -threads 0 screencast.m4v
This creates an MPEG4 H.264 encoded video file with resolution of 1024x768 and frame rate of 2 fps. The audio recording is created with sox using a command similar to below:
$ rec -q -r 44100 -b 16 -c 1 audio.flac
This creates a FLAC encoded audio file with 16-bit, 44100Hz sampling in mono (1 channel).

After the lecture the screencast and audio files are processed to create a MPEG4 and WEBM video file. Currently the two different codecs are used (MPEG4 and WEBM) as they are the most widely supported codecs by web browsers (see another job that aims to improve this). The current steps applied to create the WEBM are:

$ ffmpeg -i screencast.m4v -vcodec libvpx -r 2 -s 640x480 -i audio.flac -acodec libvorbis -ab 64000 -ac 1 video.webm
This creates a 640x480 resolution, 2fps video using the WEBM container format using the VP8 video codec and Vorbis audio codec. To create the MPEG4 video the steps are:
$ flac -d audio.flac
$ faac -b 64 audio.wav
$ ffmpeg -i screencast.m4v -vcodec copy -i audio.aac -acodec copy video.mp4
$ HandBrakeCLI -i video.mp4 -o video.m4v -e x264 -q 20.0 -a 1 -E faac -B 64 -6 mono -R Auto -D 0.0 -f mp4 -X 640  -m -x ref=2:bframes=2:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0
First the FLAC audio is converted to WAV (using flac) and then to AAC (using faac). Then the screencast and audio are combined to create an initial MPEG4 video. Then HandBrake is used to further process the MPEG4 (I can't even remember why - but without this the video.mp4 would not play in the browser). The task: find the optimal resolution, frame rates, sample size and rates, as well as codec options that when compared to the output of the above commands give either smaller file size and equivalent quality, or equivalent file size and better quality.

Use HTML5 to Make Lecture Videos Available to All Browsers

Background
I provide screencasts (with audio) of my lectures to students. Currently I provide the videos in both MPEG4 and WEBM formats via a HTML5 web page. I've configured the Apache web server so that ideally the video will be played in most popular browsers. But it doesn't, especially for mobile browsers.
Task
Recommend the HTML5 code, Apache web server configuration and maybe even video file format so that the videos can be played by a wide range of browsers.
Requirements
  1. Must use HTML5, in particular the video tag, to play the videos
  2. Must work for latest versions of Firefox, Internet Explorer, Safari and Opera
  3. Should work for latest versions of popular browsers on Android and iOS.
Tools
Apache web server, HTML5
Output
HTML5 code; Apache configuration directives
Details
Currently I've used the tutorial from to configure Apache and create the HTML5 code for the web page. For Apache, I've added the following directives to the file /etc/apache2/:

The web page is as follows:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<h1>Title</h1>

<div>
<video controls>
<source src='video.webm' type='video/webm; codecs="vp8.0, vorbis"'>
<source src='video.m4v' type='video/mp4; codecs="avc1, mp4a"'>
</video>
</div>

</body>
</html>
In Firefox 4 (and later versions) on both Ubuntu and Windows 7 as well as Internet Explorer 9 (in compatability mode) on Windows 7, the video is displayed in the browser. For Safari some students have reported it doesn't play (to view the video it must be downloaded and played in an external player). Similar for the default browser on Android. You should test for these and other browsers to see which ones work and which don't. Then find the HTML code (and/or Apache configuration) so that the videos works in the widest range of browsers.

Return to: Course List | Steven Gordon's Home | SIIT