Jason. Cała informatyka w jednym miejscu!

Pora przyjrzeć się następnemu narzędziu! Python posiada w swojej "garderobie" pewien cosik zdolny do obsługiwania klipów wideo, to znaczy do odtwarzania, przycinania, eksportowania i tym podobne. Poznajcie się, to jest pakiet "moviepy", zdolny do prostych manipulacji filmami :D!

PAKIET "MOVIEPY" WYMAGA INSTALACJI

"moviepy" nie znajduje się w standardowej bibliotece Pythona, zatem konieczne jest uruchomienie wiersza poleceń z uprawnieniami administratora i sięgnięcie po "pip", znany system zarządzania pakietami stworzonymi przez społeczność. Niniejsza komenda:

pip install moviepy

uruchomi proces pobierania pakietu "moviepy", a Was się jedynie prosi o zaczekanie chwilki czasu :). Rozmiar nie jest wcale przerażający, zatem przy dobrym sprzęcie i łączu internetowym, będzie to kwestia kilku sekund.

Instalacja pakietu "moviepy" w systemie "pip" w Pythonie

Komunikat o poprawności instalacji pakietu "moviepy" w systemie "pip".

Od tej pory, pakiet "moviepy" jest do Waszej dyspozycji. Nie potrzeba żadnych dodatkowych zależności, tak jak to miało miejsce przy pakiecie "pydub". Do dzieła!

MOŻLIWOŚCI PAKIETU

Zaprezentuję Wam parę możliwości jakie oferuje nam niniejszy pakiet. Jednak wpierw pozwolę sobie dopisać najpierw jak zainicjować zmienną, gdyż wszystko od niej się zaczyna.

IMPORT MODUŁU

Po zaimportowaniu pakietu, na przykład w taki sposób:

from moviepy.editor import *

uzyskujemy dostęp do klasy takiej jak "VideoFileClip".

INSTANCJA KLASY

Interesować nas będzie wyłącznie moduł "editor". Dzięki utworzeniu instancji w oparciu o wymienioną klasę:

movie = VideoFileClip([łańcuch znaków jako ścieżka do pliku])

możemy później wywoływać metody z naszej zmiennej. Format MP4 był jedynym przeze mnie sprawdzanym, zatem nie podpowiem Wam jakie wszystkie są obsługiwane przez pakiet "moviepy".

Teraz można przejść do opisania niektórych metod manipulacji filmem.

ODTWARZANIE WIDEO

Na początku coś banalnego, odtwarzanie klipu wideo ze strony Pythona. Po podaniu naszej zmiennej, przedostajemy się do metody o nazwie "preview":

[zmienna filmu].preview()

I już! Jedna metoda wystarczy, żeby po uruchomieniu programu, ujrzeć prawidłowo odtwarzany klip :D. Tylko...jest jeden problem przy chęci zamknięcia klipu! Nie da się zamknąć okienka w sposób "normalny" poprzez naciśnięcie czerwonego krzyżyka w prawym rogu okna (przynajmniej u mnie tak jest za każdym razem) :(. Po zakończeniu odtwarzania, okno sobie "wisi" w tle i ma w nosie to, że użytkownik może chcieć w dowolnej chwili je zamknąć. Nie mam pojęcia dlaczego nie da się tego zamknąć, jedyna opcja to menedżer zadań i "Zakończ proces", chyba że zamkniecie cały program odpowiedzialny za uruchomienie Waszego kodu (w przypadku "IDLE", musiałem zamknąć okno powłoki).

EKSPORT FILMU

"moviepy" przewiduje możliwość wyeksportowania podanego filmu jak zupełnie nowy klip wideo, nieważne czy podczas działania programu był modyfikowany. Służy do tego metoda "write_videofile":

[instancja klasy "VideoFileClip"].write_videofile([łańcuch znaków jako ścieżka dla pliku, który ma być wyeksportowany])

Jedynym wymaganym parametrem jest podanie łańcucha znaków jako ścieżka razem z nazwą tworzonego pliku i jego rozszerzeniem. Jest jednak o wiele, wiele więcej pobocznych parametrów których nie sposób omówić. Odwołam Was do oficjalnej dokumentacji pakietu "moviepy".

Pamiętajcie, że wszelkie modyfikacje nie wpłyną w żaden sposób na plik filmowy, dopóki nie wyeksportujecie go z taką samą nazwą pliku (nadpisywanie oryginału).

ZAPIS DO PLIKU GIF

Kolejną z metod eksportu filmu poprzez pakiet "moviepy", jest zapis filmu w postaci klasycznego GIFa! Programowanie sprowadza się również na wywołaniu zaledwie jednej metody, "write_gif", razem z podaniem ścieżki generowanego pliku wraz z rozszerzeniem. To wszystko!

[instancja klasy "VideoFileClip"].write_gif([łańcuch znaków jako ścieżka dla pliku, który ma być wyeksportowany])

I znowu haczyk! Nie myślcie, że ta operacja pójdzie równie szybko, co instalacja samego pakietu. Na moim komputerze, przetwarzanie pliku filmowego na GIF potrafiło zająć nawet dwie godziny dla rozdzielczości 960x540, a film trwał zaledwie dziesięć sekund! Radzę Wam wziąć sobie na próbę coś naprawdę malutkiego, bo podczas przetwarzania zajętość systemu idzie tak do góry, że system potrafi nie reagować na polecenia. Warto jeszcze nadmienić o tym, że na samym początku postęp idzie błyskawicznie, a po chwili drastycznie spada (gdzieś tak od połowy) i wtedy zaczyna się próba cierpliwości ;).

