Załóżmy, że chciałbym przetworzyć film jakimś nietypowym algorytmem. Głównie chodzi o przetworzenie obrazu.
Nie chodzi tu o sam algorytm, tylko o "otoczkę", Przykładowo, mam nietypowy algorytm "telecine" z wyostrzeniem. Wobec moich obecnych umiejętności i możliwości zrobiłbym to następująco:
- Za pomocą programu VirtualDub lub
ffmpeg
przekonwertowałbym film na serię ponumerowanych plików BMP lub PNG w ilości odpowiadającej liczbie klatek w filmie. - Mój program wczytywałby bitmapy, robił to, co ma zrobić, np. usunąć do 5 klatkę, a pozostałe wyostrzyć. Program wytworzyłby nową serię plików bitmapowych.
- Za pomocą programu AVIDemux lub
ffmpeg
wczytałbym te bitmapy, ustawił FPS na taki, jaki być powinien i przekonwertował na film. Ścieżkę dźwiękową bym podstawił z oryginalnego filmu.
Swój program telecine bym tworzył w C# lub w Java lub w C++ z Qt (który ma w sobie biblioteki do wczytywania i zapisywania bitmap). Większej różnicy mi nie robi, który z tych trzech, w kazdym razie, każdy z nich ma już wbudowane funkcję, za których pomocą mogę wczytać plik PNG, cokolwiek na nim zrobić, traktując jako tablice bajtową nieskompresowanego obrazu i zapisać jako PNG. Preferowałby w kolejności C#, Java, C++.
W jaki sposób na Linux lub ewentualnie na Windows można bezpośrednio wczytać plik z filmem, żeby do swojego programu wczytywać bezpośrednio kolejne klatki z filmu, zamiast konwertować na obrazki? W którym z wyżej wymienionych technologii (.NET, JVM, Qt) to da się zrobić?
Tak samo, w jaki sposób najlepiej zrobić takie coś, że przetworzony film nie będę zapisywać w obrazkach, tylko klatki w miare ich tworzenia będe wysyłać od razu do innego programu, który po wybraniu kodeka będzie od razu wytwarzać film?
Chodzi tak naprawdę o to, żeby pominąć tworzenie i wczytywanie obrazków, bo ich tworzenie zajmuje czas, zabiera dużo miejsca na dysku (dla filmu SD jako tako da radę, można liczyć w przybliżeniu 100GB na godzinę filmu, dla HD już jest ciężko) i spowalnia to system, bo choćby usunięcie katalogu zawierającego setki tysięcy małych plików troche trwa, otwarcie katalogu potrafi zawiesić system.
To są tak naprawdę dwa zagadnienia, o które się pytam, bo przetworzenie istniejącego filmu nie musi wiązać się z wytworzeniem nowego filmu (na przykład uzyskanie informacji, czy na filmie występuje twarz pasująca do wzorca), tak samo wytwarzanie filmu nie musi być na podstawie innego filmu (na przykład animacja fraktala).