Capturing Video (How I Did It)

July 30th, 2009 by Mitch Frazier in

Your rating: None Average: 4.8 (4 votes)

One of the common questions we get here at linuxjournal.com is how we produce our videos. Shawn produced a howto video on some ways of doing it. The following describes how I capture my videos and also the script that I use to add the Linux Journal logo watermark to it.

The video capture howto part of the article is fairly simple: I use xvidcap:

$ xvidcap --cap_geometry 640x480

The --cap_geometry argument sets the initial size of the capture area so that I always get the same size video. This is also a requirement for my watermark adding script.

xvidcap.jpg

I keep my videos short and just recapture them if I make a mistake during the capture process. If you need to capture long videos, redoing the entire thing each time you make a mistake is probably not feasible so you'll need to use some kind of video editing tool for the final editing. Numerous video editing tools exist, check out our recent articles on LiVES: LiVES1, LiVES2, and LiVES3.

A couple of notes about xvidcap: it, at least the version that I'm using, tends to crash quite often. Don't attempt to capture and review the captured video more than a couple times without restarting xvidcap. If you have a recalcitrant audio setup, as I seem to, run a quick "test test test" capture before you dive in to make sure everything is working correctly and your sound level is set correctly. By default xvidcap saves captured videos to the file test-0000.mpeg, make sure to rename the file if you want to save it before capturing a new video.

Once I've got a video captured I add the Linux Journal logo watermark to the video by running my add-logo.sh script:

$ sh add-logo.sh --left video.mpeg

The script accepts either --left or --right and uses that to determine which image file to use (I have 2 files, one with the logo on the left and the other on the right). If --left is specified it looks for the file logo-left-640x480.jpg, if --right, then logo-right-640x480.jpg. The geometry portion of the overlay file name (eg 640x480) is based on the size of the captured video, so if you were to capture at 1024x768 you'd need a file named logo-left-1024x768.jpg. To create an overlay image you merely need an image or the right size with a gray background, specifically the color #808080.

When the script runs it adds the overlay to the input video and creates two output videos of the same base name, one with a .mp4 extension and one with a .ogv extension. The script also accepts the option --remove-audio, which removes the audio track from the output videos.

One of the things in the script that you will probably need to change is the ffmpeg command that does the overlay:

ffmpeg -sameq $opts -i $mpeg -vhook "/usr/lib64/vhook/watermark.so -f $logo" $mp4

The location of the watermark library will most likely be different on your system (I use openSUSE). If you have a very recent version of ffmpeg you may even need to change how this is done as the -vhook capability may have been removed as it's been deprecated and replaced by a different mechanism.

The full source code for the add-logo.sh script appears below:

#!/bin/bash

function usage()
{
	if [[ "$*" ]]; then
		echo "$*" >&2
	fi

	cat >&2 <<EOF
Usage: $(basename $0) OPTIONS FILE.mpeg
  --left          Add logo on left side
  --right         Add logo on right side
  --remove-audio  Remove audio stream from converted videos
EOF
	exit 1
}

function error()
{
	echo "$*" >&2
	exit 1
}


#######################################################################
left=0
right=0
remove_audio=0
mpeg=
while [[ "$1" ]]
do
	case "$1" in
	--left)
		left=1
		right=0
		shift
		;;
	--right)
		left=0
		right=1
		shift
		;;
	--remove-audio)
		remove_audio=1
		shift
		;;
	-*)
		usage "Unrecognized option $1"
		;;
	*)
		if [[ "$mpeg" ]]; then usage "Unexpected argument: $1"; fi
		mpeg=$1
		shift
		mext="${mpeg#*.}"
		if [[ "$mext" != 'mpeg' ]]; then error "Invalid mpeg file: $mpeg"; fi
		;;
	esac
done

if [[ ! "$mpeg" ]]; then usage; fi

geometry=$(file $mpeg | grep -P -o '\d+ x \d+' | tr -d ' ')
if   [[ $left -eq 1 ]]; then
	logo=logo-left-$geometry.jpg
elif [[ $right -eq 1 ]]; then
	logo=logo-right-$geometry.jpg
else
	error "Specify one of --left or --right"
fi

if [[ ! -f $logo ]]; then error "Logo file not found: $logo"; fi

if [[ $remove_audio -ne 0 ]]; then opts='-an'; fi

mp4=$(basename $mpeg .mpeg).mp4
ogv=$(basename $mpeg .mpeg).ogv

rm -f $mp4 $ogv
ffmpeg -sameq $opts -i $mpeg -vhook "/usr/lib64/vhook/watermark.so -f $logo" $mp4
ffmpeg -sameq $opts -i $mp4 $ogv


