005 Come usare FFmpeg per registrare in un file multimediale ciò che appare sullo schermo del PC.

27 Agosto, 2022 (15:22) | ffmpeg, Fotografia digitale, Linux, Video | By: sargonsei

005 Come usare FFmpeg per registrare in un file multimediale ciò che appare sullo schermo del PC.
Cose da sapere prima di cominciare.
1. I parametri dimensionali non specificati sono dedotti da FFmpeg in base alle caratteristiche dello schermo video in ingresso, mentre gli altri parametri (es. i codec) sono dedotti da FFmpeg in base all’estensione del video finale tenendo conto di quali sono i parametri disponibili al momento della conversione.
Di conseguenza, lo stesso comando potrebbe fornire output visivamente diversi, se utilizzato su computer diversi, ovvero se impartito prima o dopo un aggiornamento di FFmpeg.
2. Di default, l’audio registrato è quello proveniente dal microfono, qialunque sia la sua vera sorgente.
Ciò significa che, di default, l’audio del PC è registrato solo se esce dal PC ed entra nel microfono.
3. I parametri X*Y relativi all’area registrata, sommati ai parametri X,Y relativi all’OFF-SET dell’area registrata, NON possono assumere valori maggiori alle dimensioni X*Y dello schermo oggetto di registrazione.
4. Di default, il comando registra ciò che appare sullo schermo dal momento in cui è stato impartito. Se si desidera che la registrazione inizi un certo periodo di tempo dopo che il comando è stato impartito, il comando deve contenere l’opzione [-ss hh:mm:ss.dc] (senza parentesi quadre: [Inizio, Ore:Minuti:Secondi.DecimiCentesimi]).
5. Di default, il comando smette di registrare ciò che appare sullo schermo: quando viene premuto il tasto [Q], oppure la combinazione di tasti [Control]+[C] oppure il terminale viene chiuso.
6. Di norma, qualunque parametro in grado di determinare il contenuto del file multimediale di destinazione partendo da un file multimediale in ingresso, può determinare il contenuto del file multimediale di destinazione partendo da ciò che appare sullo schermo del PC; di conseguenza:
– Qualora l’utente desideri stabilire a priori il momento in cui la registrazione ha inizio e fine, valgono tutte le istruzioni del paragrafo [007 Estrarre uno spezzone di un video] dove, al posto dei parametri relativi al file multimediale in ingresso, si dovranno riportare i parametri relativi all’hardware di acquisizione.
– Qualora l’utente desideri stabilire a priori la risoluzione del video in uscita, a prescindere dalla risoluzione dello schermo che verrà registrato, valgono tutte le istruzioni del paragrafo [016 Modificare la risoluzione di un video].

A) Per poter registrare ciò che appare sullo schermo del PC, è utile conoscerne le caratteristiche; a tale scopo, aprire un terminale ed impartire i comandi

-:~$ pactl list short | grep alsa # Mostra lista periferiche ALSA connesse al PC.
7       module-alsa-card        device_id="0" name="pci-0000_00_01.1" card_name="alsa_card.pci-0000_00_01.1" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
8       module-alsa-card        device_id="1" name="pci-0000_00_14.2" card_name="alsa_card.pci-0000_00_14.2" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
0       alsa_output.pci-0000_00_14.2.analog-stereo      module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
0       alsa_output.pci-0000_00_14.2.analog-stereo.monitor      module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
1       alsa_input.pci-0000_00_14.2.analog-stereo       module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
0       alsa_card.pci-0000_00_01.1      module-alsa-card.c
1       alsa_card.pci-0000_00_14.2      module-alsa-card.c
-:~$ pactl list short sources # Mostra lista periferiche ALSA SOURCES connesse al PC.
0       alsa_output.pci-0000_00_14.2.analog-stereo.monitor      module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
1       alsa_input.pci-0000_00_14.2.analog-stereo       module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
-:~$ pactl list short sources | grep 'output' # Mostra lista periferiche ALSA SOURCES in grado di fornire un OUTPUT connesse al PC.
0       alsa_output.pci-0000_00_14.2.analog-stereo.monitor      module-alsa-card.c      s16le ch 2 44100 Hz     SUSPENDED
-:~$ xdpyinfo | grep dimensions # Mostra la risoluzione dello schermo attualmente in uso.
  dimensions:    1366x768 pixels (361x203 millimeters)
