2010-04-27 10:05:36 +0000 2010-04-27 10:05:36 +0000
72
72

Jak wyodrębnić jedną klatkę z filmu co N sekund do obrazu?

Jak mogę przekonwertować plik wideo na sekwencję obrazów, na przykład jedna klatka co N sekund. Czy mplayer lub ffmpeg mogą to zrobić? Używałem MPlayera do ręcznego łapania zrzutów ekranu, ale chciałbym to zautomatyzować dla długiego wideo.

Odpowiedzi (8)

73
73
73
2014-03-15 09:47:20 +0000

Jest to bardzo proste z ffmpeg, i może wyprowadzać jedną klatkę co N sekund bez dodatkowego skryptowania. Aby wyeksportować jako sekwencję obrazów, wystarczy użyć myimage_%04d.png lub podobnego jako wyjścia. Bit %0xd jest konwertowany na wypełnioną zerem liczbę całkowitą o długości x cyfr - w podanym przeze mnie przykładzie wyjdzie jako

  • myimage_0000.png,
  • myimage_0001.png,
  • myimage_0002.png

Możesz użyć wielu formatów obrazów, png, jpeg, tga, cokolwiek (zobacz ffmpeg -formats po pełną listę).

*Ok, więc teraz wiemy, jak wyeksportować film jako sekwencję obrazów, ale powiedzmy, że nie chcemy eksportować każdej pojedynczej klatki? *

Sztuczka polega na tym, by po prostu zmienić liczbę klatek na wyjściu na taką, jaką chcemy, używając opcji -r n, gdzie n to liczba klatek na sekundę. 1 klatka na sekundę to -r 1, jedna klatka co cztery sekundy to -r 0.25, jedna klatka co dziesięć sekund to -r 0.1 i tak dalej.

Tak więc, aby zebrać to wszystko razem, tak wyglądałoby zapisywanie jednej klatki z input.mov co cztery sekundy do output_0000.png, output_0001.png itd.:

ffmpeg -i input.mov -r 0.25 output_%04d.png

Zauważ, że opcja -r 0.25 jest umieszczona po części -i input.mov, ponieważ kontroluje ona częstotliwość odświeżania wyjścia. Gdybyś umieścił ją przed wejściem, traktowałaby plik wejściowy tak, jakby miał określoną częstotliwość odświeżania.

Zmień %xd na tyle cyfr, ile potrzebujesz, np. jeśli komenda miałaby utworzyć więcej niż 10,000 klatek zmień %04d na %05d. Działa to również dla plików wejściowych, które są sekwencją obrazów. Czytaj więcej tutaj .

Użytkownicy Windows : W linii poleceń użyj %

przykład: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png

W skryptach CMD i BAT użyj %%

przykład: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

Czyli podwójne %% w skryptach i pojedyncze % w interaktywnej linii poleceń. Pomylenie się w obu sytuacjach spowoduje wygenerowanie błędu.

28
28
28
2010-04-28 10:08:07 +0000
mplayer -vo jpeg -sstep 5 file.avi

będzie zapisywał klatkę jako plik jpeg co 5 sekund.

Nie zatrzyma się jednak 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 mplayera:

mplayer -vo null -ao null -frames 0 -identify file.avi

i poszukaj linii takiej jak “IDLENGTH=147.00”.

Odejmij 2 od długości, i użyj tej wartości dla opcji -endpos. Na przykład, dla filmu o długości 147 sekund:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
```.
11
11
11
2010-04-27 11:41:07 +0000

Za pomocą ffmpeg , możesz wykonać następujące czynności:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

To polecenie generuje miniaturkę 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: Twórz miniaturkę co X sekund filmu ](http://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video)

8
8
8
2013-06-04 08:15:55 +0000

Jeśli szukasz czegoś w rodzaju kontaktu i pracujesz z systemem operacyjnym Unix-like, możesz skorzystać z tego rozbudowanego skryptu, nazwanego do rzeczy Video Contact Sheet \NIX, w skrócie vcs .

W tle używa on również ffmpeg (domyślnie) lub mplayer, dzięki czemu może obsługiwać wiele formatów wideo. Automatyzuje proces przechwytywania nieruchomych obrazów z filmu i kompilowania ich do obrazu z jakimś nagłówkiem i stopką. Można wybrać np. ile zdjęć ma być zrobionych lub jakie mają być różnice czasowe między nimi.

Dla interwału 10 minut wywołanie wygląda tak:

vcs -i 10m input.avi

Sprawdź pełna lista opcji linii poleceń dla kilku innych tweaków.

Oto przykładowy arkusz kontaktowy, pobrany ze strony głównej :

.

7
7
7
2012-09-11 03:17:14 +0000

W VLC 1.1.0 i wyżej, możesz użyć filtra wideo sceny:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

Powyższe zapisuje 1 z każdych 24 klatek (–scene-ratio=24), zaczynając od 00:00:10 i kończąc na 00:00:11.

Właśnie przetestowałem i potwierdzam, że działa to 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 tocreatethumbnails

2
2
2
2010-04-27 10:13:07 +0000

VirtualDub ](http://www.virtualdub.org/) może to dla Ciebie zrobić

File - Export - Image sequence

.

1
1
1
2010-04-27 16:22:46 +0000

Możesz również spróbować tego

z linii poleceń VLC…

vlc “C:\file\file.avi” -V image –image-out-prefix=capname –image-out-ratio=60

plik. avi jest filmem z którego chcesz przechwycić, capname jest prefiksem zapisywanych obrazów, możesz chcieć pobawić się z proporcją (60 oznacza, że 1 z 60 obrazów jest przechwytywany) Możesz dodać więcej komend, na przykład –image-out-format jpeg zapisze twoje kapsle jako jpegi zamiast pngs, –snapshot-path pozwoli ci wybrać gdzie zapisać twoje kapsle. Źródło powyższego

1
1
1
2011-11-30 22:06:24 +0000

W VirtualDub można pomijać klatki. Wystarczy skorzystać z opcji “Decimate By” znajdującej się w menu Video -> Frame Rate. Na przykład, jeśli ustawisz opcję “Decimate By 100”, a następnie użyjesz opcji File - ™> Export - ™> Image sequence, zostanie zapisana tylko co setna klatka.