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

Hoe één frame van een video om de N seconden naar een beeld extraheren?

Hoe kan ik een videobestand converteren naar een opeenvolging van beelden, bijvoorbeeld één frame om de N seconden. Kan mplayer of ffmpeg dit doen? Ik heb MPlayer gebruikt om screenshots handmatig te maken, maar ik zou dit willen automatiseren voor een lange video.

Antwoorden (8)

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

Het is heel eenvoudig met ffmpeg, en het kan elke N seconden een frame uitvoeren zonder extra scripting. Om te exporteren als een beeldsequentie gebruik je gewoon myimage_%04d.png of iets dergelijks als uitvoer. De %0xd bit wordt geconverteerd naar een met nullen gevuld geheel getal van x cijfers lang - het voorbeeld dat ik gaf krijgt uitvoer als

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

Je kunt veel formaten voor stilstaande beelden gebruiken, png, jpeg, tga, wat dan ook (zie ffmpeg -formats voor een volledige lijst).

*Ok dus nu weten we hoe we de film als een serie afbeeldingen kunnen exporteren, maar stel dat we niet elk frame willen exporteren? *

De truc is om simpelweg de framerate van de output te veranderen in wat we maar willen met de -r n optie waarbij n het aantal frames per seconde is. 1 frame per seconde zou -r 1 zijn, een frame elke vier seconden zou -r 0.25 zijn, een frame elke tien seconden zou -r 0.1 zijn enzovoort.

Dus om het allemaal samen te voegen, dit is hoe het eruit zou zien om een frame van input.mov elke vier seconden op te slaan in output_0000.png, output_0001.png etc.:

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

Merk op dat de -r 0.25 optie na het -i input.mov gedeelte komt, omdat het de frame rate van de output regelt. Als je hem vóór de invoer zou zetten, zou hij het invoerbestand behandelen alsof het de opgegeven beeldsnelheid had.

Verander de %xd in zoveel cijfers als je nodig hebt, bijv. als het commando meer dan 10.000 frames zou maken, verander dan de %04d in %05d. Dit werkt ook voor invoerbestanden die een beeldreeks zijn. Lees meer hier .

Windows gebruikers : Op de opdrachtregel gebruik je %

voorbeeld: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png

In CMD en BAT Scripts gebruik je %%

voorbeeld: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

Dus dubbele %% in scripts, en enkele % op de interactieve opdrachtregel. Als je het in beide situaties fout doet, krijg je een foutmelding.

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

slaat elke 5 seconden een frame op als een jpeg-bestand.

stopt echter niet aan het eind van het bestand, het blijft kopieën maken van het laatste frame. Om dit te vermijden, zoek de duur van de video in seconden, met een andere speler, of met mplayer:

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

en zoek naar een regel als “ID_LENGTH=147.00”.

Trek 2 af van de lengte, en gebruik deze waarde voor de -endpos optie. Bijvoorbeeld, voor een 147 seconden video:

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

Met ffmpeg , kun je het volgende doen:

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

Dit commando genereert een JPG thumbnail van 320×240 formaat op de 4e seconde in de video. Zet dit in een script dat de tijd en bestandsnaam verandert en je bent klaar.

Meer info: Maak een thumbnail elke X seconden van de video

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

Als u op zoek bent naar een soort contactblad en als u werkt met een Unix-achtig OS, kunt u gebruik maken van dit uitgebreide script, genaamd Video Contact Sheet *NIX , kort vcs .

Op de achtergrond gebruikt het ook ffmpeg (standaard) of mplayer, vandaar kan het een heleboel video formaten aan. Het automatiseert het proces van het vastleggen van stilstaande beelden uit de film en stelt deze samen tot een afbeelding met wat kop- en voetteksten. Je kunt bijvoorbeeld kiezen hoeveel opnames je wilt of hoeveel tijd er tussen de opnames moet zitten.

Voor een interval van 10 minuten, is de aanroeping als volgt:

vcs -i 10m input.avi

Kijk in de volledige lijst van commandline opties voor enkele andere tweaks.

Hier is een voorbeeld van een contactblad, overgenomen van de homepage :

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

Met VLC 1.1.0 en hoger kun je het scene video filter gebruiken:

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

Het bovenstaande slaat 1 van elke 24 frames op (–scene-ratio=24), beginnend bij 00:00:10 en eindigend bij 00:00:11.

Net getest en bevestigd dat dit werkt met VLC 2.0.3 op een verse Windows 8 installatie (ik heb geen extra video plugins of software).

Volledige documentatie: http://wiki.videolan.org/How

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

(http://www.virtualdub.org/) kan dit voor u doen

File -

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

Je zou dit ook kunnen proberen

vanaf de VLC commandoregel…

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

bestand. avi is de video waarvan je een opname wilt maken, capname is de prefix van de opgeslagen afbeeldingen, misschien wil je spelen met de ratio (60 betekent dat 1 van de 60 afbeeldingen wordt opgenomen) Je kunt meer commando’s toevoegen, bijvoorbeeld –image-out-format jpeg zal je caps opslaan als jpegs in plaats van als pngs, –snapshot-path laat je kiezen waar je je caps opslaat. Bron van boven

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

U kunt frames overslaan in VirtualDub. Gebruik gewoon de optie “Decimeren per” in het menu Video -> Beeldsnelheid. Als u bijvoorbeeld “Decimeren op 100” instelt en vervolgens Bestand - Exporteren - Beeldsequentie gebruikt, dan zal alleen elk 100e frame worden opgeslagen.