CodeGym /Kursy /Python SELF PL /Wyciąganie, obróbka i zapisywanie poszczególnych klatek w...

Wyciąganie, obróbka i zapisywanie poszczególnych klatek wideo z MoviePy

Python SELF PL
Poziom 47 , Lekcja 2
Dostępny

1. Po co to wszystko?

Zanim uruchomimy nasz wirtualny warsztat do wyciągania klatek, porozmawiajmy, dlaczego to jest ważne. Wyciąganie i obróbka poszczególnych klatek może być przydatna do tworzenia efektów, analizy zmian w czasie, a także do przygotowania obrazów dla uczenia maszynowego. To także świetny sposób na wykorzystanie klatek do tworzenia pokazów slajdów lub animacji.

Główne etapy pracy z klatkami

  1. Wyciąganie klatek z filmu.
  2. Obróbka wyciągniętych klatek.
  3. Zapisywanie obrobionych klatek.

Teraz, gdy wiemy, co chcemy osiągnąć, przejdźmy do praktyki.

2 Wyciąganie Klatek z Wideo

Zacznijmy od podstaw — wyciągania klatek. W MoviePy można łatwo uzyskać dostęp do poszczególnych klatek wideo, korzystając z metod klasy VideoFileClip. Każda klatka jest reprezentowana w formacie tablicy (wielowymiarowej tablicy pikseli), którą można obrabiać za pomocą MoviePy lub innych bibliotek, np. NumPy czy Pillow.

Otwieranie wideo i dostęp do poszczególnej klatki


from moviepy.editor import VideoFileClip

# Otwarcie pliku wideo
video_clip = VideoFileClip("sample_video.mp4")

# Wyciąganie klatki w 5. sekundzie
frame = video_clip.get_frame(5)

# Wyświetlanie informacji o klatce
print("Typ danych klatki:", type(frame))
print("Rozmiary klatki:", frame.shape)

W tym przykładzie:

  • VideoFileClip("sample_video.mp4") otwiera plik wideo i tworzy obiekt video_clip.
  • video_clip.get_frame(5) wyciąga klatkę w 5. sekundzie.
  • frame.shape pokazuje rozmiary klatki (wysokość, szerokość i liczbę kanałów kolorów).

3. Zapisywanie klatek jako obrazów

Po wyciągnięciu klatki można ją zapisać jako obraz. Do tego można użyć biblioteki Pillow (PIL) do pracy z obrazami.

Instalacja Pillow

Jeśli Pillow nie jest zainstalowane, zainstaluj je za pomocą pip:

pip install pillow

Zapisywanie klatki jako obrazu


from PIL import Image
from moviepy.editor import VideoFileClip

# Otwarcie wideo i wyciągnięcie klatki w 5. sekundzie
video_clip = VideoFileClip("sample_video.mp4")
frame = video_clip.get_frame(5)

# Konwersja klatki na obraz i zapisanie
image = Image.fromarray(frame)
image.save("frame_at_5_seconds.png")

Tutaj:

  • Image.fromarray(frame) konwertuje tablicę pikseli na obiekt obrazu.
  • image.save("frame_at_5_seconds.png") zapisuje klatkę jako plik PNG.

4. Wyciąganie serii klatek z wideo

Jeśli trzeba wyciągnąć kilka klatek w regularnych odstępach (np. każdą klatkę, każdą sekundę lub z określonym interwałem), można użyć pętli do uzyskania potrzebnych klatek. To przydatne, jeśli trzeba przeprowadzić analizę lub stworzyć miniatury z wideo.

Przykład: Wyciąganie i zapisywanie klatek co sekundę


from PIL import Image
from moviepy.editor import VideoFileClip

# Otwarcie pliku wideo
video_clip = VideoFileClip("sample_video.mp4")

# Czas trwania wideo w sekundach
duration = int(video_clip.duration)

# Wyciąganie i zapisywanie klatek co sekundę
for i in range(duration):
    frame = video_clip.get_frame(i)
    image = Image.fromarray(frame)
    image.save(f"frame_{i}_second.png")

