Monday, May 10, 2010

Final Project

The effect I was going for is that I have Hiro Protagonist ,from the novel Snowcrash, entering the storage shed to practice with his samurai sword online. He has goggles that he puts on and this enters him into his online space in the dojo. So he enters the storage, puts on the goggles and his background changes as the dojo is loading into his goggles; next his new appearance begins loading and finishes, leaving him with a sword and ninja outfit; finally the dojo finishes loading up and fully appears. After this he begins practicing.

To achieve this effect I created two different masked images and masked them together with a separate mask. First I masked out the backgrounds to put the subject in the two different places. Next I took the moment the backgrounds were transitioning and created a mask for the foreground, so only the subject would be masked but the background would not.

The effect still needs some polishing and I believe the fault is that lighting for this effect should be more consistent for the right amount of color to be removed. I faced certain time constraints for my filming schedule but I will continue to work on this effect as I feel it has the possibility to turn out quite cool.

Here's the Code I used for the Final Project:


#!/bin/bash


# extract images from Original video files

echo "Extracting Images"

FILES=./*.avi
b=1

for i in $FILES

do

mkdir images$b

ffmpeg -i MaskTest$b.avi -f image2 images$b/%d.ppm

let b=$b+1

done

echo "Importing Backgrounds"

FILES=images4/*.ppm
b=1

mkdir EnterStorage
mkdir EnterStorage/Converted
mkdir EnterStorage/Comp


for i in $FILES

do

ppmchange -closeness=28 blue red images4/$b.ppm >EnterStorage/Converted/RED$b.ppm

ppmcolormask -color red EnterStorage/Converted/RED$b.ppm >EnterStorage/Converted/REDMASK$b.pbm

pamcomp background1/storage.ppm EnterStorage/Converted/RED$b.ppm -alpha=EnterStorage/Converted/REDMASK$b.pbm -

invert >EnterStorage/Comp/Comp$b.ppm


let b=$b+1

done

FILES=images5/*.ppm
b=1

mkdir StraightenGoggles
mkdir StraightenGoggles/Converted
mkdir StraightenGoggles/Comp


for i in $FILES

do

ppmchange -closeness=42 blue red images5/$b.ppm >StraightenGoggles/Converted/RED$b.ppm

ppmcolormask -color red StraightenGoggles/Converted/RED$b.ppm >StraightenGoggles/Converted/REDMASK$b.pbm

pamcomp background1/storagecloseup.ppm StraightenGoggles/Converted/RED$b.ppm -

alpha=StraightenGoggles/Converted/REDMASK$b.pbm -invert >StraightenGoggles/Comp/Comp$b.ppm


let b=$b+1

done

FILES=images6/*.ppm
b=1

mkdir Akimbo
mkdir Akimbo/Converted
mkdir Akimbo/Comp


for i in $FILES

do

ppmchange -closeness=42 blue red images6/$b.ppm >Akimbo/Converted/RED$b.ppm

ppmcolormask -color red Akimbo/Converted/RED$b.ppm >Akimbo/Converted/REDMASK$b.pbm

pamcomp background1/storagemediumshot.ppm Akimbo/Converted/RED$b.ppm -alpha=Akimbo/Converted/REDMASK$b.pbm -

invert >Akimbo/Comp/Comp$b.ppm


let b=$b+1

done



FILES=images7/*.ppm
b=1

mkdir Akimbo2
mkdir Akimbo2/Converted
mkdir Akimbo2/Comp


for i in $FILES

do

ppmchange -closeness=31 blue red images7/$b.ppm >Akimbo2/Converted/RED$b.ppm

ppmcolormask -color red Akimbo2/Converted/RED$b.ppm >Akimbo2/Converted/REDMASK$b.pbm

pamcomp background1/storagemedium2.ppm Akimbo2/Converted/RED$b.ppm -alpha=Akimbo2/Converted/REDMASK$b.pbm -

invert >Akimbo2/Comp/Comp$b.ppm


let b=$b+1

done

FILES=images9/*.ppm
b=1

mkdir NinjaSword
mkdir NinjaSword/Converted
mkdir NinjaSword/Comp


for i in $FILES

do

ppmchange -closeness=37 blue red images9/$b.ppm >NinjaSword/Converted/RED$b.ppm

ppmcolormask -color red NinjaSword/Converted/RED$b.ppm >NinjaSword/Converted/REDMASK$b.pbm

pamcomp background2/dojo.ppm NinjaSword/Converted/RED$b.ppm -alpha=NinjaSword/Converted/REDMASK$b.pbm -invert

>NinjaSword/Comp/Comp$b.ppm


let b=$b+1

done

#Creating Masked Backgrounds

echo "Creating Masked Backgrounds"

FILES=images2a/*.ppm
b=1

mkdir StorageToDojoBackground
mkdir StorageToDojoBackground/Converted
mkdir StorageToDojoBackground/Comp


for i in $FILES

do

ppmchange -closeness=37 blue red images2a/$b.ppm >StorageToDojoBackground/Converted/RED$b.ppm

ppmcolormask -color red StorageToDojoBackground/Converted/RED$b.ppm

>StorageToDojoBackground/Converted/REDMASK$b.pbm

pamcomp background2/dojo.ppm background1/storagemedium2.ppm -

alpha=StorageToDojoBackground/Converted/REDMASK$b.pbm -invert >StorageToDojoBackground/Comp/Comp$b.ppm


let b=$b+1

done

FILES=images2b/*.ppm
b=1

mkdir StorageToDojoBackground2
mkdir StorageToDojoBackground2/Converted
mkdir StorageToDojoBackground2/Comp


for i in $FILES

do

ppmchange -closeness=37 blue red images2b/$b.ppm >StorageToDojoBackground2/Converted/RED$b.ppm

ppmcolormask -color red StorageToDojoBackground2/Converted/RED$b.ppm

>StorageToDojoBackground/Converted/REDMASK$b.pbm

pamcomp background1/storagemedium2.ppm background2/dojo.ppm -

alpha=StorageToDojoBackground/Converted/REDMASK$b.pbm -invert >StorageToDojoBackground2/Comp/Comp$b.ppm


let b=$b+1

done

FILES=images11/*.ppm
b=1

mkdir End
mkdir End/Converted
mkdir End/Comp


for i in $FILES

do

ppmchange -closeness=26 blue red images11/$b.ppm >End/Converted/RED$b.ppm

ppmcolormask -color red End/Converted/RED$b.ppm >End/Converted/REDMASK$b.pbm

pamcomp background2/Dojocloseup.ppm End/Converted/RED$b.ppm -alpha=End/Converted/REDMASK$b.pbm -invert

>End/Comp/Comp$b.ppm

let b=$b+1

done



#Inputting Masked Backgrounds

echo "Inputting Masked Backgrounds"


FILES=StorageToDojoBackground/Comp/*.ppm
b=1

mkdir StorageToDojoComp


for i in $FILES

do


pamcomp StorageToDojoBackground/Comp/Comp$b.ppm Akimbo2/Converted/RED53.ppm -

alpha=Akimbo2/Converted/REDMASK53.pbm -invert >StorageToDojoComp/Comp$b.ppm


let b=$b+1

done

FILES=StorageToDojoBackground2/Comp/*.ppm
b=1



for i in $FILES

do


pamcomp StorageToDojoBackground2/Comp/Comp$b.ppm NinjaSword/Converted/RED$b.ppm -

alpha=NinjaSword/Converted/REDMASK$b.pbm -invert >NinjaSword/Comp/Comp$b.ppm


let b=$b+1

done



FILES=images8a/*.ppm
b=1



mkdir WardrobeChange
mkdir WardrobeChange/Converted
mkdir WardrobeChange/Comp


for i in $FILES

do

ppmchange -closeness=37 blue red images8a/$b.ppm >WardrobeChange/Converted/RED$b.ppm

ppmcolormask -color red WardrobeChange/Converted/RED$b.ppm >WardrobeChange/Converted/REDMASK$b.pbm

pamcomp StorageToDojoComp/Comp61.ppm NinjaSword/Comp/Comp1.ppm -alpha=WardrobeChange/Converted/REDMASK$b.pbm

>WardrobeChange/Comp/Comp$b.ppm


let b=$b+1

done


FILES=images8b/*.ppm
b=1



mkdir WardrobeChange2
mkdir WardrobeChange2/Converted
mkdir WardrobeChange2/Comp


for i in $FILES

do

ppmchange -closeness=37 blue red images8b/$b.ppm >WardrobeChange2/Converted/RED$b.ppm

ppmcolormask -color red WardrobeChange2/Converted/RED$b.ppm >WardrobeChange2/Converted/REDMASK$b.pbm

pamcomp NinjaSword/Comp/Comp1.ppm StorageToDojoComp/Comp61.ppm -alpha=WardrobeChange2/Converted/REDMASK$b.pbm

-invert >WardrobeChange2/Comp/Comp$b.ppm


let b=$b+1

done

#Compiling avi Videos

echo "Compiling Avi Files"


ffmpeg -f image2 -i EnterStorage/Comp/Comp%d.ppm 1.avi

ffmpeg -f image2 -i StraightenGoggles/Comp/Comp%d.ppm 2.avi

ffmpeg -f image2 -i Akimbo/Comp/Comp%d.ppm 3.avi

ffmpeg -f image2 -i Akimbo2/Comp/Comp%d.ppm 4.avi

ffmpeg -f image2 -i StorageToDojoComp/Comp%d.ppm 5.avi

ffmpeg -f image2 -i WardrobeChange/Comp/Comp%d.ppm 6.avi

ffmpeg -f image2 -i WardrobeChange2/Comp/Comp%d.ppm 7.avi

ffmpeg -f image2 -i NinjaSword/Comp/Comp%d.ppm 8.avi

ffmpeg -f image2 -i End/Comp/Comp%d.ppm 9.avi

#Creating Video

echo "Creating Final Video"

ffmpeg -i 1.avi -sameq intermediate1.mpg
ffmpeg -i 2.avi -sameq intermediate2.mpg
ffmpeg -i 3.avi -sameq intermediate3.mpg
ffmpeg -i 4.avi -sameq intermediate4.mpg
ffmpeg -i 5.avi -sameq intermediate5.mpg
ffmpeg -i 6.avi -sameq intermediate6.mpg
ffmpeg -i 7.avi -sameq intermediate7.mpg
ffmpeg -i 8.avi -sameq intermediate8.mpg
ffmpeg -i 9.avi -sameq intermediate9.mpg

cat intermediate1.mpg intermediate2.mpg intermediate3.mpg intermediate4.mpg intermediate5.mpg intermediate6.mpg

intermediate7.mpg intermediate8.mpg intermediate9.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -sameq FINALOUTPUT.avi


And Here is the final outcome: