22 października 2008

Maple12 i Wolne Oprogramowanie

W trakcie wykładu z Metod Obliczeniowych prowadzący ogłosił mały konkurs polegający na opisaniu i ew. prezentacji sposobu eksportu animowanych 'plotów' wygenerowanych w programie Maple (został napisany w Javie i jest w pełni przenośny między wszystkimi platformami, na których działa JRE) do dowolnego formatu (animowana grafika, wideo). Postanowiłem podjąć się wyzwania i przy okazji pokazać jakie możliwości niesie ze sobą wolne oprogramowanie.

Pierwszym pomysłem było zastosowanie pętli for w której przy każdym wykonaniu bloku instrukcji rysowany byłby plot dla konkretnej klatki a następnie eksportowany do formatu gif. W trakcie prac zupełnie przypadkowo odkryłem, że Maple w wersji 12 ma zaimplementowany eksport do animowaych gif'ów. Nie było sensu dalszych prac nad wynajdowaniem koła od nowa. Pierwszy próg pokonany.

Poniżej prezentuję małe HOWTO które stworzyłem przy okazji zabawy:

  1. Eksport do GIF'a (animowana grafika):
    Klikamy prawym przyciskiem myszy na danym plocie, wybieramy export -> Graphics Interchange Format, definiujemy ścieżkę do której ma nastąpić eksport i zapisujemy. Dla ułatwienia następnych kroków zalecam eksportować do pustego katalogu.

  2. Eksport do MPEG (video):
    a) Korzystając z instrukcji zawartych w punkcie 1, eksportujemy animacje w Maple'u do formatu gif, do pustego katalogu (aby ułatwić sobie dalsze kroki).

    b) Otwieramy okno terminalu i przechodzimy do katalogu gdzie zapisalismy naszą animację w formacie gif. Konwertujemy animowanego gif'a na pliki w formacie jpg, gdzie każdy z nich zawiera 1 klatkę animacji. Ilość plików jest zależna od ilości klatek. Do tego celu używamy narzędzia convert dostępnego w pakiecie ImageMagick:

    $ convert nazwa.gif nazwa_%05d.jpg

    W wyniku otrzymamy serie plików graficznych w formacie jpg zawierajacych numer klatki w nazwie (nazwa_00001.jpg, nazwa_00002.jpg itd.)

    c) Za pomocą narzędzia ffmpeg sklejamy pliki jpg w film mpg:

    $ ffmpeg -r `ls -l *.jpg | wc -l` -i nazwa_%05d.jpg -y -an nazwa.mpg

    (`ls -l *.jpg | wc -l` zwraca nam ilosc plików z rozsz. jpg w danym katalogu)

  3. Eksport do innych formatów video sprowadza sie do encodingu przy pomocy np. mencodera (kuzyn mplayer'a) filmu w formacie mpg.
    Bardzo interesującym rozwiązaniem są nowoczesne kontenery audio/video, dzięki którym możemy np. stworzyć 1 plik video z zaimplementowanymi kilkoma ścieżkami dzwiękowymi/napisami (np. tłumaczenia w przypadku międzynarodowej konferencji naukowej - każdy otrzymuje ten sam plik z filmem i samodzielnie decyduje w jakim języku chce go oglądać).

2 komentarze:

Rafał Petryniak pisze...

Fajny news. Robi wrażenie jak za pomocą dwóch komend można zrobić z animowanego gifa plik video.

Hwast pisze...

W równie prosty sposób możemy montować materiały filmowe i dodawać do nich napisy/'dymki' - wystarczy (również za pomoca pakietu ImageMagick) stworzyć sobie odpowiednią petle, która do jpg'ów z klatkami dokleja odpowiednie elementy. W zasadzie miałem pisać o metodach obliczeniowych i Maple'u a wyszedł pokaz wielkich możliwości 2 prostych narzędzi.