Strumento rapido per generare gallerie video in miniatura per la riga di comando


14

Uso gframecatcher per generare gallerie video in miniatura, ovvero qualcosa del genere:

inserisci qui la descrizione dell'immagine

Tuttavia, questo è uno strumento GUI e voglio creare ricorsivamente una galleria per ogni video in una struttura di directory, quindi sto cercando uno strumento da riga di comando veloce per farlo.

Risposte:


28

Estrai le immagini acquisite (queste sono alte 100 pixel e mantengono le proporzioni), la frequenza ( -r) è al secondo (questo produce un fotogramma ogni ~ 5 minuti), inoltre aggiunge il timestamp all'immagine di output.

ffmpeg  -i MOVIE.mp4 -r 0.0033 -vf scale=-1:120 -vcodec png capture-%002d.png

Quindi utilizzare ImageMagickper creare l'immagine della galleria:

montage -title "Movie Name\nSubtitle" -geometry +4+4 capture*.png output.png

7
Puoi usare le frazioni per il tasso ( -r). Ciò rende più semplice e preciso specificare i tempi. 5min = 300 secondi ffmpeg -i MOVIE.mp4 -r 1/300 -vf scale=-1:120 -vcodec png capture-%02d.png.
DutGRIFF,

avconvfunziona allo stesso modo, nel caso in cui non sia ffmpegdisponibile (alcune versioni di Ubuntu).
Ken Sharp,

2
Funziona, ma richiede l'impianto idraulico attraverso l'intero file video. superuser.com/questions/538112/… fornisce alcuni esempi che tentano di trovare miniature significative, oltre a evitare di dover sedersi ed elaborare l'intero video per ottenere alcuni fotogrammi.
Skrylar,

Questo non aggiunge il timestamp all'immagine.
felwithe

Come lo faresti in batch per un mucchio di video in una directory?
Paul Jones,

12

Mi piace usare uno script bash della riga di comando unix facile da usare chiamato VCS - Video Contact Sheet. La loro pagina ufficiale: http://p.outlyer.net/vcs/

È molto più facile da usare, persino più semplice di una GUI

'' È uno script bash pensato per creare fogli di contatto video (anteprime), ovvero anteprime o anteprime di video. Qualsiasi video supportato da mplayer e ffmpeg può essere utilizzato da questo script. '' Dovrai avere uno ffmpego mplayerinstallato sul tuo sistema.

Uso:

vcs input-filename -U0 -i 1m -c 3 -H 200 -a 300/200 -o save-filename.jpg

Come funziona il comando

