Bez przesyłania, 100% lokalnie, bez konta

Artykuł

Wyodrębnianie klatek wideo dla miniatur i arkuszy kontaktowych

Wideo to sekwencja nieruchomych obrazów. Wyciągnięcie jednego z nich daje miniaturę, okładkę lub arkusz kontaktowy. Wynik jest ostrzejszy i bardziej przewidywalny, gdy rozumiesz, jak koder wideo przechowuje swoje klatki i które momenty warto uchwycić.

Klatki i częstotliwość klatek

Plik wideo to sekwencja nieruchomych obrazów wyświetlanych wystarczająco szybko, aby stworzyć złudzenie ruchu. Liczba obrazów wyświetlanych na sekundę to częstotliwość klatek, wyrażona w fps. Typowe wartości to 24 fps dla kina, 25 fps dla transmisji PAL, 30 fps dla wideo internetowego i 60 fps dla nagrań z gier. Przy 24 fps dwugodzinny film zawiera około 172 800 indywidualnych klatek. Każda klatka odpowiada pojedynczemu momentowi w czasie; wyodrębnienie jednej zamraża ten moment jako samodzielny obraz. Częstotliwość klatek określa również, ile klatek otrzymujesz na sekundę nagrania podczas wyodrębniania partii: przy 30 fps wyciągnięcie każdej klatki z minuty wideo daje 1800 obrazów, co często jest znacznie więcej niż potrzeba. Wyodrębnianie przy niższej częstotliwości klatek, albo co N-tej klatki w narzędziach, które to obsługują, to praktyczny sposób na zmniejszenie tej liczby przy jednoczesnym pokryciu pełnego czasu trwania.

Pasek osi czasu pokazujący 24 indywidualne klatki na sekundę nagrania, z widocznym numerem klatki i znacznikiem czasu pod każdą klatką.

Klatki kluczowe kontra klatki interpolowane

Nowoczesne kodeki wideo nie przechowują każdej klatki jako kompletnego obrazu. Używają trzech typów klatek, aby zaoszczędzić miejsce. I-frame, nazywana też klatką kluczową, to kompletny, samodzielny obraz. P-frame przechowuje tylko piksele, które zmieniły się od ostatniego I-frame lub P-frame. B-frame przechowuje zmiany względem zarówno poprzedniej, jak i przyszłej klatki, wymagając klatek po obu stronach do rekonstrukcji. Ponieważ P-frame lub B-frame jest niekompletny sam w sobie, jego dekodowanie wymaga otaczających klatek referencyjnych. Jeśli te klatki referencyjne zawierają rozmycie ruchu lub przejście, zrekonstruowany obraz dziedziczy to rozmycie. I-frame natomiast jest dekodowany niezależnie. Jest zawsze ostry, ponieważ nie zapożycza niczego od sąsiadów. Przy wyodrębnianiu klatki do użycia jako miniatura, trafienie na I-frame daje najczystszy możliwy wynik. Większość kodeków umieszcza I-frames przy cięciach scen, które są naturalnie ostrymi punktami startowymi.

Wybór odpowiedniego momentu

Nawet dobrze zdekodowany I-frame może być słabą miniaturą, jeśli uchwycony moment jest nieatrakcyjny. Kilka czynników obniża jakość miniatury. Rozmycie ruchu pojawia się, gdy kamera lub obiekt szybko się porusza podczas ekspozycji klatki; wynikające z tego rozmazanie sprawia, że klatka wygląda miękko, nawet jeśli dekodowanie było czyste. Klatki przejściowe uchwycone w połowie rozpuszczenia lub zanikania zawierają dwa nakładające się obrazy i rzadko sprawdzają się jako samodzielne zdjęcia. Niedoświetlone lub prześwietlone klatki, powszechne na początku sceny przed ustabilizowaniem się automatycznej ekspozycji, tracą szczegóły w cieniach lub światłach. Najlepsze klatki miniatur pochodzą z momentów wyraźnej akcji lub wyrazu, dobrego oświetlenia i stabilnej kamery. Przewijanie przez wideo w odtwarzaczu pokazującym dokładne znaczniki czasu pozwala zidentyfikować te momenty przed ich wyodrębnieniem. Klatka, która wygląda dobrze zatrzymana w odtwarzaczu, będzie generalnie wyglądać dobrze jako eksport statyczny.

Odtwarzacz wideo zatrzymany na dobrze oświetlonej, stabilnej klatce obiektu w trakcie akcji, z wyświetlanym znacznikiem czasu w rogu.