# vim: tabstop=4: shiftwidth=4: noexpandtab:
# kate: tab-width 4; indent-width 4; replace-tabs false;
__________________________

Mitch Frazier is an Associate Editor for Linux Journal and the Web Editor for linuxjournal.com.

AttachmentSize
xvidcap.jpg33.62 KB
add-logo.sh_.txt1.49 KB


Special Magazine Offer -- Free Gift with Subscription
Receive a free digital copy of Linux Journal's System Administration Special Edition as well as instant online access to current and past issues. CLICK HERE for offer

Linux Journal: delivering readers the advice and inspiration they need to get the most out of their Linux systems since 1994.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
SamSam's picture

How to increase/slow a scene

On September 16th, 2009 SamSam (not verified) says:

Hi,

I noticed that some videos made by Shawn Powers have some scenes where the playback is increased.
Do you know how this is made? What is the tool used? Kino, avidemux, other?

Thanks for you feedback.

Sam

SamSam's picture

I found the answer using

On September 17th, 2009 SamSam (not verified) says:

I found the answer using ffmpeg:


------------------------------------------------
#!/bin/bash

# Description: make time lapse video
# Usage: time-lapse.sh
# Source Video: the video that you are wanting to speed up
# Destination File: the file where the video will be saved
# Frames: the number of frames to pull per second (1 will speed it up the most, 10 will be slower)

mkdir ffmpeg_temp
ffmpeg -i $1 -r $3 -f image2 ffmpeg_temp/%05d.png
ffmpeg -i ffmpeg_temp/%05d.png -b 512 $2
rm -rf ./ffmpeg_temp
------------------------------------------------

source: http://wp.pr0gr4mm3r.com/linux/how-to-create-a-time-lapse-video-using-ffmpeg/

Sam

Anonymous Coward's picture

Tech tips

On August 3rd, 2009 Anonymous Coward (not verified) says:

Heh, maybe you should talk to Shawn about verifying the sound level before recording. The intro/outtro on his tech tips are so quiet I can barely hear them, even with my volume turned all the way up (I have to turn up the volume for the main part of the tech tip, too).

Anonymous's picture

great tool

On August 1st, 2009 Anonymous (not verified) says:

This will be a great tool for creating how-to videos for end users and new help desk employees at my job. Thanks for the tips. Can run windows virtual machine and capture for windows how-tos

cantormath's picture

Adding Audio?

On July 31st, 2009 cantormath (not verified) says:

Do you add your audio after the fact or do you record the audio with xvidcap? If you add the audio after, what do you use?

Mitch Frazier's picture

With xvidcap

On July 31st, 2009 Mitch Frazier says:

I record the audio at the same time as the video (with xvidcap).

__________________________

Mitch Frazier is an Associate Editor for Linux Journal and the Web Editor for linuxjournal.com.

Anonymous's picture

To audio. Use

On July 31st, 2009 Anonymous (not verified) says:

To audio.
Use recordmydesktop instead

Mitch Frazier's picture

Crashed For Me

On July 31st, 2009 Mitch Frazier says:

As I mentioned above xvidcap crashes once in a while, on the other hand recordmydesktop crashed all the time.

__________________________

Mitch Frazier is an Associate Editor for Linux Journal and the Web Editor for linuxjournal.com.

Anonymous's picture

audio

On July 30th, 2009 Anonymous (not verified) says:

Is there a method to capture system/application sounds along with the video being captured?

Mitch Frazier's picture

Yes

On August 1st, 2009 Mitch Frazier says:

Said capability does exist, unfortunately I don't know how to do it, fortunately though our in-house expert, Dave Phillips, is helping me figure out how to make it work. I will post more when I have it working.

__________________________

Mitch Frazier is an Associate Editor for Linux Journal and the Web Editor for linuxjournal.com.

Post new comment

Please note that comments may not appear immediately, so there is no need to repost your comment.
The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <pre> <ul> <ol> <li> <dl> <dt> <dd> <i> <b>
  • Lines and paragraphs break automatically.

More information about formatting options

Newsletter

Each week Linux Journal editors will tell you what's hot in the world of Linux. You will receive late breaking news, technical tips and tricks, and links to in-depth stories featured on www.linuxjournal.com.
Sign up for our Email Newsletter

Tech Tip Videos

From the Magazine

December 2009, #188

If last month's Infrastrucuture issue was too "big" for you then try on this month's Embedded issue. Find out how to use Player for programming mobile robots, build a humidity controller for your root cellar, find out how to reduce the boot time of your embedded system, and if you're new to embedded systems find out the basics that go into one. You can also read about the Beagle Board, the Mesh Potato and a spate of other interestingly named items. And along with our regular columns don't miss our new monthly column: Economy Size Geek.


Read this issue