Naucz się stabilizować ujęcia z lustrzanki i skorygować rolling shutter przy pomocy zaawansowanych technik w Adobe After Effects CS4.
Czasami zdarza się tak, że potrzebna jest stabilizacja ujęć kręconych z ręki lub przy użyciu innych narzędzi, które jednak mają wady techniczne – drgania lub wstrząsy.
W przypadku większości kamer wady techniczne takiego obrazu polegać będą na przesunięciu obrazu w osi X i Y i ewentualnie rozmyciu (motion blur). W przypadku lustrzanek lub innych kamer z przetwornikiem CMOS dochodzi do tego jeszcze problem tzw. rolling shutter, czyli pochylenie obrazu (skew), które jest wynikiem specyficznej konstrukcji DSLRów i jest ściśle skorelowane z ruchem kamery. Z tego powodu standardowe narzędzia stabilizujące obraz nie poradzą sobie z takim materiałem. Stabilizacja względem jednego punktu pozostawi wyraźne drgania spowodowane zmiennym pochyleniem obrazu.
Istnieje dość dobra kombinacja zewnętrznych narzędzi, która pozwala poradzić sobie z problemem stabilizacji i rolling shutter. Optymalnym rozwiązaniem wydaje się połączenie pluginów Core Melt’s Lock and Load oraz The Foundry Rolling Shutter Plugin. Niestety łączny ich koszt jest dość spoty (Rolling Shutter kosztuje 500 USD, Lock And Load – 150 USD). Porównanie i efekty działania tych narzędzi znajdziecie tutaj:
Podczas pracy nad ostatnim projektem musiałem użyć kilku ujęć, które były robione ze statywu umieszczonego na podnośniku budowlanym przy użyciu obiektywu bez stabilizacji. Materiał charakteryzował się mocnymi drganiami, które wydawały się trudne do skorygowania. Nie miałem ani powyższych pluginów, ani budżetu na ich zakup. Musiałem więc rozwiązać problem inaczej. Po przemyśleniu tematu i odświeżeniu trygonometrii znalazłem rozwiązanie, które daje dobre rezultaty i wymaga wyłącznie użycia Adobe After Effects.
Jak skorygować efekt rolling shutter?
Kąt alfa nachylenia prostej przechodzącej przez 2 punkty (x1,y1; x2,y2) względem układu współrzędnych wygląda tak:
alfa = arctan ((|x1 - x2|) / (|y1 - y2|))
Wyrażenie (poprawione) w języku skryptowym, jakie musimy przypisać dla współczynnika pochylenia w After Effects wygląda następująco:
skew = (radiansToDegrees(Math.atan(
Math.abs(
(motionTracker("Tracker 1")("Track Point 1").featureCenter[0]
- motionTracker("Tracker 1")("Track Point 2").featureCenter[0])
)
/ Math.abs(
(motionTracker("Tracker 1")("Track Point 1").featureCenter[1]
- motionTracker("Tracker 1")("Track Point 2").featureCenter[1])
)
))-a)*(-1)
Gdzie:
Całość musimy przemnożyć przez -1, gdyż korygujemy obliczone nachylenie, zatem skew musi przyjmować wielkość równą co do wartości, ale przeciwną co do znaku.
Jako że Math.atan zwraca na kąt w radianach, musimy wykonać konwersję przy pomocy funkcji radiansToDegrees.
(radiansToDegrees(Math.atan(
Math.abs(
(motionTracker("Tracker 1")("Track Point 1").featureCenter[0]
- motionTracker("Tracker 1")("Track Point 2").featureCenter[0])
)
/ Math.abs(
(motionTracker("Tracker 1")("Track Point 1").featureCenter[1]
- motionTracker("Tracker 1")("Track Point 2").featureCenter[1])
)
))-0)*(-1)
Tak wyglądają rezultaty. Klip porównuje surowy materiał, materiał ustabilizowany oraz materiał ustabilizowany i skorygowany opisanym algorytmem.
On the last shoot U should just use a good tripod;)
Michał, Thank you for your advice. However I think you missed one detail. Let me explain by posting a small BTS image

I get an error when I paste the script it says “Function Math.athan() is undefined”
Didn’t work for me as well as it did for you… Maybe I got the formula wrong, not sure. I had better results with deshaker. Thanks for posting the tutorial nonetheless.
The code that is posted definitely does not work. It yields an error. I had to check the image to extract the proper formula. I think my problem was the value in red to be copied and inserted into the formula. My number was 0.1 and it didn’t seem to do very much….
OK, I have checked the code and, indeed, there was a syntax error. I fixed it and you’ll find the right code in the post body. Apologies for my mistake.