Proporzioni corrette senza ricodifica del file video


18

Ho un flusso video con le seguenti proprietà:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

Quando lo eseguo in VLC, devo premere "A" per modificare le proporzioni in "4: 3" per mostrare il video con le proporzioni corrette.

Guardando i fatti del video, l'errore è che a) il video reale è stato erroneamente allungato nei dati pixel, oppure b) c'è semplicemente un valore di metadati che è stato impostato in modo errato?

Se il primo, so di poter ricodificare il video e modificare la larghezza e l'altezza. Ma se quest'ultimo, quale comando ffmpeg devo eseguire per correggere i metadati senza ricodificare il video stesso?

Risposte:


36

C'è una differenza tra il rapporto di aspetto del campione (SAR) e il rapporto di aspetto del display (DAR). Se si desidera modificare il video per visualizzarlo a 4: 3, sarà necessario modificare i pixel effettivi nell'immagine (ridimensionando i pixel e modificando il SAR), oppure impostando un flag di metadati che a livello di contenitore che dice esterno lettori multimediali per allungare l'immagine al DAR desiderato.

Non sarai in grado di ridimensionare i pixel e cambiare SAR senza applicare un filtro video. Se si sceglie questo metodo, verrà richiesto di transcodificare il file, poiché non è possibile "copiare in streaming" il flusso video durante l'applicazione di un filtro video.

Per ridimensionare l'immagine e cambiare SAR (durante la transcodifica), prova:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

D'altra parte, se vuoi solo cambiare il flag dei metadati e regolare il DAR, sarai in grado di riprodurre in streaming il video. Per fare questo, prova:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

Eccellente! La modifica dell'aspetto ha funzionato subito!
apertura il

1
Non è possibile utilizzare -c copye ridimensionare contemporaneamente; tuttavia è possibile utilizzare -aspectper modificare le proporzioni a livello di contenitore (ma non a livello di flusso).
Llogan,

@LordNeckbeard, using -aspectfunziona per la riproduzione in ffplay, ma non in WMP o MPC-HC. Aggiunge un ulteriore elemento SAR / DAR alla Stream #…riga delle informazioni in FFmpeg/probe/playma non sembra essere una soluzione per la riproduzione generale. Allungare il video con la finestra sembra la soluzione più semplice per la riproduzione di MPC-HC.
Lumi,

non ha funzionato per me per MPEG2 senza ricodifica
Mikhail V

Non so perché non abbia funzionato per me. Emette solo lo stesso video!
Tina J,

4

La risposta di Delgado è corretta che MP4Box può farlo, ma l' -paropzione non funziona esattamente come descritto. Con un -outparametro (per non disturbare il file originale):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

Quando si utilizza -par stream-number=width:height, si definiscono le proporzioni pixel, ovvero il risultato della divisione delle proporzioni del dispositivo per le proporzioni di archiviazione. (Equivalentemente, stai descrivendo le proporzioni di un pixel sorgente.) Ad esempio, supponi di avere una sorgente DVD di 720 × 480 e le proporzioni di visualizzazione corrette siano 4: 3. Per questo caso, è necessario:

mp4box source.mp4 -out target.mp4 -par 1=8:9

perché (4/3) / (720/480) = 8/9.

Se la sorgente rappresenta pixel SD NTSC reali (nel qual caso solo i 704 × 480 pixel centrali devono essere mappati su uno schermo 4 × 3, con 8 pixel di overscan su entrambi i lati), il comando corretto sarebbe:

mp4box source.mp4 -out target.mp4 -par 1=10:11

perché (4/3) / (704/480) = 10/11 - esattamente le proporzioni pixel di riferimento per i video NTSC a definizione standard.

Per il caso indicato nella domanda, se è davvero 4: 3, ciò dà un rapporto di aspetto del pixel molto strano: (4/3) / (720/416) = 104/135. È largo 720, il che suggerisce una sorgente DVD; è un video a 25 fps, che suggerisce PAL, ma il PAR funziona a meno di 1, suggerendo NTSC. Potrebbe essere 4: 5, suppongo (molto vicino a 104: 135), ma non conosco nulla che produca le proporzioni dei pixel; magari provalo prima, quindi prova 3: 4 se sembra ancora un po 'troppo allungato in senso orizzontale. Se sei certo che sia esattamente 4: 3, ovviamente, usa 104: 135.


3

ffmpeg non può modificare i parametri di un flusso video senza ricodifica, MP4Box (parte di gpac ) e mkvmerge can. Nel caso di un flusso video e un rapporto di aspetto reale / corretto di 4: 3, potresti provare:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

Per verificare prima e dopo: ffmpeg -i VideoFile.mp4


0

Modifica del SAR senza ricodificarli anche opere con ffmpegil .mp4utilizzando il h264_metadatacome Gyan rilevare qui :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
MMM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.