2011-09-19 11 views
5

Come posso convertire un file video (mpeg, ad esempio) in una raccolta di immagini?Come posso convertire un file video (mpeg, ad esempio) in una raccolta di immagini?

risposta ideale sarebbe coprire sia C++ e Java utilizzando le librerie disponibili, e anche come mettere a nudo manualmente i singoli fotogrammi di un file video per un certo formato video comune.

+0

La risposta attuale di Don Reba è buona e la accetterò a meno che qualcuno non ne fornisca una più approfondita. Chiaramente posso solo guardare il codice sorgente di ffmpeg per vedere i dettagli, ma se c'è un riferimento che è più facile da leggere rispetto al codice sorgente che sarebbe apprezzato. Inoltre, c'è qualche libreria in Java che fa questo? –

risposta

6

Per estrarre tutti i frame senza perdita di qualità, utilizzare

ffmpeg -i "$input_file" -f image2 "outdir/%05d.png" 

Se si preferisce un formato di output diverso, basta cambiare .png; per impostazione predefinita, ffmpeg dedurrà il tipo di file dall'estensione.

L'opzione -f image2 dice ffmpeg di scrivere una serie di immagini. Lo "outdir/%05d.png" fornisce uno schema di nome file, in questo caso "5-digit frame number.png".

Se si desidera solo per estrarre n fotogrammi al secondo, aggiungere l'opzione -r n dopo "$input_file". (Credo n può essere in virgola mobile.)

Nel caso in cui il video è Motion JPEG (MJPEG), invece utilizzare:

ffmpeg -i "$input_file" -vcodec copy -f image2 "outdir/%05d.jpg" 

Questo decomprime i fotogrammi direttamente dal flusso video, che è più veloce e ovviamente usa meno spazio su disco.

Per ulteriori informazioni/altre opzioni, consultare la pagina man o the documentation (cercare image2).

+0

Questa è una risposta migliore. –

3

È possibile farlo usando ffmpeg con -vcodec png. Ad esempio, questo sarebbe convertire my_video.avi in ​​frame con un numero di cinque cifre:

ffmpeg -i my_video.avi -vcodec png telaio% 05d.png

Si può anche necessario specificare desiderato framerate e risoluzione. È possibile eseguire ffmpeg -codecs per visualizzare tutti i formati disponibili.

+0

Grazie! Sono contento che sia così facile. –

+0

Hai provato questo e sei sicuro che funzioni? Supporta jpg, gif, bmp? –

+0

L'ho provato. È possibile eseguire 'ffmpeg -codecs' per vedere cosa è supportato. Gif e bmp sembrano essere lì; non sono sicuro di jpg. –

0

Probabilmente è possibile utilizzare apiexample.c nella libreria libavcodec di ffmpeg che consente di vedere come prendere un frame buffer per codificarlo facilmente nel flusso mpeg.

In alternativa è possibile utilizzare Gstreamer che è un quadro molto più ordinato.

Per Java, provare a utilizzare Java Media Framework.

Problemi correlati