Jeg prøvde å gjøre litt videoredigering og koding. Jeg har en såkalt SD-video som visstnok skal være i 4:3
størrelsesforhold. Men i stedet for 640x480
, er det 720x480
. Interessant når jeg spiller den med en mediaspiller, det jeg ser er 640x480
– det spilles ikke som 720x480
!
Hva skjer ?! Hvordan kan det være mulig?
Svar
525/60 digitalisert SD-video i følge Rec. 601 er faktisk 720 piksler bredt, 480 piksler høyt, inkludert noe blanking på sidene. Digital ekvivalent på 625/50 er 720×576. I begge tilfeller er rammesideforholdet 4: 3, dette betyr ganske enkelt at pikslene ikke er firkantede. Se https://en.wikipedia.org/wiki/D-1_(Sony)
For å gjøre saken mer kompleks, har bare en delmengde av rammen 4 : 3 proporsjoner. Jeg tror bare 704×480 (for 525/60) og 704×576 (for 625/50) har proporsjoner 4: 3. Se diskusjon her: https://lurkertech.com/lg/video-systems/
Så 480 piksler er 10/11 i proporsjon, 576 piksler er 59/54 i proporsjon. Se også her: https://en.wikipedia.org/wiki/Pixel_aspect_ratio Og ikke glem at både 480-linjers og 576-linjers formater også kan være widescreen (16: 9), men likevel med samme antall piksler per linje! I tillegg er tall som 59/54 ikke enkle å jobbe med. Alt dette førte til at pixel-sideforhold for 576-linjers format er valgt som 12/11 for 4: 3-skjermformat, og som 16/11 for 16: 9.
Firkantede piksler ble normen starter fra VGA-videoadapter tror jeg, og deretter fra HD-spesifikasjoner for 720-linjers og 1080-linjers video. Forresten, det er noen HD-formater som tar opp 1440×1080 eller 960×720, men likevel har 16: 9 rammeforhold, de har også ikke-kvadratiske piksler. Firkantede piksler er relativt nylig utviklet og bør ikke forventes automatisk.
Kommentarer
Svar
Det er to forskjellige ting:
- ekte bredde og høyde på rammer (i piksler) – se den grønne delen av det følgende bildet.
- vist bredde og høyde (under avspilling) – se den blå delen av det samme bildet.
Problemet oppstod i gamle dårlige dager, da oppløsningen til enheter (antall piksler i bildet) var veldig lav, men det nødvendige forholdet mellom bredde og høyde for avspilling var 4: 3.
Løsningen (i disse dager) var oppfinnelsen av ikke-kvadratiske piksler.
For enkelhets skyld skal vi anta (teoretisk) svært lave dimensjoner:
- kreves: 4 x 3 piksler (i. e. 12 piksler) per ramme.
- virkelig mulig (til akseptabel pris): 3 x 3 (dvs. 9 piksler).
Løsningen var ikke kvadratiske piksler med pikselformat ( PAR ) 4: 3 , som her:
Så pikselformatet ( PAR ) er størrelsesforholdet for hver individuelle piksel:
Hver blå piksler i bildet vårt har PAR 4: 3, og hver appelsin og hver grønn har PAR 1: 1.
Nå vises hele vårt (blå) bilde riktig, slik vi ønsket – e. g. som 12 cm x 9 cm – så det er Skjermformat ( DAR ) er 12: 9 , eller 4: 3.
Til tross for det er den lagret som 3 x 3 piksler – så Lagringsformat ( SAR ) er 3 piksler: 3 piksler, eller 1: 1.
Tips:
- pikselformat ( PAR ) er mikrometer: mikrometer
- skjermformat ( DAR ) er centimeter: centimeter
- lagringsformat ( SAR ) er piksler: piksler
Følgelig er forholdet mellom disse 3 verdiene er
DAR = SAR × PAR
Den viktige merknaden:
Noen ganger er PAR (Pixel Aspect Ratio) kalt Sample Aspect Ratio – som i FFmpeg . Ufornøyt er forkortelsen for den da SAR , noe som er veldig forvirrende, fordi – som vi så – det også er forkortelse for Storage Aspect ratio.
Hovedproblemet:
I dag har alle enheter pikselformat 1: 1 (kvadratpiksler), og mange mediaspillere, hovedsakelig for små enheter (mobiltelefoner, nettbrett), stoler på det og ignorerer fullstendig DAR -verdien som er lagret i videostrømmer.
Så du kan støte på situasjonen når den samme videoen (laget fra alle kilder) blir avspilt riktig på din stasjonære eller bærbare datamaskin, men feil (innsnevret) på smarttelefonen din. Eller til og med på annen mediespiller på samme datamaskin eller enhet.
I vårt eksempel kan rammene vises feil som en firkant (se den grønne delen av bildet ovenfor).
Løsningen på dette problemet i FFmpeg:
- endre størrelsen på den problematiske videoen, og deretter
- s et SAR til 1, og
- DAR har veldig sannsynlig den riktige verdien, men du kan sette den for å være sikker.
I vårt (uvirkelige) eksempel du kan bruke filtergrafen
-vf scale=4:3,setsar=1,setdar=w/h
der w
er med (bare skalerte) rammer i piksler, h
er høyden deres. FFmpeg erstatter passende verdier automatisk.
Resultatet blir den oransje delen av bildet ovenfor.
I ditt tilfelle har videoen din (fra din info)
- DAR 4: 3 (640: 480),
- SAR (Lagringsformat) 720: 480 = 3: 2, og – følgelig –
- PAR = DAR / SAR = 8: 9. (I FFmpeg-terminologien er det SAR – Sample Aspect Ratio).
Så for å unngå problemer med mediaspillere som ignorerer DAR -verdien (og spiller den av i andelen 720: 480, kan du vurdere å konverter den med kommandoen
ffmpeg -i your_input_file -vf -scale=640:480,setsar=1 -c:a copy your_output_file
Problemer med bilder med ikke-firkantede piksler:
Med bilder er situasjonen enda verre:
Nesten alle bildevisere / redaktører og nettlesere ignorerer ganske enkelt bilder SAR og DAR , antar at alle bilder over hele verden har SAR 1: 1.
Det hederlige unntaket er (interessant og overraskende nok) Microsoft Windows Photo Viewer, som viser alle bildene korrekte ctly.
Du kan bli overbevist om det e. g. av Pixel Aspect Ratio Acid Test – alle de 9 bildene der skal vises riktig i nettleseren din, men – høyst sannsynlig – de er ikke t.
Kommentarer
- godt beskrevet. Takk! Begge er riktige. Når antallet oppturer blir høyere, vil det oppdatere det beste svaret.
FFmpeg
for noen eksperimenter (for å se om de to har samme scenekuttlengder). Så siden avspillingen er den samme, skal jeg anta fraffmpeg
, 640×480 og 720×480 er identiske ?!