Come posso estrarre un'immagine da un determinato momento di un video in Xubuntu 16.04?


8

Sto cercando un'opzione da riga di comando.

Ad esempio, se ho il video sample-video.mp4e desidero generare un file di immagine sample-image.jpgdal video alle 00:00:26, quale comando devo dare?

Inoltre, sarebbe molto utile se puoi spiegare in dettaglio quale sia la funzione di ogni argomento del comando.


2
Secondo questa domanda e le sue risposte ffmpegsembrano supportare i nomi dei file per l'output.
IQV

Risposte:


8

È possibile utilizzare mplayer(dal pacchetto mplayer, non installato per impostazione predefinita):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Questo creerà il file 00000001.jpgquindi devi rinominarlo. Per quanto ne so non c'è modo di specificare un nome file.

-vo jpegsignifica che vuoi l'output JPEG, -ss 00:00:26cerca la posizione data, -frames 1significa elaborare un fotogramma e quindi uscire.


Qual è il vantaggio di ottenere più di 1 fotogramma? Saranno copie o ogni fotogramma differirà di un secondo?
Sonevol,

Le immagini create da più fotogrammi differiranno di una frazione di secondo. Il valore esatto dipende dal video.
Florian Diesch,

5
@Sonevol Il frame esattamente alle 0:00:26 potrebbe non essere esattamente quello che vuoi. Potresti voler prendere i ~ 50 fotogrammi tra le 0:00:25 e le 0:00:27 (o anche solo 3-4 fotogrammi intorno al segno 0:00:26) e poi sfogliarli per scegliere quello migliore.
xDaizu,

1
@FlorianDiesch Possibile anche l'output in png con qualcosa del genere: -vo png:z=9con l'impostazione -z che specifica il livello di compressione. Per jpeg si potrebbe anche aggiungere in un ambiente di qualità: -vo jpeg:quality=100. Ma la tua risposta è ottima com'è già :)
andrew.46

13

Puoi usare ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel imposta il logoutput su quiet perché ffmpeg è molto loquace
  • -ss è ricerca (in pochi secondi, ovvero dove si desidera acquisire l'istantanea)
  • -i file video di input
  • -t timeframe dell'istantanea (in secondi)
  • -f tipo di file

Puoi anche giocare con le opzioni, come il controllo della qualità dell'uscita jpeg -q:v <linear integer 1-10>o della risoluzione -s 480x300.

Qualche idea in più qui


Metodo VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - perché è la riga di comando e non vogliamo che Windows si apra. inoltre, ciò significa che possiamo eseguirlo senza X11.

  • --start-time = 26 - è la posizione esatta dell'istantanea in secondi

  • --run-time = 1 - per quanto tempo il video "verrà riprodotto" in secondi. Giochiamo per un secondo per fare uno screenshot di questo secondo
  • --rate = 1 quando prendere lo screenshot. Questo in pratica significa "ogni secondo" ed è utile, se hai file più lunghi, fare uno screenshot ogni 60 secondi o ogni 5 minuti
  • --video-filter = scene dice a VLC che vogliamo fare screenshot
  • --vout = dummy nessun output per il video su X11, non ne abbiamo bisogno
  • --aout = dummy nessun output per l'audio, non ne abbiamo bisogno
  • --scene-ratio = 24 diciamo a VLC che ci sono circa 24 frame al secondo
  • --scene-prefix = sample-image il nome file del tuo screenshot
  • --scene-replace sostituisce tutti i file chiamati come screenshot sample-image.pngcon lo screenshot corrente. Se lo ometti, VLC inizierà a numerare gli screenshot
  • vlc: // esci da vlc una volta terminato

Documentazione completa qui


Cosa intendi per chiacchierone? E voglio un'istantanea al 26 ° secondo. Quindi, perché specificare il periodo di -t. Sto prendendo un'immagine non un video.
Sonevol,

3
"Chiacchierone" perché ffmpeg stampa oltre 40 righe di output del registro con questo comando, come la versione corrente, il tipo di installazione e le informazioni sul file video di input, il che non è interessante per te. Per il tuo scopo puoi probabilmente omettere "-t 1". Sembra che il valore predefinito sia un secondo o una frazione di quello, il che va bene per lo screenshot. La bella differenza è la possibilità di definire il nome del file di output e modificare la qualità / risoluzione, ecc.
Robert Riedl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.