picture home | art | events | music | rack extensions | downloads | pixel blog

omino pixel blog

pixels, motion, and scripting
david van brink // Tue 2009.04.7 21:05 // {qt_tools}

Snagging Video from Home Dvd’s

My dad recently transferred all his (our!) old 8mm movie reels to dvd. We’re talking 1957 to 1972 for this first batch. He sent me copies, three dvd’s worth.

It was pretty painless; he used yesvideo.com, which distributes through Costco. I think the pickup and delivery was at Costco. Quality seems a bit blurry, but maybe that’s the source.

Of course, I want to reedit the content a bit, in Final Cut and After Effects and all that. Turns out it was very easy to import the DVD’s into the Mac, in a usable format, with qt_tools!

(Download my command-line qt_tools here.)

The catch is, you need the Apple MPEG-2 Import Component either for $19.99 from Apple, or installed with Final Cut.

All the video lives in a .VOB file. The biggest ones are usually the content you want; the littlest ones are usually menu loops. Using qt_tools, we convert VOB to quicktime. Well, mp4, anyway.

qt_export --dodialog VTS_01_1.VOB ~/mp4s/VTS_01_1.mp4 --savesettings=mp4_pretty_good.st

I found mp4 at about 5000 kbits/second looked ok.

This only works on personal dvd’s, of course. Unencrypted.

oh, i dont know. what do you think?


david van brink // Sat 2009.04.4 10:49 // {houdini}

houdini

Lately been trying 3d apps, looking for my next toy.

tubey.jpg
Quick recap of 3d software that I’ve used or recently tried:

LightWave. Fluent. This app has everything except proper instancing. Crufty bizarro-world interface… and yet, gets the job done. Expressions and scripting available.

modo. Fluent. Smooth as silk. Clean and modern UI. Like lightwave, but from this universe, instead of the Amiga. Still lacks expressions, limited animation, and no whizbangery (no bones, particles, or dynamics). Yet.

Cinema 4D (c4d). Comes so highly recommended. Only tried it for an hour or two. Lovely modern app. I could see getting a lot done with this. Scripting and expressions. The UI is modern and responsive.

Maya. I want to like it, because I’ve seen great stuff come out of it (from people who are by far better artists than I, alas). But I feel the weight of history in it, it remains inscrutable to me. I have an expert friend who is going to sit down with me and give me a good dose of Getting-It. I hope. I love scripting, that won’t be the obstacle.

Houdini. Love at first click.

Most apps aspire to give you a clean well-lighted crafts studio, with the kiln warmed up, the tools spread out before you.

Houdini gives you a fully stocked laboratory, soldering iron (1), screwdriver (1), wirecutters (1), and a high-voltage supply rail. Go!

This means there’s a high fixed overhead to get anything done. But it sure lends itself to quirky algorithmic experiments.

The picture at the top, and the bottom, are relatively trivial Houdini documents with some stacked operators. The bottom one uses random expressions to control the height of the blocks-stacks. (The stars part is straight from a tutorial on the company site.)

star.jpg

oh, i dont know. what do you think?


david van brink // Wed 2009.04.1 07:21 // {after effects}

AE: Compositing Lights

Long, long ago I saw an article or talk by Paul Haeberli, of SGI. Oh, he covered many interesting and clever graphics tricks. One of them was the idea of “synthetic lighting”, or, “doing lighting in post”.

He has a page about it, here.

The idea is pretty simple. If you have images (or animations) of individual lights, you can add them together to get multiple lights. It appears to be a relatively common render feature these days, but I’d never played with it before. So here goes.

+


=

You can color and mask them, too, to get some pretty nifty effects, all from the same source images.

The pictures above, showing my infantile modeling skills, were done in Luxology modo, using full radiosity render. This can take a while! 10 minutes per low res frame, about.

The youtube video below shows some further examples of getting liveliness out of just a few frames, using this idea of additive post-process lighting.

oh, i dont know. what do you think?


david van brink // Tue 2009.03.17 00:27 // {after effects}

AE: A Stupid Text-Control Trick

Here’s a little movie that demonstrates a text track being used to “trigger” the opacity of another track.

