Jak mogę przekonwertować plik wideo na sekwencję obrazów, na przykład jedną klatkę co N sekund. Czy mplayer lub ffmpeg mogą to zrobić? Użyłem MPlayera do ręcznego robienia zrzutów ekranu, ale chciałbym zautomatyzować to w przypadku długiego filmu.
71
Odpowiedzi:
Jest to bardzo proste z ffmpeg i może generować jedną klatkę co N sekund bez dodatkowego skryptu. Aby wyeksportować jako sekwencję obrazów, po prostu użyj
myimage_%04d.png
lub jako wyjście.%0xd
Bit jest przetwarzany na zero wyściełane całkowitąx
cyfr - przykładzie I otrzymano dostaje wynik jakomyimage_0000.png
,myimage_0001.png
,myimage_0002.png
itp..
Możesz użyć wielu formatów zdjęć, png, jpeg, tga, cokolwiek (zobacz
ffmpeg -formats
pełną listę).Ok, więc teraz wiemy, jak wyeksportować film jako sekwencję obrazów, ale powiedzmy, że nie chcemy eksportować każdej klatki?
Sztuką jest po prostu zmiana liczby klatek na sekundę wyjścia na cokolwiek chcemy, korzystając z
-r n
opcji gdzien
liczba klatek na sekundę. 1 klatka na sekundę-r 1
, jedna klatka co cztery sekundy-r 0.25
, jedna klatka co dziesięć sekund-r 0.1
i tak dalej.Podsumowując, tak wyglądałoby zapisanie jednej klatki
input.mov
co cztery sekundyoutput_0000.png
,output_0001.png
itd .:Należy pamiętać, że
-r 0.25
opcja idzie po tej-i input.mov
części, ponieważ jest kontrolowanie klatek na wyjściu . Jeśli umieścisz go przed wejściem, będzie traktował plik wejściowy tak, jakby miał określoną częstotliwość klatek.Zmień% xd do wielu cyfr jednak trzeba, np jeśli komenda stworzy ponad 10.000 klatek zmienić
%04d
się%05d
. Działa to również w przypadku plików wejściowych, które są sekwencjami obrazów. Przeczytaj więcej tutaj .Użytkownicy systemu Windows : w wierszu polecenia użyj
%
przykład:
ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
W skryptach CMD i BAT należy używać
%%
przykład:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Więc podwój
%%
w skryptach i pojedynczo%
w interaktywnym wierszu poleceń. Błąd w obu sytuacjach spowoduje błąd.źródło
-r
jeśli chcę eksportować każdą ramkę? Jeśli znam FPS tego filmu, to chyba go wprowadzam, ale co jeśli nie?jpegs
, chyba że jesteś pewienpng
, że tego chcesz. W moim przypadkujpeg
rozmiar każdego z nich wynosił około 50 KB, a rozmiarpng
około 2 MB.-q:v 1
jest to bardzo przydatna opcja tutaj, jak w superuser.com/questions/318845/…zapisze ramkę jako plik jpeg co 5 sekund.
Jednak nie zatrzyma się na końcu pliku, będzie kontynuował tworzenie kopii ostatniej klatki. Aby tego uniknąć, znajdź czas trwania filmu w sekundach, używając innego odtwarzacza lub za pomocą mplayera:
i poszukaj linii takiej jak „ID_LENGTH = 147,00”.
Odejmij 2 od długości i użyj tej wartości dla
-endpos
opcji. Na przykład dla 147 sekund wideo:źródło
mpv --vo=image --sstep=5 movie.mkv
działa świetnie bez wyżej wspomnianego błędu ( mpv jest rozwidleniem mplayera) przy użyciu mpv 0.27.0 na Debianie.Za pomocą
ffmpeg
możesz wykonać następujące czynności:To polecenie generuje miniaturę JPG o rozmiarze 320 × 240 w 4. sekundzie filmu. Umieść to w skrypcie, który zmienia czas i nazwę pliku i gotowe.
Więcej informacji: Utwórz miniaturę co X sekund filmu
źródło
-ss position
flagi, aby szukać dalej w pliku?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
przed,-i
aby wyszukiwanie odbywało się przed dekodowaniem wejściowego wideo. to powinno przyspieszyć. źródłoJeśli szukasz swoistego arkusza kontaktowego i pracujesz z systemem operacyjnym podobnym do Uniksa, możesz użyć tego skomplikowanego skryptu, zwanego do punktu Video Contact Sheet * NIX , short vcs .
W tle używa również
ffmpeg
(domyślnie) lubmplayer
, dlatego może obsługiwać wiele formatów wideo. Automatyzuje proces przechwytywania nieruchomych obrazów z filmu i komponuje je w obraz z pewnym nagłówkiem i stopką. Możesz wybrać np. Ile zdjęć chcesz lub alternatywnie różnice czasowe między nimi.Przez 10 minut wywoływanie wygląda następująco:
Sprawdź pełną listę opcji wiersza poleceń dla niektórych innych poprawek.
Oto przykładowy formularz kontaktowy pobrany ze strony głównej :
źródło
W wersji VLC 1.1.0 i nowszej możesz użyć filtra wideo sceny:
Powyższe zapisuje 1 z każdych 24 klatek (--scene-ratio = 24), zaczynając od 00:00:10 i kończąc o 00:00:11.
Właśnie przetestowałem i potwierdziłem, że działa z VLC 2.0.3 na świeżej instalacji Windows 8 (nie mam żadnych dodatkowych wtyczek wideo ani oprogramowania).
Pełna dokumentacja: http://wiki.videolan.org/How_to_create_thumbnails
źródło
VirtualDub może to dla Ciebie zrobić
File
->Export
->Image sequence
źródło
Możesz także spróbować tego
Źródło powyżej
źródło
Możesz pomijać ramki w VirtualDub. Wystarczy użyć opcji „Decimate By” znajdującej się w menu Wideo -> Liczba klatek na sekundę. Na przykład, jeśli ustawisz „Decimate By 100”, a następnie użyj polecenia Plik -> Eksportuj -> Sekwencja obrazów, zapisuje tylko co 100 klatkę.
źródło