2012-08-10 19 views
5

Czy istnieje sposób (za pośrednictwem skryptu lub preferowany parametr wywoływania ffmpeg, który przeoczyłem), aby wyodrębnić ramki z pliku avi, a zignorować kolejno powtarzające się ramki, być w stanie przejść przez zdjęcia patrząc tylko na delty/zmiany?FFMPEG - Jak wyodrębnić ramki jako obrazy podczas usuwania kolejno powtarzających się ramek

Często muszę nagrywać spotkania w pracy i przez większość czasu, ekran klienta, na który patrzę, nie zmienia się, gdy rozmawiamy przez telefon. Po zakończeniu spotkania muszę użyć tych obrazów jako części naszej dokumentacji i zebrania specyfikacji.

Wiem, że mógłbym wypisać każdą klatkę i uruchomić je przez dowolne zduplikowane narzędzie do usuwania plików, ale to usunie WSZYSTKIE zduplikowane ramki. Tak więc, jeśli ramki wyodrębnione poszły tak:

A, A, A, B, B, B, B, C, C, A, A, C, C, C, B, B, B ...

uruchamiając je za pośrednictwem typowego usuwania zduplikowanych plików, chciałbym uzyskać: a, B, C

Co chciałbym to: a, B, C, a, C, B

Polecenie, którego obecnie używam do wyodrębniania obrazów:

ffmpeg.exe -i file.avi -ss 0 -sameq -f image2 -r 1 im wieku% 5d.png

Zdobyłem każdą klatkę wcześniej (usunięcie -r 1 z góry), ale to generowało zbyt wiele klatek, z którymi można sobie poradzić, ponieważ te spotkania online mogą trwać wiele godzin, więc na razie uzyskać jedną klatkę na sekundę z pliku.

Rozwiązanie oparte na Windows byłoby lepsze, jednak jestem pewien, że inne osoby byłyby zainteresowane rozwiązaniami na innych platformach, jeśli są dostępne.

Każde rozwiązanie lub punkt we właściwym kierunku jest bardzo doceniane.

+0

Czy kiedykolwiek znaleźć rozwiązanie tego? Szukam prawie tego samego. –

Odpowiedz

7

Czy próbowałeś z opcją -vsync 0?

+0

To się zbliża, ale kiedy próbowałem, "fdupes" nadal znajdował kolejne, identyczne klatki do uboju. –

+1

+1 W moim przypadku (mała liczba klatek na sekundę) każda klatka była duplikowana 50 razy. Z tą opcją była tylko 1 zduplikowana klatka dla każdej 1000 nie powielonych ramek. – user2518618

+0

Wylosowałem dokładnie liczbę ramek wejściowych dla mnie. Być może są jakieś czarne ramki przejściowe, które pojawiają się jako duplikaty dla innych komentujących? –

0

Możesz go uzyskać przez filtr wideo mpdecimate (a następnie filtr setpts dla prawidłowego timingu).
Opcja ta:

-vf mpdecimate,setpts=N/FRAME_RATE/TB 

Może to nie będzie działać z oryginalnego polecenia i trzeba będzie użyć go do pierwszego konwersji oryginalnego wideo do wideo bez zduplikowanych klatek:

ffmpeg.exe -i file.avi -vf mpdecimate,setpts=N/FRAME_RATE/TB outfile.avi 

a następnie użyć outfile.avi do tworzenia sekwencji obrazów.

(w razie potrzeby filtr mpdecimate można regulować jego opcji hi, lo i frac ale wartości domyślne działać prawidłowo.)