Tutaj:

  • for i in range(duration) przechodzi przez każdą sekundę aż do końca wideo.
  • W każdej sekundzie wyciągana jest klatka, konwertowana na obraz i zapisywana z unikalną nazwą (np. frame_1_second.png, frame_2_second.png).

5. Zmiana rozmiarów klatki przed zapisaniem

MoviePy pozwala zmieniać rozmiary klatek przed ich zapisaniem. To przydatne, jeśli trzeba stworzyć miniatury lub zmniejszone obrazy klatek.

Zmiana rozmiaru klatki i jej zapisanie


from PIL import Image
from moviepy.editor import VideoFileClip

# Otwarcie pliku wideo
video_clip = VideoFileClip("sample_video.mp4")

# Wyciąganie klatki w 10. sekundzie
frame = video_clip.get_frame(10)

# Konwersja klatki na obraz
image = Image.fromarray(frame)

# Zmiana rozmiaru klatki do 200x200 pikseli
image_resized = image.resize((200, 200))

# Zapisanie zmienionego obrazu
image_resized.save("resized_frame_at_10_seconds.png")

6. Wyciąganie klatek z określoną częstotliwością

Jeśli trzeba wyciągać klatki z określoną częstotliwością (np. co 10. klatkę do analizy ruchu), można użyć parametru częstotliwości klatek fps.

Przykład: Wyciąganie co 10. klatki


from PIL import Image
from moviepy.editor import VideoFileClip

# Otwarcie pliku wideo
video_clip = VideoFileClip("sample_video.mp4")

# Ustawienie częstotliwości próbkowania klatek (np. co 10. klatka)
frame_interval = 10

# Wyciąganie i zapisywanie co 10. klatki
for i, frame in enumerate(video_clip.iter_frames()):
    if i % frame_interval == 0:
        image = Image.fromarray(frame)
        image.save(f"frame_{i}.png")

Tutaj:

  • video_clip.iter_frames() pozwala przechodzić przez wszystkie klatki wideo.
  • if i % frame_interval == 0 wyciąga tylko co 10. klatkę.

7. Obróbka Klatek

Wyciągnięcie klatki to tylko połowa sukcesu, być może chcesz dodać trochę magii do swojego obrazu. Do tego użyjemy biblioteki Pillow do obróbki obrazu.


# Przekształcenie obrazu na czarno-białe
image_bw = image.convert("L")
image_bw.save("mid_frame_bw.png")

Tutaj wzięliśmy wyciągniętą klatkę i przekształciliśmy ją na obraz czarno-biały. Proste, ale skuteczne zmiany mogą sprawić, że twoje klatki staną się bardziej wyraziste.

8. Problemy i rozwiązania

W świecie wyciągania i obróbki wideo są pewne pułapki. Upewnij się, że ścieżki systemowe do plików są poprawne, w przeciwnym razie twój kod może szybko zmienić się w "szukanie igły w stogu kodu". A także sprawdź obecność wszystkich potrzebnych bibliotek i pakietów, szczególnie jeśli restartowałeś system lub aktualizowałeś Pythona. Czasami brakujące zależności mogą stworzyć nagłe "problematyczne imprezy".

Proces wyciągania i obróbki klatek może być niezwykle przydatny w różnych dziedzinach. Na przykład do tworzenia materiałów edukacyjnych, analizy wideo sportowego do treningów, lub kreatywnego podejścia do montażu i obróbki wideo.

Więc, gdy już opanujesz wszystkie te techniki, będziesz mógł łatwo rozłożyć dowolne wideo na poszczególne klatki i zrobić z nimi wszystko, co chcesz! Zapomnij o nudzie i monotonii — twój nowy zestaw narzędzi otwiera cały świat możliwości. I pamiętaj, z MoviePy nie potrzebujesz supermocy, aby tworzyć coś naprawdę cudownego.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION