Witam wszystkich po małej przerwie, za którą przepraszam. Niemniej czasami ciężko pogodzić życie zawodowe, prywatne … i bloga. Mimo, że nie stanowiło to problemu dotychczas, teraz w natłoku przygotowań do Świąt, staje się to rzeczywistością.

Jednak do rzeczy. Dzisiaj będzie mowa o pewnym narzędziu, aplikacji, o której zapewne większość z Was nie słyszała. Względnie słyszała, jednak nie praktykowała z nią zbyt długo. Sam natknąłem się przez przypadek. Mowa o Gource! Czym jest to cudo?

Jest to aplikacja konsolowa, która generuje nam wizualizację zmian, zachodzących w repozytorium. Możemy wybrać określoną gałąź (dendrolodzy się skuszą :)) lub domyślnie pozwolić generatorowi przeczytać całego loga systemu kontroli wersji. Powstaje w domyśle piękna animacja – film – przedstawiający zmiany jakie zachodziły z biegiem czasu w projekcie. Wspiera takie systemy kontroli wersji, jak GIT, Mercurial, Bazaar, SVN, CVS. Posiada otwartą licencję GNU GPL v3. Gource pozwala nam cieszyć się wizją powstawania naszego dzieła. Już nie będę się rozpływał na programem 🙂 – zapraszam do dalszej części artykułu, gdzie wraz z przykładami zobaczymy, jak to ugryźć.

Mimo, że jest to aplikacja konsolowa, ma ona potencjał. Gama parametrów, od których zależy efekt końcowy jest niesamowita. Tutaj omówię po krótce tylko kilka.

Generowanie filmu to proces dwustopniowy. Najpierw pozwalamy programowi przeanalizować dane systemu kontroli wersji, który klatka po klatce wygeneruje nam zrzuty wskazanej jakości i we skazanym tempie do pliku (.ppm). Tworząc film HD możemy się spodziewać ogromnych rozmiarów. Z testów wynika, że ok. 3 minuty filmu to mniej więcej 12GB plik wynikowy kroku pierwszego. W wyniku na tym etapie nie otrzymamy filmu. Spokojnie, już niedługo.

Etap 1

Jest to kluczowy krok. Od niego zależy efekt końcowy. Odpowiednie parametry wejściowe to klucz do sukcesu. Jakie parametry warto dostosować:

 -WIDTHxHEIGHT
       - określamy szerokość i wysokość obrazu (np. -1280x720)
 --multi-sampling
       - włącza multisampling
 -a
       - przejście do następnego zbioru zmian, gdy następuje przerwa w czasie wskazana parametrem (np. -a 0.5)
 -s
       - prędkość określona w sekundach na upływający w logu dzień (np. -s 0.5)
 -i
       - przez jaki czas bez operacji na pliku ma być widoczny węzeł w sekundach (np. -i 60)
 -r
       - wyjściowa liczba klatek na sekundę (np. -r 25)
 -o
       - ścieżka do pliku pod jaką ma być dostępny plik wyjściowy
 --hide
       - ukrywanie określonych elementów na wizualizacji (np. --hide dirnames,filenames,mouse)
 --logo
       - ścieżka do grafiki z logo
 --logo-offset XxY
       - przesunięcie logo od prawego dolnego rogu ekranu
 --title TITLE
      - określamy tytuł filmu

Powyższe parametry nie modyfikują samych efektów animacji, tzw. wodotrysków. Mamy całą gamę możliwości zmiany. Na liście znajduje się modyfikacja prędkości poruszania się elementu użytkownika, modyfikacja rozkwitu naszego drzewa (intensywność, rozmiar), modyfikacja tła, modyfikacja elastyczności węzłów, a także awatarów użytkowników. Świetną opcją wydaje się pokazanie logów na filmie. Efekt jest przedni. Możecie się o tym przekonać tutaj. Pełną listę parametrów otrzymacie w konsoli po zadaniu polecenia:

gource -H

Podsumowując muszę wspomnieć, o tym że podane w przykładach parametry czasowe świadomie określiłem jako takie niskie. Przy bardzo długiej historii repozytorium musimy maksymalnie przyspieszać prędkość wizualizacji, aby końcowy film nie porażał nas wielkością. Ba, nie tyle ważna jest końcowa wielkość. Właśnie po pierwszym etapie, przy nierozważnym określeniu parametrów czasowych możemy otrzymać plik .ppm rzędu 100GB. Trudno nie być zdziwionym. Dlatego może warto przy powstawaniu zrzutów kontrolować wielkość pliku w eksploratorze systemowym?!

Etap 2

Tutaj już wpływamy na wygenerowanie filmu. Przy użyciu biblioteki ffmpeg  generujemy plik .avi (można zagłębić się bardziej w dokumentację ffmpeg i pokombinować z innymi formatami. Zadanie dla ciekawskich. Zachęcam do dzielenia się spostrzeżeniami w komentarzach do artykułu.

Na tym etapie przy 3 minutowym filmie osiągałem mniej więcej rozmiar 500-600MB. Dużo, tak pomyślałem za pierwszym razem, ale doświadczenie nakazywało mi się nie dziwić. Wszystko bowiem zależy od kodeka. Domyślam się, że na poziomie polecenia ffmpeg można zmienić kodek, ale to jest zabawa do obeznanych w temacie.

Sam postanowiłem wykorzystać darmowy soft do konwersji formatów. Idealnym rozwiązaniem okazał się Any Video Converter, w którym dla takiej samej rozdzielczości (HD) przy wykorzystaniu wbudowanego kodeka x264, zmianie rozszerzenia na .mp4 (dla HTML5) można zmniejszyć rozmiar filmu ok. 5-krotnie.

Poniżej przykładowe polecenia pierwszego i drugiego etapu wizualizacji (całość wykonywana na systemie Windows; w przypadku systemów Unix’owych  zalecane potoki).

C:Devxamppxampphtdocsproject>gource -1280x720 --multi-sampling --title "ITProjectPlace - JAVA" --logo imagesitpp
-logo.png --logo-offset 950x30 -s 0.5 --caption-duration 1 -a 0.5 --transparent --max-files 0 --hide mouse,dirnames,file
names -r 25 -o C:Devgourcegource.final2.ppm C:Devrepoitpp

C:Devxamppxampphtdocsproject>C:ffmpegbinffmpeg -y -r 25 -f image2pipe -vcodec ppm -i C:Devgourcegource
.final2.ppm -vcodec libx264 -preset veryslow -qp 0 -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 C:Devgourcegource.x264
.final2.avi

 

Podsumowanie

Wreszcie część, na którą kilka osób czeka. Mowa oczywiście o programistach współtworzących ciągle rozwijający się portal ITProjectPlace. Poniżej przedstawiam wizualizację rozwoju portalu na dwóch płaszczyznach – płaszczyźnie systemowej PHP i JAVA. Przyspieszenie jest duże, by rozmiar nie przekroczył (100MB – celowo :)). Dodatkowo nie manipulowałem parametrami rozkwitu. Jest wyłączony log i nazwy węzłów. Cieszy oko. Mam nadzieję, że jakoś zrekompensowałem tę małą przerwę w publikacjach. Pozdrawiam.