-:~$

Per identificare la risoluzione (in pixels) dello schermo attualmente in uso, e la scheda ALSA che gestisce l’audio interno del PC in uso, aprire un terminale e impartire i comandi:
xdpyinfo | grep dimensions | awk '{print $2;}' # Risoluzione dello schermo.
pactl list short | grep monitor | grep pci | awk '{print $2;}' # Identifica la scheda audio PCI.
Negli esempi seguenti, lo schermo è di 1366×768 pixels, e la scheda ALSA che gestisce l’audio interno del PC in uso è
alsa_output.pci-0000_00_14.2.analog-stereo.monitor

B) Volendo usare FFmpeg per registrare l’audio generato dal computer, aprire un terminale ed impartire il comando
ffmpeg -f alsa -i default aOutCalsa.mp3 # Registra audio microfono integrato.# oppure
ffmpeg -f pulse -i default aOutCpulse.mp3 # Registra audio microfono integrato.
Per terminare la registrazione, digitare il tasto [Q] oppure digitare la combinazione di tasti [Control]+[C] oppure chiudere il terminale.

C) Volendo usare FFmpeg per creare un file multimediale contenente tutto l’audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor], aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando
ffmpeg -f pulse -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor aOutD-pa.mp3 # Registra tutto l'audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)
# Se si vuol lasciare al computer l’onere di determinare i parametri della periferica ALSA, impartire il comando seguente:
ffmpeg -f pulse -i $(pactl list short | grep monitor | grep pci | awk '{print $2;}') aOutD_pa.mp3 # Registra tutto l'audio proveniente da [alsa_output.pci-????_??_??.?.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)
Per terminare la registrazione, digitare il tasto [Q] oppure la combinazione di tasti [Control]+[C] oppure chiudere il terminale.

D) Volendo usare FFmpeg per creare un file multimediale contenente ciò che appare in un ritaglio di 600×600 pixels il cui centro coincide col punto in cui si trova il mouse, aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size 600x600 -i :0.0 vOutB.mkvPer terminare la registrazione, digitare il tasto [Q] oppure digitare la combinazione di tasti [Control]+[C] oppure chiudere il terminale.
Inoltre, volendo altresì aggiungere tutto l’audio proveniente da [alsa_output.pci-????_??_??.?.analog-stereo.monitor] (quindi l’audio che proviene dal microfono è ESCLUSO) e stabilire dall’inizio che la registrazione inizierà 10 secondi dopo che il comando è stato impartito e durerà 2 minuti, aprire un terminale ed impartire il comando
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size 600x600 -i :0.0 -f pulse -i $(pactl list short | grep monitor | grep pci | awk '{print $2;}') -ss 00:00:10.00 -t 00:02:00.00 vOutB600x600.mkv

E) Volendo creare un file multimediale contenente ciò che appare in un ritaglio di 360×640 pixels che dista 1000 pixels dal margine sinistro e 100 pixels dal margine superiore di uno schermo del PC avente risoluzione 1366×768, più tutto l’audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor], aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando

ffmpeg -s 360*640 -f x11grab -i :0.0+1000,100 -f pulse -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor vOUTe-pa.mkv # Registra ciò che compare in un'area di 360*640 pixels dello schermo distante 1000 pixels dal bordo destro e 100 pixels dal bordo superiore dello schermo, + tutto l'audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO) # oppure
ffmpeg -video_size 360*640 -framerate 25 -f x11grab -i :0.0+1000,100 -f pulse -ac 2 -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor vOUTe-p.mkv # Registra ciò che compare in un'area di 360*640 pixels dello schermo distante 1000 pixels dal bordo destro e 100 pixels dal bordo superiore dello schermo, + tutto l'audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)

Per terminare la registrazione, digitare il tasto [Q] oppure la combinazione di tasti [Control]+[C] oppure chiudere il terminale.

F) Volendo creare un file multimediale contenente ciò che appare sullo schermo del PC avente risoluzione 1366×768,
# più tutto l’audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor],
# aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando

