lunedì 6 febbraio 2012

Ffmpeg - da avi a mpg per dvd

Provando a convertire un file .avi in .mpg per dvd, e dovendo cambiare le impostazioni delle dimensioni video mi sono imbattuto in un problema per l'aggiunta delle bande nere sopra e sotto al video, perchè questo era in 16:9 e a me serviva in 4:3.

Il problema maggiore è però nato con le nuove impostazioni per ffmpeg, che non gestisce più i tag:

-padtop size
-padbottom size
-padleft size
-padright size
-padcolor hex_color

che sono stati sostituiti da (come si legge in man ffmpeg):

All the pad options have been removed. 
Use -vf pad=width:height:x:y:color instead.

Dopo vari tentativi sono giunto a questo:
--------------------------------------------------------------------------------------------------------------------------------------
ffmpeg -i video_in.avi -y -target pal-dvd -sameq -aspect 4:3  -s 720x292 -vf pad=720:576:0:142 video_out.mpg
-------------------------------------------------------------------------------------------------------------------------------------

Il file originale aveva come risoluzione 672x272, e dividendo i due vallori si ottiene ~2,47 (quindi non era in 16:9, cioè 1,77777 e nemmeno in 4:3, cioè 1,33333).
A questo punto ho dovuto fare 2 cose:
1 - cambiare il valore della risoluzione originale in 720x292, perchè il tag -target pal-dvd lo imposta di default a 720x576 (come i normali dvd), questo si ottiene facendo 720:2,47=291,4979 (approssimato = 292)
2 -impostare le famigerate bande nere facendo (576-292)/2=142 ed inserendo i valori ottenuti nel tag -vf pad=720:576:0:142, dove 720 è la larghezza del video finale, 576 l'altezza, 0 i pixel utilizzati sulle x per le bande nere verticali (a me non servivano), e la y quelli orizzontali. I valori di x e y si devono dividere per 2 altrimenti il video viene spostato tutto da una parte o tutto in alto!

In sintesi:

Ottenuti i valori di risoluzione del video (basta lanciare il video da linea di comando con mplayer), bisogna dividerli per capire se si ha a che fare con un video in 16:9, 4:3 o altro;
Se ci troviamo su altro dividere 720 per il valore ottenuto in modo da avere la risoluzione verticale del video e applicare con -s quello che abbiamo ottenuto
(nel mio caso 720x292);
Ora non ci resta che applicare le bande nere, otteniamo il valore delle bande nere sotraendo il valore verticale del formato dvd con quello da noi ottenuto (per me 576-292=284), e dividendolo per due (284/2=142) in modo da avere il video al centro delle due bande.

Potete comunque trovare un'ottima spiegazione qui.

Buon divertimento e alla prossima!

Nessun commento: