Pisząc artykuł o cięciu i klejeniu wideo napotkałem na problem: chciałem zaprezentować na zrzucie ekranowym kursor myszy, a żaden z kilku wypróbowanych programów nie miał takiej opcji. Googlując znalazłem radosne pomysły typu robienie zrzutów systemu chodzącego wewnątrz Vmware albo domalowywanie kursora w programie graficznym.
Wymyśliłem lepszą technikę, która nie tylko pozwala rejestrować kursor myszy, ale także łapie dymki podpowiedzi, rozwinięte menu (z wielopoziomowymi włącznie), trwające animacje i wszelkie inne chwilowo pojawiające się elementy - a do tego jest zaskakująco ergonomiczna.
Trzeba ... nagrać wideo (screencast). Programy do tego służące nie mają żadnych problemów z nagraniem kursora, menu czy dymka.
Nagrywanie wideo
Technikę nagrywania wideo omówiłem szczegółowo w tym artykule. Dodam tylko, że warto unikać gwałtownych ruchów myszą i - na ile to możliwe - dbać, by kluczowe sceny potrwały choć z pół sekundy (będzie łatwiej je znaleźć i wyłuskać).
Jeszcze jedna korekta do tamtego artykułu: najnowsze wersje
recordMyDesktop
zmieniły domyślną nazwę zapisywanego pliku na~/out.ogv
(a nie~/out.ogg
). Tak czy siak, jest to wideo zakodowane Theorą.
Wyciąganie obrazków z wideo
Obrazki z wideo można wyciągnąć na parę sposobów. Opiszę dwa.
Metodę opartą na myszy udostępnia vlc (w razie potrzeby: apt-get install vlc
). Otwieram w nim wideo i uruchamiam odtwarzanie. Po dojściu do odpowiedniego momentu pauzuję odtwarzanie i wybieram z menu Video opcję Snapshot (w polskiej wersji – z menu Obraz opcję Zrzut ekranu).
VLC zapisuje obraz bieżącej klatki jako coś w stylu ~/.vlc/vlcsnap-533222343.png
. Powtarzam dla kolejnych potrzebnych klatek (za każdym razem powstaje nowy, inaczej nazwany plik). Zbieram uzyskane pliki (po prostu otwieram nautilusa, konquerora czy inny menedżer plików z opcją podglądu plików graficznych na katalogu ~/.vlc
), poprawiam im nazwy i przenoszę we właściwe miejsce, po czym kasuję niepotrzebne już wideo. Koniec pracy.
Drugą opcją (poręczną zwłaszcza, gdy potrzebnych klatek jest dużo) jest skonwertowanie całego wideo na sekwencję obrazków. W tym celu najpierw konwertuję Theorę na AVI:
$ mencoder ~/out.ogg -o out.avi ’ -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800
(opcje nie są szczególnie ważne, chodzi tylko o uzyskanie pliku zrozumiałego dla ffmpeg) a potem uruchamiam:
$ mkdir img $ ffmpeg -qscale 1 -i out.avi -an -r 2 img/frame%05d.png
i dostaję wszytkie ramki jako img/frame00001.png
, img/frame00002.png
, itd...
Uwaga na opcję -r
! Ustala ona ilość ramek na sekundę. Podane w tym przykładzie 2 oznacza łapanie obrazka co pół sekundy - co zwykle wystarcza, a pozwala uniknąć przeszukiwania tysięcy plików (dla 15 sekund nagrania powstanie 30 plików png). Jeśli niektóre efekty trwaly krócej niż pół sekundy, trzeba to odpowiednio podbić (np -r 4
by łapać co ćwierć sekundy).
Dodatkowe uwagi
Ta metoda całkiem nieźle sprawdza się także przy normalnych zrzutach, gdy potrzebuję po prostu zrobić dużo zrzutów z jednej aplikacji. Wolę nagrać wideo i potem spokojnie wybrać zeń potrzebne obrazki, niż kilkanaście razy przełączać się między używaniem programu a zapisywaniem zrzutów.