Trasformazione di un video in formato 16/9 verticale in un video in formato 16/9 orizzontale

Dom, 28/10/2018 - 13:31
Ritratto di Sargon6

Trasformazione di un video in formato 16/9 verticale in un video in formato 16/9 orizzontale

Inviato da Sargon6 0 commenti

Trasformazione di un video in formato 16/9 verticale in un video in formato 16/9 orizzontale tramite l'aggiunta di barre laterali.

$ mediainfo video01.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video01.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
$ 

Analizzando l'output del comando suddetto, vediamo che il file video video01.mp4 è largo 1280 pixels, è alto 720 pixels, ed ha un rapporto X/Y pari a 16/9, un formato molto comune fra cellulari e smartphone recenti.
Se è stato ottenuto tramite uno smartphone tenuto orizzontalmente, possiamo visualizzarlo senza problemi non solo tramite il video player del computer, ma anche tramite un televisore, oppure tramite un cellulare, purché dotati di schermo 16/9.
Un file video ripreso tramite uno smartphone tenuto verticale appare riprodotto verticalmente o orizzontalmente a seconda dello strumento che si utilizza per riprodurlo; perché ciò avviene, esula dallo scopo di questa guida, quindi mi limito a dire che ruotando il file video prima in senso antiorario e poi in senso orario, il file video diventa orizzontale a prescindere dallo strumento utilizzato per visualizzarlo.

ffmpeg -i video01.mp4 -vcodec libx264 -filter:v fps=30 -b:v 12M -bufsize 12M -vf transpose=2 -acodec copy video02.mp4 # crea il file video02.mp4 col medesimo contenuto del file video01.mp4 utilizzando codec ed altri parametri impostati dall'utente ruotato di 90 gradi in senso antiorario
 
ffmpeg -i video02.mp4 -vcodec libx264 -filter:v fps=30 -b:v 12M -bufsize 12M -vf transpose=1 -acodec copy video03.mp4 # crea il file video02.mp4 col medesimo contenuto del file video01.mp4 utilizzando codec ed altri parametri impostati dall'utente ruotato di 90 gradi in senso orario

ATTENZIONE!! Io, come parametri imposti dall'utente, ho utilizzato quelli che, in questo caso, più si avvicinavano a quelli del MIO file video di partenza, quindi, partendo da un file video con caratteristiche diverse, oppure volendo ottenere un file video con caratteristiche diverse, occorre fornire parametri diversi.

$ mediainfo video02.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video02.mp4
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
$ mediainfo video03.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video03.mp4
Width                                    : 720 pixels
Height                                   : 1 280 pixels
Display aspect ratio                     : 0.562
$ 

Abbiamo così ottenuto il file video03.mp4 correttamente orientato (16/9 verticale, ovvero 9/16, vale a dire 0.562) a prescindere dallo strumento utilizzato per visualizzarlo, ma, se tentiamo di visualizzarlo con un televisore in formato 16/9, non verrà visualizzato correttamente, in quanto il software dei televisori digitali impone la visualizzazione espandendo l'immagine a dimensioni dello schermo, dilatandone la larghezza.
Per poter visualizzare correttamente l'immagine al centro di uno schermo in formato 16/9, e volendo conservare la risoluzione in altezza pari a 1280 pixels, occorre inserire il video al centro di un riquadro alto 1280 pixels e largo (1280/9x16)=2275 pixels in modo che inizi (2275-720)/2= 777 pixels più a destra rispetto lo spigolo superiore sinistro del video. FFmpeg permette di raggiungere questo risultato impartendo l'istruzione seguente:

ffmpeg -i video03.mp4 -vf pad=width=2275:height=1280:x=777:y=0:color=red video04.mp4 # inserire il video al centro di un riquadro alto 1280 pixels e largo (1280/9x16)=2275 pixels in modo che inizi (2275-720)/2= 777 pixels più a destra rispetto lo spigolo superiore sinistro del video.
oppure
ffmpeg -i video03.mp4 -vcodec libx264 -filter:v fps=30 -b:v 12M -bufsize 12M -vf pad=width=2275:height=1280:x=777:y=0:color=red -acodec copy video05.mp4 # inserire il video al centro di un riquadro alto 1280 pixels e largo (1280/9x16)=2275 pixels in modo che inizi (2275-720)/2= 777 pixels più a destra rispetto lo spigolo superiore sinistro del video utilizzando le impostazioni decise dall'utente.

$ mediainfo video04.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video04.mp4
Width                                    : 2 274 pixels
Height                                   : 1 280 pixels
Display aspect ratio                     : 16:9
$ mediainfo video05.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video05.mp4
Width                                    : 2 274 pixels
Height                                   : 1 280 pixels
Display aspect ratio                     : 16:9
$ 

Ora il video ottenuto ha l'aspetto che volevamo avesse (16/9 orizzontale), ma forse la risoluzione è troppo alta per essere riprodotta su un comune televisore, e sicuramente è troppo alta per essere riprodotta dal MIO televisore che supporta al massimo una risoluzione di 1366 pixels in larghezza per 768 pixels in altezza.
Ovviamente, per risolvere il problema, è sufficiente ridurre la risoluzione del file video così ottenuto, cosa che FFmpeg permette di fare utilizzando il comando

ffmpeg -i video05.mp4 -s 1366x768 video06.mp4 # Modifica la risoluzione di un file multimediale portandola a [-s 1366x768].
oppure
ffmpeg -i video05.mp4 -vcodec libx264 -filter:v fps=30 -b:v 12M -bufsize 12M -s 1366x768 -acodec copy video07.mp4 # Modifica la risoluzione di un file multimediale portandola a [-s 1366x768] utilizzando le impostazioni decise dall'utente.

$ mediainfo video06.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video06.mp4
Width                                    : 1 366 pixels
Height                                   : 768 pixels
Display aspect ratio                     : 16:9
$ mediainfo video07.mp4 | egrep -iA2 Width # Mostra larghezza, altezza, e rapporto di un file video chiamato video07.mp4
Width                                    : 1 366 pixels
Height                                   : 768 pixels
Display aspect ratio                     : 16:9
$ 

I files video così ottenuti sono facilmente visualizzabili senza alcuna distorsione su un qualsiasi televisore digitale 16/9 con risoluzione massima 1366x768 pixels.