[K] MIDI Viewer i wideo
Dopiero co pisałem o rozbudowie MIDI Viewera o pewne opcje edycyjne. Wspomniałem tam o generowaniu wideo, do czego używałem dotąd osobnego narzędzia, jednak skoro i tak rozbudowuję MIDI Viewer, czy nie byłoby wygodnie mieć po prostu w jego menu odpowiednie polecenie eksportu? W końcu wszystko, co potrzebne, już w MIDI Viewerze mam - otwieram plik, wstawiam znaczniki "zmiany ujęcia" i nic nie stoi na przeszkodzie, by z tego materiału od razu przygotować wideo.
Odmienne podejście
W starym rozwiązaniu ze względu na wydajność zdecydowałem się na jednorazowe narysowanie baaardzo szerokiego obrazu z całością utworu, po czym renderowanie polegało na kopiowaniu fragmentów o wielkości ekranu i wysyłaniu ich do ffmpeg. Blokowe kopiowanie przebiegało dość sprawnie, natomiast miało swoje ograniczenia. Wyszły one na jaw, kiedy dodałem "widok" z klawiaturą fortepianu i chciałem w nim animować klawisze - niestety, wydajność spadła, bo trzeba było nie tylko kopiować główny obszar, ale też co klatkę rysować fragment z klawiaturą. Tym razem zatem rysowanie odbywa się "normalnie", czyli każda klatka osobno, za to wielowątkowo i dopóki nie angażuję "obrotów pod kątem", głównym ograniczeniem przy renderowaniu jest ffmpeg, a nie mój algorytm.
Główna idea
Idea pozostaje taka sama, jak poprzednio. Skoro mam program, potrafiący jakoś tam wyświetlać dane MIDI, to dlaczego nie wykorzystać tego faktu do nagrania animacji "udającej" odtwarzanie takiego pliku, by dało się efekt zsynchronizować z dźwiękiem i mieć "teledysk"? Zamiast tracić czas na łapanie ekranu działającego programu DAW (i przygotowywać ten program, by wyświetlał to, co chcemy nagrać), dostajemy możliwość wygenerowania pliku wideo w czasie krótszym niż trwa cały utwór i to w rozdzielczości przekraczającej możliwości monitora (sam używam póki co monitora 2K, a MIDI Viewer bez problemu renderuje 4K).
Żeby wideo nie było zbyt nudne, wymyśliłem cztery "rodzaje ujęć": cała kompozycja, wybrane ścieżki oraz piano roll z widoczną klawiaturą i - jako opcja - podgląd nut z dodatkowego pliku pdf. Żeby nie renderować niepotrzebnie kilku długich filmów i nie montować ich ręcznie w DaVinci Resolve, postanowiłem samodzielnie renderować "przejścia" między ujęciami. Cały sekret polega na wstawieniu do utworu specjalnych znaczników (markerów), które mówią rendererowi coś w rodzaju: teraz tę ścieżkę wyświetlaj w tym trybie. W starej wersji skryptu musiałem pamiętać oznakowania poszczególnych ujęć ("all", "solo" itp.), w tej wersji mam już "ściągawkę" przy samym wstawianiu znacznika - mogę wybrać, który instrument i z jakim ujęciem chcę widzieć.
I tak to właśnie działa: wstawiam znaczniki w miejscach, gdzie chcę zrobić "przejście" na konkretne ujęcie, potem na inne i znów na inne, i w zasadzie nie muszę się już przejmować niczym innym, tylko renderuję, łączę z muzyką i film gotowy!
Co można?
Konfiguracja eksportu wideo jest nieco zbliżona do poprzedniej wersji, ale jednak bardziej rozbudowana:
Opcji nie ma dużo, ale wystarczają
Wybieram sobie rozdzielczość, klatkaż (jakże piękne polskie słowo!), widoczność lub ukrycie niektórych elementów. Mam wybór palet kolorystycznych oraz możliwość zmian konkretnego koloru, gdyby akurat coś nie pasowało do aktualnego utworu.
Z rzeczy nowych - można na spokojnie wskazać ścieżki, które mają być renderowane. W poprzedniej wersji dawało się co najwyżej zmienić indeks pierwszej z nich, czego nie chciało mi się poprawiać (z lenistwa), a co tak naprawdę zniechęcało mnie później do renderowania. Jeśli bowiem nie chciałem mieć jakiejś ścieżki w wideo, musiałem otwierać plik MIDI w DAW, przesuwać niechciane ścieżki na samą górę (żeby można je pominąć wspomnianym indeksem) lub usuwać i ponownie eksportować plik MIDI...
Opcja podglądu pozwala ocenić wygląd renderu, a dodatkowe opcje zastosować pochylanie i przesuwanie obrazu
Dodałem trochę ładniejszy wygląd klawiatury fortepianu oraz "poświatę" grających dźwięków:
Piano roll z nową klawiaturą
Największą zmianą jest dodanie możliwości zmiany kątów danego ujęcia oraz miniatura podglądu, przez co ma się zawczasu jakieś pojęcie, jak to będzie wyglądało w gotowym filmie - funkcję dodałem wyłącznie po to, by nie tracić czasu na próbne rendery, bo to też mnie zniechęcało do wcześniejszej wersji (mam na myśli konieczność oglądania każdego renderu, żeby obejrzeć, jak wypadły poszczególne ujęcia).
"Normalny" widok ścieżek, ale pod kątem
Drugą, również znaczącą zmianą, jest zintegrowanie modułu renderującego nuty z podłączonego pliku pdf. Wcześniej miałem do tego osobny skrypt, musiałem generować drugi film z całą partyturą, a renderer tylko kopiował odpowiednie fragmenty do docelowego obrazu. Tym razem wszystko odbywa się od razu w MIDI Viewerze, co ma ten plus, że lepiej działa synchronizacja i można robić płynne "cięcia".
Render z wykorzystaniem dodatkowego pliku pdf z nutami
Czy będzie więcej animowanych utworów?
Nie da się ukryć, że za napisaniem od nowa modułu renderingu stanęła zwyczajna... zazdrość. Otóż Blazar Core ma moduł eksportu wideo i bardzo ciekawie to wygląda, tyle że nie ma się za bardzo wpływu na wygląd poza wyborem konkretnego presetu, jednego z kilku dostępnych:
Kiedy to zobaczyłem i porównałem z moimi wcześniejszymi wersjami, wiedziałem, że coś trzeba zrobić:
Stąd "poświata", stąd różne kąty i opcje wizualne. Być może będzie się to jeszcze jakoś rozwijać, chociaż już teraz widzę, że wąskim gardłem staje się programowy renderer. Dodanie winiety, a zwłaszcza obrotów spowodowało dość mocny spadek wydajności (obrócone ujęcia wymagają - w celu zachowania jakości - renderowania ich w rozdzielczości wyższej niż docelowa. A że są to rozdzielczości już wyższe niż 4K, z częstotliwością 60 klatek na sekundę, to jest co renderować. Pewnie jakimś rozwiązniem byłoby robienie renderu z wykorzystaniem karty graficznej, ale tego jeszcze nie próbowałem. Jak to jednak mawiają mądrzy ludzie: nigdy nie mów "nigdy"...





Komentarze
Prześlij komentarz