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.