Suddividere un video VERTICALE in 4 riquadri

Gio, 01/11/2018 - 23:53
Ritratto di Sargon6

Suddividere un video VERTICALE in 4 riquadri

Inviato da Sargon6 0 commenti

Suddividere un video VERTICALE in 4 riquadri
Per prima cosa dobbiamo capire se il video è 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 -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato videoIN.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Rotation                                 : 90°
$ 

In questo caso, si tratta di un video girato in formato 16/9 tramite uno smartphone ruotato di 90 gradi (quindi verticale)

Ora estraiamo 4 spezzoni della medesima 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:40 -vcodec copy -acodec copy video02.mp4 -ss 00:00:40 -to 00:01:00 -vcodec copy -acodec copy video03.mp4 -ss 00:01:00 -to 00:01:20 -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 40esimo secondo, uno che contiene dal 40esimo al 60esimo secondo, ed uno che contiene dal 60esimo all' 80esimo secondo

e ne verifichiamo le caratteristiche
$ mediainfo video01.mp4 | egrep -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video01.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Rotation                                 : 90°
$ mediainfo video02.mp4 | egrep -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video02.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Rotation                                 : 90°
$ mediainfo video03.mp4 | egrep -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video03.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Rotation                                 : 90°
$ mediainfo video04.mp4 | egrep -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato video04.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Rotation                                 : 90°
$ 

I 4 video mostrano le medesime caratteristiche del video da cui sono stati ottenuti. In questo caso specifico, si tratta di video in formato 16/9 ruotato di 90 gradi (quindi verticale), di conseguenza, per unirli in un video di 4 riquadri avente la medesima risoluzione e rotazione del video iniziale, possiamo usare l'istruzione

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 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=360x640 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=360x640 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=360x640 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=360 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=640 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=360:y=640" -vcodec libx264 v4riqVert.mp4
N.B.: l'audio utilizzato sarà quello del video video01.mp4

$ mediainfo v4riqVert.mp4 | egrep -iA3 Width # Mostra larghezza, altezza, rapporto e, se presente, ROTAZIONE di un file video chiamato v4riqVert.mp4
Width                                    : 720 pixels
Height                                   : 1 280 pixels
Display aspect ratio                     : 0.562
Frame rate mode                          : Constant
$ 

Notare che ora il comando mediainfo non dice più che si tratta di un video in formato 16/9 ruotato di 90 gradi, ma dice che si tratta di un formato 0.562 = 9/16, che è esattamente la stessa cosa ma detta in modo diverso.
Se il video di partenza avesse avuto rotazione = 0 (quindi orizzontale), avremmo dovuto usare il comando
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 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=640x360 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=640x360 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=640x360 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=640 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=360 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=640:y=360" -vcodec libx264 v4riqOriz.mp4