Wideo do mock-upu

Podkusiło mnie, aby spróbować przygotować filmik do coverów inny niż dotychczasowe - nie w postaci "okładki" wyświetlanej przez cały czas trwania utworu, ale w postaci wizualizacji. Czasem chciało mi się to robić, np. przy coverze muzyki tytułowej z "Gry o tron":

Jedno z pierwszych wideo do muzyki

Jak widać, warstwa wideo została nagrana w Studio One - i to nie jednokrotnie, bo potrzebowałem kilku "ujęć": ogólnego, szczegółów, krzywych CC, instrumentów itd. Trzeba było zatem wielokrotnie odtwarzać cały utwór, nagrywając za każdym razem coś innego i uważając, by się gdzieś tam nie plątał kursor na przykład. Potem jeszcze montaż i film gotowy.

Najbardziej irytujące było właśnie przygotowywanie fragmentów wideo - często dopiero podczas montażu zauważałem, że np. zaznaczyłem nie to, co trzeba albo zasłoniłem sobie czymś rzecz, którą chciałem pokazać. Znów trzeba było uruchamiać Studio One, nagrywać, po czym okazywało się, że przy drugim starcie coś wyglądało inaczej i nie pasowało do wcześniejszych ujęć (np. zaznaczenie ścieżki czy położenie miksera). I kolejna próba, kolejne nagranie... Uf.

Bez DAW

Przyszło mi do głowy, że skoro swego czasu napisałem sobie przeglądarkę do plików MIDI, to może wykorzystać ją (albo przynajmniej jej "silnik") do renderowania wideo? Pierwszy odruch miałem taki, by przygotować w samej przeglądarce "tryb do nagrywania", czyli pełny ekran i automatyczne skrolowanie zgodnie z tempem przeglądanego pliku MIDI. Wtedy wystarczyłoby nagrać ekran za pomocą np. Screenpresso i gotowe.

Tak wygląda plik midi w MIDI Viewerze

Po zastanowieniu się stwierdziłem jednak, że po pierwsze, ograniczać mnie będzie rozdzielczość ekranu, a po drugie, trzeba będzie cierpliwie czekać każdorazowo tyle, ile trwa utwór. Trzeba to było zrobić inaczej.

Żeby nie komplikować sobie życia, postanowiłem pójść na łatwiznę: w pamięci narysuję sobie CAŁY utwór od razu, na takim bardzo szerokim wirtualnym płótnie i kiedy już to będzie gotowe, przebiegnę się "nad" płótnem z częstotliwością FPS i kopiowane wycinki wyślę programowi ffmpeg do kompresji (na szczęście ffmpeg ma taki tryb, że można mu po prostu przesyłać poszczególne klatki strumieniowo). O dziwo, rzecz nawet zadziałała, więc zrobiłem sobie jeszcze wygodne GUI, żeby móc ustawiać różne parametry:

W efekcie pracy tego skryptu (bo użyłem tradycyjnie Pythona), po około 3-4 minutach mam np. 3 ujęcia w rozdzielczości 4K, wygenerowane wprost w pliku MIDI.

Mogę definiować rozdzielczość filmu, stopień powiększenia (zoom), wielkość niektórych istotnych części elementów, mogę się "skupić" na konkretnej ścieżce i tak dalej. Konfiguracje przechowuję też w pliku json, więc mając już wypracowane ustawienia, mogę uruchomić konwerter nawet bez GUI, by uzyskać coś w tym rodzaju na przykład (to jeden z "widoków"):

Przyznacie, że nie wygląda to wcale jakoś tragicznie, prawda?

Nuty

Praktycznie do każdego opracowywanego pliku MIDI pobieram także partyturę w formacie pdf, więc pomyślałem, że byłoby fajnie umieścić w klipie do muzyki także przebitki z nut. I znów, pierwszy pomysł był taki, by po prostu zapisać wszystkie strony z pliku pdf na dysku, jako obrazki o zadanej rozdzielczości. To zadanie, dzięki bibliotece PyMuPDF, jest trywialne, ale rodzi pewien problem: otóż są to zwykłe strony, zawierające czasem dosłownie parę taktów plus dużo wolnego miejsca (marginesy).