Modifica input-filname nel nome del tuo file video!

  • -U0(nessun nome nel piè di pagina - altrimenti visualizza il nome host - nota che questo è zero non la lettera O)

  • -i 1m(imposta l'intervallo di tempo di acquisizione in minuti - in questo caso è ogni minuto - puoi anche usare -ninvece che imposta il numero di acquisizioni, ad esempio -n 21creerà 21 immagini, ma non usarle entrambe)

  • -c imposta il numero di colonne (qui sono 3 colonne)

  • -H 200 -a 300/200 (imposta le dimensioni e l'aspetto in modo che il file non sia troppo grande - sembra che tu debba fare entrambe le cose)

  • -o filename.jpg(usa .jpgcome predefinito perché .pngè troppo grande - e cambia il nome del file con uno a tua scelta!)


7

Questo sembra adattarsi al conto , è gratuito e open source e funziona anche su Windows :)

Ha anche roba avanzata, come invece di scegliere ciecamente qualsiasi fotogramma a un determinato intervallo, può scegliere quelli che sono abbastanza vicini ma non sembrano troppo sfocati, quindi invece di fare questo:

immagine dello schermo

Puoi passargli un parametro ( -D6) quindi fa questo:

screenshot migliore

Inoltre, non mi piacciono molto i bordi, quindi le immagini possono essere leggermente più grandi.


7

C'è una soluzione dal forum ffmpeg.

Per creare più screenshot e posizionarli in un singolo file di immagine (creazione di riquadri), puoi utilizzare il filtro video per tessere FFmpeg, in questo modo:

ffmpeg -ss 00:00:10 -i movie.avi -vf 'select=not(mod(n\,1000)),scale=320:240,tile=2x3' out.png

Ciò cercherà 10 secondi nel film, selezionerà ogni 1000 ° fotogramma, ridimensionalo a 320x240 pixel e creerà tessere 2x3 nell'immagine di output out.png.

Post originale qui: http://ffmpeg.gusari.org/viewtopic.php?f=25&t=597


Inoltre, ffmpeg sembra supportare "crop" con la stessa sintassi.
alcune idee l'

4

Ecco come elaboro un semplice foglio di contatto utilizzando AWS EC2, dal mio mac.

Passaggio n. 1: creare un'istanza EC2 su Amazon Web Services

Ero solito:

Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type - ami-0d4cfd66
t2.medium

Passaggio 2: configura l'istanza

Questo è tutto eseguito dal mio mac per comodità, ma potresti anche eseguire solo i comandi "sudu su ..." dalla riga di comando EC2.

ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; curl -O http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; gunzip ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "sudo su root; tar -xf ffmpeg.static.64bit.latest.tar"

Sostituendo 11.22.33.44 con l'IP EC2.

Passaggio 3: elaborare un video

Invia il video:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem pem' /Users/mdouma/Desktop/myVideo.mov ec2-user@11.22.33.44:/home/ec2-user/

Elaboralo in un foglio di contatto:

ssh -i "/local/path/to/key/your_ec2_key.pem" ec2-user@11.22.33.44 "rm -f out.png ; ./ffmpeg -ss 00:00:00 -i myVideo.mov -vf 'select=not(mod(n\,1)),scale=113:111,crop=111:111,tile=18x36' out.png"

Cambia / Users / mdouma nella tua radice locale Cambia ", 1" in un altro numero, ad es. ", 7", se vuoi solo ogni 7 frame. Cambia 111 nella misura che desideri

Copialo sul mio mac:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem'  ec2-user@11.22.33.44:/home/ec2-user/out.png  /Users/mdouma/Desktop/out.png
open /Users/mdouma/Desktop/out.png

Questo è un ottimo consiglio. Nota però che non ha sudo suscopo.
Ken Sharp,

2
Perché lo stai inviando a ec2? Perché non eseguirlo semplicemente sul tuo mac localmente? i file video potrebbero essere di grandi dimensioni ...
verificato il

4

Questo strumento mi ha aiutato (2019-02) - ed è mantenuto. Molte opzioni: griglia, qualità, caratteri, colori, bordo, intervallo, ...

https://github.com/amietn/vcsi

Crea fogli di contatto video. Un foglio di contatto video è un'immagine composta da miniature di acquisizione video disposte su una griglia.

Hai solo bisogno di ffmpeg e python.


Questo è molto buono - grazie!
Ash


1

Totem - il lettore video predefinito per 14.04 e alcune versioni precedenti di Ubuntu - ha un'opzione di menu con opzioni semplici (sotto il menu Modifica, "Crea Galleria di schermate ..."). C'è anche un equivalente della riga di comando (ish) chiamato "totem-video-thumbnailer" che ha una pagina man che ti dice come usarlo; Ho scritto un semplice script bash che utilizzava l'output del comando find (facendo attenzione a non separare i file con spazi nei nomi) per generare automaticamente una galleria di screenshot delle miniature (o foglio di contatto come indicato anche sopra) per tutti i file sopra un certo dimensione in una directory che non ne aveva già una.

Potrei caricarlo sul mio github sotto ~ jgbreezer se qualcuno avesse voglia di cercarlo. Sebbene le soluzioni che utilizzano ffmpeg e altre cose possano essere più flessibili e affidabili; Mi sembra di ottenere output di errore dal comando totem sul non trovare determinati frame, ma sembra funzionare comunque la maggior parte delle volte.


0

Volevo la stessa cosa e googling finì per usare ffmpeg e imagemagick. IMHO 'veloce'. Quindi ho trovato uno script bash chiamato SlickSlice (ultimo aggiornamento 2008, ma ha funzionato perfettamente fino a ieri). L'ho installato e personalizzato a mio piacimento usando il file di configurazione e lo script stesso. Lo script usa ImageMagick e MPlayer tra l'altro.

Ho fatto un dettaglio come fare e personalizzazione dopo averlo usato con successo. Una volta installato correttamente, è possibile generare una miniatura della sequenza temporale del video con il semplice comando:
slickslice -x "InputFile.mp4"(predefinito 4 colonne x 15 righe) o
slickslice -x "InputFile.mp4" -S 6x10(per 6 colonne x 10 righe).

Emette come SLICKSLICED_InputFile.mp4.jpege l'ho personalizzato per produrre InputFile.mp4-screen.jpegmodificando lo script bash stesso.

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.