Comporre un video ORIZZONTALE di 4 riquadri

Sab, 03/11/2018 - 18:33
Ritratto di Sargon6

Comporre un video ORIZZONTALE di 4 riquadri

Inviato da Sargon6 0 commenti

Comporre un video ORIZZONTALE di 4 riquadri
Per prima cosa dobbiamo capire se il video di partenza è stato girato tenendo lo smartphone orizzontale o verticale; per fare ciò, apriamo un terminale nella cartella in cui si trova il video ed impartiamo il comando

mediainfo videoIN.mp4 | egrep -A3 'name|File|Width' # Mostra larghezza, altezza, rapporto, ROTAZIONE (se presente) ed altri parametri del file video chiamato videoIN.mp4
Complete name                            : videoIN.mp4
Format                                   : MPEG-4
Format profile                           : Base Media / Version 2
Codec ID                                 : mp42 (isom/mp42)
File size                                : 212 MiB
Duration                                 : 2 min 24 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 12.3 Mb/s
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
$

In questo caso, si tratta di un video girato in formato 16/9 tramite uno smartphone tenuto orizzontale

Ora estraiamo 4 spezzoni di diversa lunghezza e (in questo caso) del medesimo video

ffmpeg -i videoIN.mp4 -to 00:00:20 -vcodec copy -acodec copy video01.mp4 -ss 00:00:20 -to 00:00:36 -vcodec copy -acodec copy video02.mp4 -ss 00:00:40 -to 00:00:53 -vcodec copy -acodec copy video03.mp4 -ss 00:01:00 -to 00:01:10 -vcodec copy -acodec copy video04.mp4 # Estrae da videoIN.mp4 4 video: uno che contiene i primi 20 secondi, uno che contiene dal 20esimo al 36esimo secondo, uno che contiene dal 40esimo al 530esimo secondo, ed uno che contiene dal 60esimo al 70esimo secondo

e ne verifichiamo le caratteristiche
mediainfo video01.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video01.mp4
Complete name                            : video01.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 29.2 MiB
Duration                                 : 20 s 11 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 12.3 Mb/s
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
mediainfo video02.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video02.mp4
Complete name                            : video02.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 22.3 MiB
Duration                                 : 16 s 0 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 11.7 Mb/s
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
mediainfo video03.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video03.mp4
Complete name                            : video03.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 18.1 MiB
Duration                                 : 13 s 14 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 11.6 Mb/s
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
mediainfo video04.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video04.mp4
Complete name                            : video04.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 13.8 MiB
Duration                                 : 10 s 6 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 11.6 Mb/s
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
$ 

I 4 video mostrano le medesime dimensioni del video da cui sono stati ottenuti. In questo caso specifico, si tratta di video in formato 16/9 smartphone tenuto orizzontale, di 4 durate diverse. Per unirli in un video di 4 riquadri avente la medesima risoluzione e rotazione del video iniziale, e l'audio di video01.mp4, possiamo usare l'istruzione
ffmpeg -i video01.mp4 -i video02.mp4 -i video03.mp4 -i video04.mp4 -filter_complex "nullsrc=size=1280x720 [base]; [0:v] setpts=PTS-STARTPTS, scale=640x360 [altosin]; [1:v] setpts=PTS-STARTPTS, scale=640x360 [altodes]; [2:v] setpts=PTS-STARTPTS, scale=640x360 [basssin]; [3:v] setpts=PTS-STARTPTS, scale=640x360 [bassdes]; [base][altosin] overlay=shortest=1 [tmp1]; [tmp1][altodes] overlay=shortest=0:x=640 [tmp2]; [tmp2][basssin] overlay=shortest=0:y=360 [tmp3]; [tmp3][bassdes] overlay=shortest=0:x=640:y=360" -vcodec libx264 v4riqOriz0.mp4

In questo caso, il file multimediale ottenuto avrà la durata del più lungo dei video in ingresso, mentre i singoli riquadri avranno la durata del video corrispondente. Tutti i video più corti mostreranno l'ultimo fotogramma fino alla fine del file multimediale ottenuto.
mediainfo v4riqOriz0.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato v4riqOriz0.mp4
Complete name                            : v4riqOriz0.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 6.53 MiB
Duration                                 : 20 s 32 ms
Overall bit rate                         : 2 735 kb/s
Writing application                      : Lavf58.12.100
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
$ 