ffmpeg -s 1366*768 -f x11grab -i :0.0+0,0 -f pulse -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor vOUTf-pa.mkv # Registra ciò che compare sull'intero schermo di 1366x768 pixels, + tutto l'audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)# oppure
ffmpeg -video_size 1366*768 -framerate 25 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i alsa_output.pci-0000_00_14.2.analog-stereo.monitor vOUTf-p.mkv # Registra ciò che compare sull'intero schermo di 1366x768 pixels, + tutto l'audio proveniente da [alsa_output.pci-0000_00_14.2.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)# Se si vuol lasciare al computer l’onere di determinare la risoluzione corrente dello schermo ed i parametri della periferica ALSA, impartire il comando seguente:
ffmpeg -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -f x11grab -i :0.0+0,0 -f pulse -i $(pactl list short | grep monitor | grep pci | awk '{print $2;}') vOUTc-pa.mkv # Registra ciò che compare sull'intero schermo di ?x? pixels, + tutto l'audio proveniente da [alsa_output.pci-????_??_??.?.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO)

Per terminare la registrazione, digitare il tasto [Q] oppure la combinazione di tasti [Control]+[C] oppure chiudere il terminale.
# Volendo creare un file multimediale contenente ciò che appare sullo schermo del PC lasciando al computer l’onere di determinare la risoluzione dello SCHERMO ed i parametri della periferica audio ALSA, e fissare che il video INIZIA 10 secondi dopo che il comando è stato impartito, abbia DURATA 2 ore +56 minuti +15 secondi, e risoluzione 640×360 pixels, impartire il comando seguente:
ffmpeg -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -f x11grab -i :0.0+0,0 -f pulse -i $(pactl list short | grep monitor | grep pci | awk '{print $2;}') -ss 00:00:10.00 -t 02:56:15.00 -s 640x360 vOUTc-pa.mkv # Ciò che compare sull'intero schermo di ?x? pixels, + tutto l'audio proveniente da [alsa_output.pci-????_??_??.?.analog-stereo.monitor] (quindi l'audio che proviene dal microfono è ESCLUSO) a partire da 10 secondi da quando viene lanciato il comando e per la durata di 2 ore, 56 minuti e 15 secondi, verrà registrato in un file multimediale avente risoluzione 640x360 pixels.


G)
Volendo creare un file multimediale contenente tutto ciò che appare su uno schermo del PC avente risoluzione 1366×768,
# più tutto l’audio percepito dal microfono integrato o collegato al PC,
# aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando

ffmpeg -video_size 1366x768 -framerate 25 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i default vOUTg-a.mkv # Registra audio microfono e video # oppure
ffmpeg -video_size 1366x768 -framerate 25 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i default vOUTg-p.mkv # Registra audio microfono e video

Per terminare la registrazione, digitare il tasto [Q] oppure la combinazione di tasti [Control]+[C] oppure chiudere il terminale.

H) Volendo lasciare a FFmpeg il compito di individuare la risoluzione dello schermo in uso e la periferica di acquisizione audio, aprire un terminale nella cartella in cui si desidera che il file multimediale suddetto sia salvato, ed impartire il comando

ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0+0,0 -f alsa -i default vOUTh-a.mkv # Registra video e audio microfono# oppure
ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0+0,0 -f pulse -i default vOUTh-p.mkv # Registra video e audio microfono

Per terminare la registrazione, digitare il tasto [Q] oppure la combinazione di tasti [Control]+[C] oppure chiudere il terminale.
Volendo creare più d’un video senza audio predeterminando il momento in cui ciascuno di essi inizia e termina, misurando il tempo da quando il comando è stato impartito, aprire un terminale nella cartella in cui si desidera che i video siano salvati, ed impartire il comando:
ffmpeg -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -f x11grab -i :0.0+0,0 -ss 00:00:10.00 -to 00:01:00.00 vOUT1.mkv -ss 00:00:50.00 -to 00:02:00.00 vOUT2.mkv # Registra 2 video di ciò che appare sullo schermo del PC; il primo inizia dopo 10 secondi e termina dopo 1 minuto, il secondo inizia dopo 50 secondi e termina dopo 2 minuti. TUTTI i tempi si misurano da quando il comando è stato avviato.