Drugi pomysł, na który wpadłem, to było oczywiście automatyczne łączenie stron w większy (szerszy) obrazek. Tu się musiałem mocno napocić, żeby pięciolinie z sąsiadujących stron się zetknęły "bezszwowo" ze sobą - skończyło się na analizowaniu każdej z nich osobno i przeskalowywaniu całej strony partiami, pięciolinia do pięciolinii. Tylko tak można było "polepić" te strony ze sobą.

Szerokie obrazki (np. 4-6 stron obok siebie) to już było coś - ale na etapie montażu w DaVinci pojawił się inny problem. Otóż taka strona powinna się przesuwać zgodnie z tempem utworu, a na dodatek za każdym razem trzeba było pracowicie szukać, który to fragment mamy na obrazku, żeby go umieścić na linii czasowej. Trzeba było jeszcze raz zmienić podejście.

Skoro miałem już działający program do zamiany duuużego obrazu w filmik, to dlaczego nie wygenerować całości partytury i też zamienić na filmik? I tak się właśnie stało - w oparciu o plik pdf z nutami i mid z tempem, skrypt bazujący na wcześniejszym rozwiązaniu jest w stanie wygenerować film w zadanej rozdzielczości i FPSach, który dość wiernie podąża za nutami MIDI. "Dość wiernie", bo niestety, nie da się w pełni zsynchronizować tego przesuwu, ale że nie rysuję tutaj ani głowicy, ani nie podświetlam granych nutek, to rzecz jest do skorygowania w DaVinci, szczególnie że to tylko jedno z ujęć.

Montaż - czy konieczny?

Pierwotnie planowałem wrzucenie wszystkich wygenerowanych plików wideo do DaVinci Resolve, aby po scaleniu ich w klip Multi-cam łatwo pociąć w odpowiednich momentach i zsynchronizować z muzyką. To do tej pory docelowy scenariusz i dzięki temu podejściu powstał klip do "Koncertu na trąbkę Es-Dur" Haydna:

Takie skromne demo :)

Nie jest bezbłędnie i jakoś rewelacyjnie, ale zawsze to chyba ciekawsze niż oglądanie okładki.

Ale wiadomo - apetyt rośnie w miarę jedzenia. Chciałbym pewnie móc budować w miarę szybko wideo także na kanał testowy i ani mi w głowie ślęczenie w tym celu nad montażem - ma być szybko i bezproblemowo. Dumałem i... wydumałem.

Otóż, będąc jeszcze w Fender Studio Pro, przed wyeksportowaniem utworu jako plik MIDI, dodaję w odpowiednich miejscach markery-znaczniki o specjalnych nazwach: "all" oznacza ogólny widok na cały utwór, "cc" - podobny widok, ale z prezentacją najczęściej używanego kontrolera CC, "pr01" - widok piano-roll wskazanej ścieżki, "pcc01" - widok nut i wybranych CC wskazanej ścieżki. Markery umieszczam, rzecz jasna, w miejscach, w których ma się zmienić widok.

No i teraz mój konwerter ma dodatkowy tryb pracy, "mikserski", kiedy to interpretuje markery i od chwili wystąpienia któregoś z nich automatycznie zmienia sposób generowania klatek do filmu wideo. Dzięki temu w jednym przebiegu dostaję "pocięty" film, w którym "ujęcia kamery" zmieniają się tam, gdzie to zaplanowałem w DAW.

Wystarczyło jeszcze na szybko napisać prosty skrypcik, który połączy takie wideo z plikiem audio i doda na samym początku "okładkę" (również wygenerowaną automatycznie w oparciu o metadane wpisane jeszcze w Fender Studio Pro). Pierwszy przykładowy filmik, który powstał właśnie w ten sposób, można już sobie obejrzeć:

Jedyna praca "montażowa" to naniesienie markerów w pliku MIDI

Za wszystkim stoi lenistwo

Mam zatem kolejne narzędzie "odwalające za mnie" najgorszą robotę. Czasem aż nie mogę się zdecydować, czy bardziej wolę nagrywać muzykę i korzystać z tych wszystkich narzędzi, czy jednak te narzędzia tworzyć - na dwoje babka wróżyła. Tak czy inaczej, jestem zadowolony, że koniec końców wszystko się powiodło, filmiki się tworzą i nawet nie wyglądają tak paskudnie, jak się tego początkowo spodziewałem.

Komentarze