oppure possiamo usare l'istruzione

ffmpeg -i video01.mp4 -i video02.mp4 -i video03.mp4 -i video04.mp4 -filter_complex "nullsrc=size=1280x720 [base]; [0:v] setpts=PTS-STARTPTS, scale=640x360 [altosin]; [1:v] setpts=PTS-STARTPTS, scale=640x360 [altodes]; [2:v] setpts=PTS-STARTPTS, scale=640x360 [basssin]; [3:v] setpts=PTS-STARTPTS, scale=640x360 [bassdes]; [base][altosin] overlay=shortest=1 [tmp1]; [tmp1][altodes] overlay=shortest=1:x=640 [tmp2]; [tmp2][basssin] overlay=shortest=1:y=360 [tmp3]; [tmp3][bassdes] overlay=shortest=1:x=640:y=360" -vcodec libx264 v4riqOriz1.mp4

In questo caso, il file multimediale ottenuto avrà la durata dell'audio del primo dei video in ingresso, mentre tutte le immagini avranno la durata del più breve fra i video in ingresso. Tutti i video più corti dell'audio mostreranno l'ultimo fotogramma fino alla fine del file multimediale ottenuto.

mediainfo v4riqOriz1.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato v4riqOriz1.mp4
Complete name                            : v4riqOriz1.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 4.40 MiB
Duration                                 : 20 s 32 ms
Overall bit rate                         : 1 843 kb/s
Writing application                      : Lavf58.12.100
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
$ 

Se il video di partenza avesse avuto rotazione = 90 gradi (quindi verticale), avremmo dovuto usare il comando

ffmpeg -i video01.mp4 -i video02.mp4 -i video03.mp4 -i video04.mp4 -filter_complex "nullsrc=size=720x1280 [base]; [0:v] setpts=PTS-STARTPTS, scale=360x640 [altosin]; [1:v] setpts=PTS-STARTPTS, scale=360x640 [altodes]; [2:v] setpts=PTS-STARTPTS, scale=360x640 [basssin]; [3:v] setpts=PTS-STARTPTS, scale=360x640 [bassdes]; [base][altosin] overlay=shortest=1 [tmp1]; [tmp1][altodes] overlay=shortest=1:x=360 [tmp2]; [tmp2][basssin] overlay=shortest=1:y=640 [tmp3]; [tmp3][bassdes] overlay=shortest=1:x=360:y=640" -vcodec libx264 v4riqVert.mp4

Quello che segue è un esempio di video di mosaico ottenuto sovrapponendo riquadri di diverse dimensioni e durate.
ffmpeg -i video01.mp4 -i video02.mp4 -i video03.mp4 -i video04.mp4 -filter_complex "nullsrc=size=1280x720 [base]; [0:v] setpts=PTS-STARTPTS, scale=1280x720 [altosin]; [1:v] setpts=PTS-STARTPTS, scale=640x360 [altodes]; [2:v] setpts=PTS-STARTPTS, scale=320x180 [centdes]; [3:v] setpts=PTS-STARTPTS, scale=210x120 [bassdes]; [base][altosin] overlay=shortest=1 [tmp1]; [tmp1][altodes] overlay=shortest=0:x=640 [tmp2]; [tmp2][centdes] overlay=shortest=0:x=800:y=450 [tmp3]; [tmp3][bassdes] overlay=shortest=0:x=640:y=560" -vcodec libx264 v4riqOrizMosaico0.mp4

mediainfo v4riqOrizMosaico0.mp4 | egrep -A3 'name|File|Width'  # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato v4riqOrizMosaico0.mp4
Complete name                            : v4riqOrizMosaico0.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 7.67 MiB
Duration                                 : 20 s 32 ms
Overall bit rate                         : 3 214 kb/s
Writing application                      : Lavf58.12.100
--
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
$