Controlling Pip Opacity From Text

I needed a blinking pip. (It’s actually for an interesting optical effect… but for now, we’ll just talk about the pip.) Rather than keyframing each blink, I used a Text track where A is a very dim blink, and Z is a very bright blink. The blinks all have the same luminous decay. Every keyframe on the Text track triggers a new blink.

The expression to do this is actually a little program. (Exactly what some artists hate…)

Here’s the expression for controlling the Pip’s opacity. It’s in 3 parts: 1) Find the most recent Text track keyframe, 2) See what letter it was, from A to Z, and 3) Set the opacity, taking into account the brightness and how long it’s been decaying.

// find most recent key
var s = thisComp.layer("controlTrack").text.sourceText; // score layer
var n = s.numKeys;
var kValue = "A"; // default value
var kTime = 0;
for(var i = 1; i <= n; i++)
{
	var k = s.key(i);
	if(k.time <= time)
	{
		// only care if there's a char in our position.
		var a = k.value.charAt(0).toUpperCase();
		if(a >= "A" && a <= "Z")
		{
			kValue = a;
			kTime = k.time;
		}
	}
}

// now, how long ago was that?
var age = time - kTime;

// map character a-z to 0.0-1.0
kValue = kValue.charCodeAt(0);
kValue -= 65;
kValue = kValue / 25.0;

// decay appropriately
var result = kValue * Math.pow(0.3, age) * transform.opacity;

// done.
result

Why do this tricky control business with a text track, instead of just keyframing the flashes more directly? This way, the behavior is very well specified... and even more so for the next movie.

Controlling Five Pips With a Text Track

You can easily see what's going on here. Five characters control five pip's blinks.

The clever bit was to avoid pasting that monster expression from above into five different tracks. Instead, a single slider control track is driven from the text, and shows the first pip's blinking at time=0, the second pip's at time=300, the third's at time=600, and so on. The whole animation is 20 seconds, so there's plenty of room on the timeline for this.

Each pip's opacity is driven from the appropriate section of this slider channel:

pip0 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 0*300)

pip1 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 1*300)

pip2 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 2*300)

... and so on.

So, why pile this cleverness atop an already tricky expression? Because with an expression that tricky, anything is better than duplicating five times across different tracks!

Here's the expression, which extracts brightness from the text track, for each position, at times separated by 300 seconds.

// Allow different sections of this track to extract the brightness for each pip.
// we divide it up into 5 minute segments (300 seconds). To find out your brightness
// at a particular time, examine *this* track at time + 300 * pipNumber.
//
// This is an alternative to duplicating the rather ornate expression into each pip, at
// the expense, of course, of complexity.
//

var segmentDuration = 300;
var segmentIndex = Math.floor(time / segmentDuration);
var segmentTime = time - segmentIndex * segmentDuration + .01; // local time... plus 1/100 for roundoff

// find most recent key
var s = thisComp.layer("controlTrack").text.sourceText; // score layer
var n = s.numKeys;
var kValue = "A"; // default value
var kTime = 0;
for(var i = 1; i <= n; i++)
{
	var k = s.key(i);
	if(k.time <= segmentTime)
	{
		// only care if there's a char in our position.
		var a = k.value.charAt(segmentIndex).toUpperCase();
		if(a >= "A" && a <= "Z")
		{
			kValue = a;
			kTime = k.time;
		}
	}
}

// now, how long ago was that?
var age = segmentTime - kTime;

// map score character a-z to 0.0-1.0
kValue = kValue.charCodeAt(0);
kValue -= 65;
kValue = kValue / 25.0;

// decay appropriately
var result = kValue * Math.pow(0.3, age);

result

And lastly, here's the self-contained After Effects project.

1 comments
Henry James // Wed 2010.01.13 08:298:29 am

enjoy

oh, i dont know. what do you think?



Deprecated: Function the_block_template_skip_link is deprecated since version 6.4.0! Use wp_enqueue_block_template_skip_link() instead. in /home/polyomino/omino.com/pixelblog/wp-includes/functions.php on line 6121

0.0281s
(c) 2003-2023 omino.com / contact poly@omino.com