Categories
General Linux Technical & Testing Video

Improvements to my convention videos, a process…

I’m always looking for ways to improve my work. That goes for pretty much anything I do, but lately it is convention videos that needed more improvement.

At Kollision Con I took 57 clips that I plan on making a Youtube video out of as seen in my previous post.

EDIT: here is the resulting video…
Youtube compilation video:

http://www.youtube.com/watch?v=5-21DA3E1eM

Keep in mind that I use Ubuntu (Kubuntu variant) and Pentax cameras, so any directions have that angle to them.

Step 1:
Use techniques in the field to improve video quality over my previous efforts. I went over the method I tried here. I didn’t use the main camera strap like I had in the linked article because it would interfere with using the camera for photos. I ended up trying to just get the camera straps on each camera stretched out away from me. I think it helped a bit. A lot more can be done, but I’d like to avoid expensive awkward stabilizer setups.

How the camera is used is just as important. My DSLRs have somewhat limited camera control in video, but I’ll give you are rundown on how I used them.

Manual focus, or pre-focus and then use manual.
Many DSLRs don’t have auto-focus in video mode, and my cameras are included in that group. Some other brands offer auto-focus in video recording mode, but it isn’t something you should use that often. Letting the camera control focus with large aperture lenses will probably result in video clips that don’t highlight what you feel is important unless you can dynamically select the focus point (I don’t know if that is possible with those cameras). Framing in video mode is just as important with still photo mode. Using manual focus allows you to easily use the entire frame to focus on and frame subjects with interesting angles.

Setting: Movie Aperture control (fixed, auto). Use FIXED mode. This allows you to control the aperture manually. A lot of artistic style video uses a wide aperture to limit depth of field. If you lens is f1.4 you can select that without letting the camera decide.

Setting: Exposure compensation, change depending on your goals.
Cranking down the exposure compensation allows you to create moody lighting or other effects where you don’t want mathematically perfect exposure. The camera will naturally try to “perfectly” exposure the scene, so you will need to use that setting to correct for things like blown out highlights from a bright window in the background.

AE-L (auto exposure lock): Set this after achieving the exposure you want.
Pentax cameras don’t currently have completely manual exposure control, so it is necessary to lock down the signal gain with the AE-L button. Otherwise when filming, the video will have a pulsing effect as your scene changes. For example, if most of your scene has white in the background and a person with a black shirt walks through pretty close to the camera, the camera will attempt to add gain to the signal so the black shirt is brighter. Locking down the exposure produces much higher quality video as long as you are mindful of your scenes. If you are moving from a very bright area to a dark one, it is best to just shoot a second clip with different exposure settings.

Step 2:
Improve video clip quality with software. Camera shake is the biggest problem, so I went in search of something to help.
Deshaker plugin for VirtualDub

The plugin works pretty well from my limited testing so far. I wanted to batch process the clips, so I figured out how to run multiple jobs in VirtualDub. The built-in job scripting is really bare-bones, so I had to resort to creating a Linux shell script that writes out a VirtualDub .jobs file with hard coded values for each video clip. The Linux script reads a directory and creates a chunk of VirtualDub jobs text for each.

The gist of the bash shell script file (I made the text small so it fits on the site. Select, copy, and paste it into a text editor to see it in detail):

#!/bin/bash

OUTPUTFILENAME='/linuxdir/linuxdir2/dsscript.jobs'
SOURCEDIRECTORYLINUX='/ws_dir/video_clips'
SOURCEDIRECTORY='z:\\\\ws_dir\\\\ws_dir2\\\\'
DESTINATIONDIRECTORY='z:\\\\wd_dir\\\\wd_dir2\\\\'

echo "changing directory..."
cd $SOURCEDIRECTORYLINUX

echo "creating file..."

echo '// $signature 0 1' > "$OUTPUTFILENAME"

echo "counting files..."
FILECOUNT=`ls -l | grep -v ^l | wc -l`
FILECOUNT=`expr $FILECOUNT - 1` 
echo '// $numjobs' " $FILECOUNT" >> "$OUTPUTFILENAME"

