Okno renderu w Moonlight Animate: koniec zgadywania, jak wyeksportować film
Eksport to ostatni krok i najłatwiejszy do zepsucia. Wszystko jest gotowe, wybierasz preset, czekasz dwadzieścia minut i dostajesz plik, który wygląda gorzej niż to, co widziałeś w programie — albo waży cztery razy za dużo. W Moonlight Animate okno eksportu miało już sporo: wybór kontenera, kamerę, zakres klatek, sterowanie bitrate'em, kanał alfa, metadane i kolejkę zadań. Brakowało tego, co faktycznie decyduje o jakości pliku.
Najpierw sprawdziliśmy, co program naprawdę umie
Zanim dołożyliśmy do okna choć jedno pole, napisaliśmy narzędzie, które wypisuje, co nasza warstwa kodowania naprawdę wystawia: jakie kontenery, jakie kodeki, jakie formaty pikseli, jakie profile i jakie parametry. Brzmi jak formalność. Nie była.
Okazało się, że program w trzech miejscach twierdził coś, co nie było prawdą:
- Lista kodeków dźwięku oferowała dwa, których w naszej wersji w ogóle nie ma. Efektywnie zostawał sam AAC, a użytkownik nie miał jak się dowiedzieć dlaczego.
- Lista kodeków dla transmisji na żywo wymieniała trzy warianty sprzętowe, których również nie ma.
- Przełącznik kodowania dwuprzebiegowego był na stałe wyszarzony dla najlepszego kodeka H.264, jakim dysponujemy. Kod sprawdzał tylko jeden ze sposobów prowadzenia statystyk między przebiegami — a ten kodek używa drugiego. Funkcja istniała, była zaimplementowana i nikt nie mógł jej włączyć.
Wniosek jest ogólniejszy niż te trzy błędy: lista opcji zapisana ręcznie w kodzie zawsze się w końcu rozjedzie z tym, co program potrafi. Teraz każda lista w oknie renderu powstaje z odpytania warstwy kodowania przy starcie. Kodek, którego nie ma, nie pojawia się wcale. Opcja, której dany kodek nie obsługuje, znika razem z nim. Nie ma pól, które wyglądają jak działające, a nie robią nic.
Co doszło
Jakość stała. Zamiast podawać bitrate i liczyć, że trafiłeś, podajesz jakość, a koder wydaje na nią tyle danych, ile trzeba. Trudna scena dostanie więcej, spokojna mniej. Dla pliku, który chcesz zachować, to jest właściwy tryb — a dotąd nie było go w oknie w ogóle. Włączenie chowa pola bitrate'u, bo te dwa tryby się wykluczają; zostawienie obu ustawionych naraz to klasyczna pułapka, w której koder po cichu dusi zadaną jakość.
Przy jakości stałej szacowany rozmiar mówi „nieznany". Moglibyśmy pokazać liczbę wyliczoną z bitrate'u, którego w tym trybie się nie używa — wyglądałaby porządnie i byłaby nieprawdziwa. Rozmiar naprawdę zależy wtedy od treści.
Tempo kodowania — od najszybszego do najwolniejszego. Wolniej znaczy mniejszy plik przy tej samej jakości; przy nocnym renderze to czysty zysk.
Profil i poziom. Poziom ogranicza materiał do tego, co odtworzy starszy sprzęt — przydatne, gdy film ma zadziałać na czymś więcej niż nowy laptop. Obie listy pochodzą z deklaracji samego kodera, nie z naszych założeń.
Odstęp klatek kluczowych — przełącznik „automatycznie" i wartość ręczna. Gęściej to płynniejsze przewijanie i większy plik.
Nowe formaty wyjściowe: H.264 w wysokiej jakości (do tej pory nieosiągalny z okna, bo domyślny eksport rozwiązywał się do słabszego kodera), DNxHR HQ oraz QuickTime Animation — bezstratny, z przezroczystością, do dalszej pracy w innym programie.
Prawdziwe kodowanie dwuprzebiegowe dla głównego kodeka H.264, razem ze sprzątaniem plików roboczych po obu przebiegach.
Własne ustawienia zapamiętują komplet. Wcześniej zapisywały trzy pola, więc wczytanie „swojego" presetu dawało inny film niż ten, który się zapisało. Teraz wraca wszystko: format, tryb jakości, profil, poziom, klatki kluczowe, dźwięk. Presety zapisane wcześniej wczytują się dalej, po prostu z mniejszą liczbą pól.
Czego świadomie nie dodaliśmy
Przeplotu i standardu telewizyjnego, osobnego przełącznika głębi renderu, multipleksera, napisów, interpolacji czasu. W innych programach te pola mają sens, bo mają czym sterować. U nas nie mają: materiału z przeplotem nie produkujemy, render zawsze idzie w najwyższej głębi, a zmianę tempa robi się na osi czasu. Dołożenie ich dla samego podobieństwa dałoby okno, które wygląda poważniej i wprowadza w błąd. Kontrolka, która nic nie robi, jest gorsza niż jej brak — i to była zasada przewodnia całej tej pracy.