Correcting aspect ratio of a mp4 file

Ho una Ezcap 280  che vorrei usare per catturare l'output dell'uscita HDMI del PC in una produzione video dal vivo; il solo difetto è che ha un ritardo di 5 secondi nell'avvio dellaa registrazione.

Originariamente pensavo di catturare video HD (720p), ma non tutte le telecamere a disposizione lo supportano (alcune possono uscire solo in 576p o 1080i, quest'ultima non è sostenibile), così ripiegato sul video SD (576p).

La risoluzione HDMI per il video PAL SD è 720x576@50, e l'Aspect Ratio è modificato cambiando le proporzioni dei pixel, come nella tv analogica. Di conseguenza l'Ezcap cattura il video a questa risoluzione, ignorando l'Aspect Ratio, mentre di solito la risoluzione dei video PAL SD è di 1024x576.

Affinché il video possa essere visualizzato correttamente su PC, TV e apparati multimediali è necessario cambiare l'Aspect Ratio nei metadati del file MP4. Ho trovato MP4Box, un programma multi piattaforma che effettua molte manipolazioni sui file multimediali. Può anche cambiare l'Aspect Ratio dei files generati dall'Ezcap, ma sono necessari alcuni calcoli per trovare l'esatta frazione da usare. Non avendo tempo per imparare come effettuare questri calcoli, ho trovato questo calcolatore on-line che può farlo al posto nostro. Nel mio caso il frazione corretta è 64:45.

Una volta trovata la frazione corretta, è necessario trovare l'identificativo dello stream video del file MP4 (TracKID, in grassetto):

$ MP4Box -info file.mp4
* Movie Info *
    Timescale 1000 - Duration 00:00:06.300
    1 track(s)
    Fragmented File: no
    File suitable for progressive download (moov before mdat)
    File Brand isom - version 512
    Created: UNKNOWN DATE   Modified: UNKNOWN DATE
File has no MPEG4 IOD/OD

Track # 1 Info - TrackID 2 - TimeScale 50 - Media Duration 00:00:06.300
Media Info: Language "Undetermined" - Type "vide:avc1" - 316 samples
Visual Track layout: x=0 y=0 width=720 height=576
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 720 x 576
    AVC Info: 1 SPS - 1 PPS - Profile Baseline @ Level 3
    NAL Unit length bits: 32
    Pixel Aspect Ratio 1:1 - Indicated track size 720 x 576
Self-synchronized

Una volta ottenuti entrambi i dati (TrackID e frazione dell'Aspect Ratio) possono essere cambiati nel file con questo comando:

$ MP4Box -par '2=64:45' file.mp4

La sintassi del parametro par è TrackID=Num:Den.

Et voilà, il file orà viene visualizzato correttamente in 16:9 su tutti i miei device:

$ MP4Box -info file.mp4
* Movie Info *
    Timescale 1000 - Duration 00:00:06.300
    1 track(s)
    Fragmented File: no
    File suitable for progressive download (moov before mdat)
    File Brand isom - version 512
    Created: UNKNOWN DATE    Modified: UNKNOWN DATE
File has no MPEG4 IOD/OD

Track # 1 Info - TrackID 2 - TimeScale 50 - Media Duration 00:00:06.300
Media Info: Language "Undetermined" - Type "vide:avc1" - 316 samples
Visual Track layout: x=0 y=0 width=1024 height=576
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 720 x 576
    AVC Info: 1 SPS - 1 PPS - Profile Baseline @ Level 3
    NAL Unit length bits: 32
    Pixel Aspect Ratio 64:45 - Indicated track size 1024 x 576
Self-synchronized