echo "starting loop..."

COUNTER=1
for file in `dir -d *` ; 
do
	SRCFILE="$SOURCEDIRECTORY$file"
	DESTFILE="$DESTINATIONDIRECTORY""ds$file"

	echo '' >> "$OUTPUTFILENAME"
	echo '// $job "Job '"$COUNTER"'"' >> "$OUTPUTFILENAME"
	echo '// $input'" $SRCFILE" >> "$OUTPUTFILENAME"
	echo '// $output'" $DESTFILE" >> "$OUTPUTFILENAME"
	echo '// $state 2' >> "$OUTPUTFILENAME"
	echo '// $start_time 01c01df3 c2eb68c0' >> "$OUTPUTFILENAME"
	echo '// $end_time 01c01df3 eb3d85b0' >> "$OUTPUTFILENAME"
	echo '// $script' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.Open("'"$SRCFILE"'");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetSource(1);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetMode(0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetInterleave(1,500,1,0,0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetClipMode(1,1);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetConversion(0,0,0,0,0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetVolume();' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.SetCompression();' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.EnableFilterGraph(0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetInputFormat(0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetOutputFormat(7);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetMode(3);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetSmartRendering(0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetPreserveEmptyFrames(0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetFrameRate2(0,0,1);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetIVTC(0, 0, 0, 0);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetCompression(...);' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.SetCompData(...,".......");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.filters.Clear();' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.filters.Add("Deshaker v3.0");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.filters.instance[0].Config("18|1..");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.RunNullVideoPass();' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.video.filters.instance[0].Config("18|2..");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.SaveAVI("'"$DESTFILE"'");' >> "$OUTPUTFILENAME"
	echo 'VirtualDub.audio.filters.Clear();' >> "$OUTPUTFILENAME"
	echo '// $endjob' >> "$OUTPUTFILENAME"

	COUNTER=`expr $COUNTER + 1` 
done
echo '// $done' >> "$OUTPUTFILENAME"
echo 'finished processing.'
exit

I edited down some of the echo lines in the loop because they were too long. Your best bet here is to use VirtualDub to generate those lines and replace them and anything else you want to change. You need to do the process by hand in VirtualDub and then select File>>Save Processing steps. Anything with VirtualDub.video is related to that except VirtualDub.Open(), VirtualDub.RunNullVideoPass(), and VirtualDub.SaveAVI() that I needed to add by hand.

SetCompression and SetCompData go together. They define the output compression method. Select an output compression format and then replace those lines. I was using FFMPEG with the lossless JPEG codec. My clips are pretty short, so I don’t think I’ll hit a video file size limit. Otherwise you will have to segment the video output.

VirtualDub.video.filters.instance[0].Config (two lines) define the two passes of the Deshaker plugin. Do each one by hand and save the processing steps. VirtualDub must be a bit inflexible, so the creator of Deshaker setup his plugin to have two distinct passes with a null video pass (or preview) in between.

Step 3: Better audio
Up until now I’ve been using creative commons licensed Attribution or Share-Alike audio files. Youtube doesn’t seem to like the use of CC audio in a commercial sense, so with that problem and just a general issue with finding decent songs, I’ve started researching royalty free stock music. While there seem to be quite a few sites out there, so far premiumbeat.com has the best interface and middle of the road pricing at $29.95 per song for a standard license that allows online use. When money is tight… that seems pretty expensive, but I feel it is important with my Photography Banzai channel to move on from creative commons music and I won’t use songs without permission like many users on Youtube do.

Along with stock music I’d like to get into producing my own. That of course will take a lot more time and money than a few stock track purchases. I’ve used some audio programs in the past, but nothing too extensive. Just recently with my Photography Banzai camera videos, I integrated a 5 second animated logo opening with a beat that I made in Linux Multimedia Studio. That is a free open source program that has a lot of functionality.

I’d like to go into more detail on a few of those topics in later postings.