PRZYCINANIE FILMU

W programistycznym "arsenale" znajdziecie też metodę "subclip", która jest zdolna przyciąć Wasz film, z tym że nie podajemy liczby sekund obcięcia, tylko od jakiej do jakiej sekundy ma film dalej pozostać nietknięty:

[instancja klasy "VideoFileClip"].subclip([liczba całkowita jako początek przyciętego filmu w sekundach], [liczba całkowita jako koniec przyciętego filmu w sekundach])

Powtarzam: liczby całkowite! Próbowałem dać "float" i musiałem zderzyć się ze zgłoszeniem wyjątku. Zatem, metoda sobie nie życzy liczb z ułamkiem.

Zamiast z góry określonej liczby, możecie dorzucić atrybut "duration" pobierany ze zmiennej filmowej i posłużyć się nim jako punktem zaczepienia. Jeżeli macie problemy ze zmiennoprzecinkowym czasem trwania filmu, polecę Wam skonwertowanie sobie wyżej wymienionego atrybutu "duration" do liczby całkowitej przy pomocy funkcji "int".

DOSTOSOWANIE PRĘDKOŚCI ODTWARZANIA FILMU

Pakiet "moviepy" pozwala także edytować prędkość odtwarzania podanego klipu! W tym przypadku potrzebny jest troszeczkę większy manewr, bowiem trzeba utworzyć sobie kolejną zmienną, która będzie stanowiła ten sam klip wideo, tylko ze zmienioną prędkością. Korzystamy z metody "fx":

movie_with_different_speed = [instancja klasy "VideoFileClip"].fx(vfx.speedx, [liczba zmiennoprzecinkowa jako nowa prędkość odtwarzania]

a w pierwszym parametrze wprowadzamy ciąg "vfx.speedx" (jest to hierarchia pochodząca bezpośrednio z importu, zatem w przypadku importu tradycyjnego, koniecznie trzeba podać pełną nazwę pakietu poczynając od "moviepy.editor").

Potrzebny jest jeszcze drugi parametr w formie liczbowej, który będzie zastępcą 100% prędkości odtwarzania. Tutaj możemy dla odmiany podać liczbę zmiennoprzecinkową. Jeśli chcemy ujrzeć efekt, to korzystamy albo z funkcji odtwarzającej klip, albo eksportujemy i odpalamy plik w ulubionym programie.

OBRACANIE FILMEM

Ostatnia rzecz jaką chcę zaprezentować to obracanie ekranem filmu. Służy do tego metoda "rotate" i przyjmuje ona jeden parametr w postaci kąta obrotu w stopniach. Efekt będzie taki, że odtwarzany klip będzie miał obróconą orientację. I to dosłownie :).

Odtwarzanie obróconego filmu przy pomocy metody "rotate" klasy "VideoFileClip" w Pythonie

Przykład dosłownie obróconego filmu o 30 stopni.

Jeżeli będziecie mieli życzenie wyeksportowania takiego filmu, będzie on posiadał dookoła siebie czarne krawędzie.


The end! Pakiet "moviepy" może ułatwić nieco życie z manipulowaniem filmów, jeżeli chcemy na szybko jakiś przerobić nietrwający kilku godzin. 

PODOBNE ARTYKUŁY