Eksport: rozdzielczość, format i co N-ta klatka

Przy wyodrębnianiu klatki, eksportowany obraz powinien odpowiadać natywnej rozdzielczości wideo. Skalowanie w górę wprowadza artefakty interpolacji; skalowanie w dół odrzuca piksele, które możesz chcieć zachować. Wideo 1080p tworzy obrazy 1920x1080 pikseli, a wideo 4K tworzy 3840x2160. Dla formatu, PNG zachowuje każdy piksel dokładnie i jest właściwym wyborem, gdy potrzebujesz maksymalnej ostrości do edycji lub dalszego skalowania. JPEG jest mniejszy i odpowiedni do podglądu lub udostępniania, ale wprowadza artefakty kompresji wokół ostrych krawędzi. Jeśli budujesz arkusz kontaktowy, siatkę małych reprezentatywnych klatek obejmujących pełny czas trwania, wyodrębnianie przy stałej częstotliwości klatek, zamiast pobierania każdej klatki, to standardowe podejście: żądanie 1 klatki na sekundę ze źródła 30 fps daje jeden obraz na sekundę nagrania, a wyższa częstotliwość, np. 5 lub 10 fps, daje gęstszy zestaw do dokładniejszej inspekcji. Dokładna częstotliwość zależy od tego, ile szczegółów potrzebujesz versus ile obrazów chcesz obsłużyć.

Lokalnie z video-extract-frames

Narzędzie video-extract-frames na Sunasty dekoduje wideo w całości w przeglądarce przy użyciu FFmpeg skompilowanego do WebAssembly. Upuszczasz plik, wybierasz częstotliwość klatek od 1 do 30 klatek na sekundę, wybierasz PNG lub JPEG, a narzędzie dekoduje klatki przy tej częstotliwości w pamięci przeglądarki i oferuje wyniki jako osobne pobrania, ograniczone do 300 klatek na jedno uruchomienie. Twój plik wideo nigdy nie opuszcza urządzenia. W żadnym momencie procesu żadne bajty nie są wysyłane na serwer. Ma to znaczenie dla nagrań zawierających osobistą lub wrażliwą treść: nagranie rodzinne, wywiad lub surowy materiał przed edycją. Przeglądarka ładuje wideo do wirtualnego systemu plików w RAM, uruchamia dekodowanie FFmpeg i przekazuje obrazy z powrotem do Ciebie. Kompromisem jest to, że dekodowanie odbywa się programowo na Twoim CPU, a nie przez dedykowany sprzęt, więc długie wideo o wysokiej rozdzielczości zajmie więcej czasu niż natywna aplikacja. Do wyodrębniania kilku klatek lub tworzenia arkusza kontaktowego z krótkiego klipu, szybkość jest praktyczna.

Narzędzia w tym artykule

Najczęściej zadawane pytania

Dlaczego wyodrębniona klatka wygląda rozmazanie?

Najczęstszą przyczyną jest trafienie na P-frame lub B-frame podczas momentu ruchu. Te klatki przechowują różnice zamiast kompletnych obrazów, a rozmycie ruchu w źródłowym materiale przechodzi do dekodowania. Spróbuj wyodrębnić najbliższy I-frame, który odpowiada cięciu sceny lub periodycznej klatce kluczowej, aby uzyskać ostrzejszy wynik.

Czy powinienem eksportować klatki jako PNG czy JPEG?

PNG, jeśli planujesz edytować klatkę, skalować ją w górę lub używać w kontekście, gdzie artefakty kompresji byłyby widoczne. JPEG, jeśli potrzebujesz mniejszego pliku do szybkiego udostępniania lub podglądu i nieznaczna obniżka jakości jest akceptowalna. W przypadku miniatur wyświetlanych w stałym małym rozmiarze, JPEG przy rozsądnym ustawieniu jakości jest zazwyczaj odpowiedni.

Jak stworzyć arkusz kontaktowy z wideo?

Wybierz częstotliwość klatek na tyle niską, by dać rozsądną liczbę klatek, zamiast pojedynczego znacznika czasu. Dla dwuminutowego klipu 1 klatka na sekundę daje około 120 klatek, co jest wystarczająco gęste, by wybrać dobrą siatkę; wynik i tak jest ograniczony do 300 klatek na jedno uruchomienie. Obecnie nie ma niższej częstotliwości niż 1 fps, więc dla rzadszego arkusza wyodrębnij przy 1 fps i zachowaj tylko klatki potrzebne do końcowej siatki.