ffplay -i /dev/video0 -video_size 640x480 # Visualizza l'output della USBCAM, con risoluzione: 640x480 pixels
ffmpeg -i /dev/video0 -ss 00:00:10.00 -t 00:02:00.00 vOutA1t.mkv # Crea un video di 2 minuti contenente l’output della USBCAM iniziando a registrare 10 secondi dopo che il comando è stato impartito.
funzionano perfettamente, ma non è possibile impartirli su due terminali diversi per vedere quello che si registra.
Esiste un comando di FFMpeg che permetta contemporaneamente sia di registrare un video, sia di vedere quello che si sta registrando?
Ringrazio sin d'ora chi mi aiuterà.
Non conoscevo tali comandi ... li ho provati (con &) e NON vanno in background.
Ma il motivo non pare l'output a terminale, ma il fatto che se gira uno l'altro dice "device busy" (quindi mette un lock esclusivo)
Le poche volte che ho dovuto registrare una presentazione (piu' che il video della mia brutta faccia mi interessava l'audio e le slide) ho usato OBS Studio (non che lo padroneggi, come in genere qualsiasi cosa di multimediale)
Ho fatto una rapida ricerca in rete per "ffmpeg and ffplay at same time" ma non trovo nulla. C'e' un esempio in cui si manda l'output di ffmpeg su - e lo si pipa in ffplay ma non l'inverso. Passo.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
ffplay -i /dev/video0 -video_size 640x480 # Visualizza l'output della USBCAM, con risoluzione: 640x480 pixels
ffmpeg -i /dev/video0 -ss 00:00:10.00 -t 00:02:00.00 vOutA1t.mkv # Crea un video di 2 minuti contenente l’output della USBCAM iniziando a registrare 10 secondi dopo che il comando è stato impartito.
funzionano perfettamente, ma non è possibile impartirli su due terminali diversi per vedere quello che si registra.
Esiste un comando di FFMpeg che permetta contemporaneamente sia di registrare un video, sia di vedere quello che si sta registrando?
Ringrazio sin d'ora chi mi aiuterà.
ffplay -i /dev/video0 -video_size 640x480 # Visualizza l'output della USBCAM, con risoluzione: 640x480 pixels
ffmpeg -i /dev/video0 -ss 00:00:10.00 -t 00:02:00.00 vOutA1t.mkv # Crea un video di 2 minuti contenente l’output della USBCAM iniziando a registrare 10 secondi dopo che il comando è stato impartito.
funzionano perfettamente, ma non è possibile impartirli su due terminali diversi per vedere quello che si registra.
Esiste un comando di FFMpeg che permetta contemporaneamente sia di registrare un video, sia di vedere quello che si sta registrando?
Ringrazio sin d'ora chi mi aiuterà.
@ trekfan1
@ danilo_g
Non escludo l'uso di una GUI per ottenere il risultato cercato, tuttavia prima vorrei poter fare da riga di comando.
- - -
edit
Nel frattempo, mi sono imbattuto nella pagina https://stackoverflow.com/questions/460 ... -same-time
ed ho verificato che il comando
fa qualcosa di molto simile a quello che vorrei fare io ma, se imposto inizio, durata, e/o risoluzione, non vedo l'anteprima.
Capita solo a me?
Hai trovato lo stackoverflow che avevo visto pure io. Cosi' a naso non sono sicuro della sintassi. Il primo ffmpeg use /dev/video come input, e lo standard output (-) come output. Non credo salvi anche su file (hai verificato ?). Il secondo ffplay usa lo stdout del primo come input. E per questo funziona. Un ffmpeg e un ffplay che usino entrambi /dev/video no (il secondo trova "device busy", si vede che il primo mette un lock).
Non e' con tee (https://linuxize.com/post/linux-tee-command/) si possa fare un "piping a T" ? Io lo ho sempre visto e raramente usato per salvare su file e allo stesso tempo vedere a terminale l'output di un comando. Mai usato tee con un secondo comando.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
@Sargonsei ti ricordo di NON fare post consecutivi se non ci sono risposte ma di cliccare sulla matita e aggiungere il nuovo testo eventualmente preceduto da EDIT, grazie
fa qualcosa di molto simile a quello che vorrei fare io ma, se imposto inizio, durata, e/o risoluzione, non vedo l'anteprima.
Capita solo a me?
Hai trovato lo stackoverflow che avevo visto pure io. Cosi' a naso non sono sicuro della sintassi. Il primo ffmpeg use /dev/video come input, e lo standard output (-) come output. Non credo salvi anche su file (hai verificato ?). Il secondo ffplay usa lo stdout del primo come input. E per questo funziona. Un ffmpeg e un ffplay che usino entrambi /dev/video no (il secondo trova "device busy", si vede che il primo mette un lock).
Non e' con tee (https://linuxize.com/post/linux-tee-command/) si possa fare un "piping a T" ? Io lo ho sempre visto e raramente usato per salvare su file e allo stesso tempo vedere a terminale l'output di un comando. Mai usato tee con un secondo comando.
funziona (registra e mostra mentre registra), ma inizia la registrazione da quando viene impartito, e la termina quando si preme il tasto [Q], ed io vorrei che iniziasse e terminasse in base a comandi impartiti.
Per il resto, se non posti in questa discussione le righe di cui parli, mi riesce difficile capire di quale parli.
$ gst-launch-1.0 v4l2src device=/dev/video0 ! decodebin ! videoconvert! autovideosink
Impostazione della pipeline a PAUSED ...
La pipeline è viva e non necessita il PREROLL ...
La pipeline è in PREROLLED ...
Impostazione della pipeline a PLAYING ...
New clock: GstSystemClock
Ridistribuzione latenza...
Errore: dall'elemento /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImageSink:autovideosink0-actual-sink-xvimage: Output window was closed
Informazioni di debug aggiuntive:
../sys/xvimage/xvimagesink.c(586): gst_xv_image_sink_handle_xevents (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImageSink:autovideosink0-actual-sink-xvimage
Execution ended after 0:00:21.646055738
Impostazione della pipeline a NULL ...
Esecuzione di free sulla pipeline...
Ha mostrato l'immagine ripresa dalla webcam, ma non ha salvato niente.
ho trovato un comando per far registrare e lasciare il file in home, ma ha un inconveniente: il led della webcam rimane acceso e bisognerebbe trovare il modo di spegnere la webcam.
Ovvio. lsof (list open files) va fatto girare da un altro terminale mentre l'altro comando ff... sta girando. Se questo non gira il file non e' aperto e lsof non lo lista.
funziona (registra e mostra mentre registra), ma inizia la registrazione da quando viene impartito, e la termina quando si preme il tasto [Q], ed io vorrei che iniziasse e terminasse in base a comandi impartiti.
Bene, allora duplica l'output su vOut01.mkv e sullo stdout ! Per la temporizzazione dello start si puo' usare uno sleep. Per quella dello stop non lo so, andrebbe usato un killall dopo uno sleep ... ma come darlo in background indipendentemente dall'altro ?
Sospetto che lanciando due di tali gst commands da due terminali diversi anche li' il secondo si bloccherebbe su device busy.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)