Jeg prøvede at lave nogle videoredigering og kodning. Jeg har en såkaldt SD-video, der angiveligt skulle være i 4:3
billedformat. Men i stedet for 640x480
er det 720x480
. Interessant nok er det, når jeg spiller det med en medieafspiller, 640x480
– det afspilles ikke som 720x480
!
Hvad sker der ?! Hvordan kunne det være muligt?
Svar
525/60 digitaliseret SD-video ifølge Rec. 601 er faktisk 720 pixels bredt, 480 pixels højt, inklusive noget blænding på siderne. Digital ækvivalent på 625/50 er 720×576. I begge tilfælde er billedformatet 4: 3, det betyder simpelthen, at pixels ikke er firkantede. Se https://en.wikipedia.org/wiki/D-1_(Sony)
For at gøre forholdene mere komplekse har kun en delmængde af rammen 4 : 3 proportioner. Jeg tror, kun 704×480 (til 525/60) og 704×576 (til 625/50) har 4: 3-forhold. Se diskussion her: https://lurkertech.com/lg/video-systems/
Så 480 pixels er 10/11 i forhold, 576 pixels er 59/54 i forhold. Se også her: https://en.wikipedia.org/wiki/Pixel_aspect_ratio Og glem ikke, at både 480-line og 576-line formater også kan være widescreen (16: 9) og alligevel har det samme antal pixels pr. linje! Plus, numre som 59/54 er ikke lette at arbejde med. Alt dette medførte, at pixelformatforhold i 576-linjers format er valgt som 12/11 til 4: 3 skærmformat og som 16/11 for 16: 9.
Firkantede pixels blev norm startende fra VGA-videoadapter tror jeg, og derefter fra HD-specifikationer til 720-line og 1080-line video. Forresten er der nogle HD-formater, der optager 1440×1080 eller 960×720, men alligevel har 16: 9 billedformat, de har også ikke-firkantede pixels. Firkantede pixels er relativt nyere og bør ikke forventes automatisk.
Kommentarer
Svar
Der er 2 forskellige ting:
- Den reelle bredde og højde på rammer (i pixels) – se den grønne del af det følgende billede.
- Den viste bredde og højde (under afspilning) – se den blå del af det samme billede.
Problemet opstod i gamle dårlige dage, hvor enhedernes opløsning (antal pixels i billedet) var meget lav, men det krævede forhold mellem bredde og højde til afspilning var 4: 3.
Løsningen (i disse dage) var opfindelsen af ikke-kvadratiske pixels.
Af hensyn til enkelheden antager vi (teoretisk) meget lave dimensioner:
- kræves: 4 x 3 pixels (i. e. 12 pixels) pr. Ramme.
- reel mulig (til den acceptable pris): 3 x 3 (dvs. 9 pixels).
Løsningen var ikke kvadratiske pixels med pixel-formatforholdet ( PAR ) 4: 3 , som her:
Så pixelformat ( PAR ) er størrelsesforholdet for hver individuel pixel:
Hver blå pixels i vores billede har PAR 4: 3, og hver appelsin og hver grøn har PAR 1: 1.
Nu vises hele vores (blå) billede korrekt, som vi ønskede – e. g. som 12 cm x 9 cm – så dens Skærmformat ( DAR ) er 12: 9 eller 4: 3.
På trods af det er det gemt som 3 x 3 pixels – så Storage Aspect Ratio ( SAR ) er 3 pixels: 3 pixels, eller 1: 1.
Tip:
- billedformat ( PAR ) er mikrometer: mikrometer
- skærmformat ( DAR ) er centimeter: centimeter
- lagringsformat ( SAR ) er pixels: pixels
Derfor er forholdet mellem disse 3 værdier er
DAR = SAR × PAR
Den vigtige note:
Nogle gange er PAR (Pixel-billedformat) kaldet Sample Aspect Ratio – som i FFmpeg . Ufornødt er forkortelsen for det så SAR , hvilket er meget forvirrende, fordi – som vi så – det også er forkortelse for Storage Aspect ratio.
Hovedproblemet:
I dag har alle enheder pixelformat 1: 1 (kvadratpixel), og mange medieafspillere, hovedsageligt til små enheder (mobiltelefoner, tablets), stoler på det og ignorerer fuldt ud DAR værdi gemt i videostreams.
Så du kan støde på den situation, hvor den samme video (lavet fra alle kilder) afspilles korrekt på din stationære eller bærbare computer, men forkert (indsnævres) på din smartphone. Eller endda på anden medieafspiller på samme computer eller enhed.
I vores eksempel kan rammerne vises forkert som en firkant (se den grønne del af billedet ovenfor).
Løsningen på dette problem i FFmpeg:
- ændre størrelsen på den problematiske video, derefter
- s et SAR til 1, og
- DAR har meget sandsynligt den korrekte værdi, men du kan indstille den til at være sikker.
I vores (uvirkelige) eksempel er du kan bruge filtergrafen
-vf scale=4:3,setsar=1,setdar=w/h
hvor w
er den med af (lige skalerede) rammer i pixels, h
er deres højde. FFmpeg erstatter automatisk de relevante værdier.
Resultatet bliver den orange del af ovenstående billede.
I dit tilfælde har din video (fra din info)
- DAR 4: 3 (640: 480),
- SAR (Storage Aspect Ratio) 720: 480 = 3: 2, og – følgelig –
- PAR = DAR / SAR = 8: 9. (I FFmpeg-terminologien er det SAR – Eksempelformat).
Så for at undgå problemer med medieafspillere, der ignorerer værdien DAR (og afspiller den i forholdet 720: 480, kan du overveje at konverter det med kommandoen
ffmpeg -i your_input_file -vf -scale=640:480,setsar=1 -c:a copy your_output_file
Problemer med billeder med ikke-firkantede pixels:
Med billeder er situationen endnu værre:
Næsten alle billedfremvisere / redaktører og internetbrowsere ignorerer simpelthen billeder SAR og DAR , forudsat at alle billeder over hele verden har SAR 1: 1.
Den hæderlige undtagelse er (interessant og overraskende nok) Microsoft Windows Photo Viewer, som viser alle billeder korrekte ctly.
Du kan blive overbevist om det e. g. af Pixel Aspect Ratio Acid Test – alle 9 billeder der skal vises korrekt i din browser, men – højst sandsynligt – de er ikke t.
Kommentarer
- godt beskrevet. Tak! Begge er korrekte. Når antallet af ups bliver højere, opdateres det bedste svar.
FFmpeg
i nogle eksperimenter (for at se om de to har samme scene-cut længder). Så da afspilningen er den samme, skal jeg antage, at fraffmpeg
, 640×480 og 720×480 er identiske ?!