Próbowałem przeprowadzić edycję i kodowanie wideo. Mam tak zwany film SD, który powinien mieć proporcje 4:3
. Ale zamiast 640x480
jest to 720x480
. Co ciekawe, gdy odtwarzam go w odtwarzaczu multimedialnym, widzę 640x480
– nie jest odtwarzany jako 720x480
!
Co się dzieje ?! Jak to możliwe?
Odpowiedź
525/60 zdigitalizowane wideo SD zgodnie z Rec. 601 ma rzeczywiście 720 pikseli szerokości i 480 pikseli wysokości, w tym niektóre wygaszenia po bokach. Cyfrowy odpowiednik 625/50 to 720×576. W obu przypadkach współczynnik proporcji klatki wynosi 4: 3, co oznacza po prostu, że piksele nie są kwadratowe. Zobacz https://en.wikipedia.org/wiki/D-1_(Sony)
Aby uczynić sprawę bardziej złożoną, tylko podzbiór ramki ma 4 : 3 proporcje. Myślę, że tylko 704×480 (dla 525/60) i 704×576 (dla 625/50) ma proporcje 4: 3. Zobacz dyskusję tutaj: https://lurkertech.com/lg/video-systems/
Zatem 480 pikseli to proporcja 10/11, 576 pikseli to proporcje 59/54. Zobacz także tutaj: https://en.wikipedia.org/wiki/Pixel_aspect_ratio . I nie zapominaj, że zarówno formaty 480-liniowe, jak i 576-liniowe mogą być również szerokoekranowy (16: 9), ale z taką samą liczbą pikseli w linii! Ponadto liczby takie jak 59/54 nie są łatwe w obsłudze. Wszystko to spowodowało, że dla formatu 576-liniowego proporcje pikseli zostały wybrane na 12/11 dla proporcji ekranu 4: 3, a jako 16/11 dla 16: 9.
Kwadratowe piksele stały się normą zaczynając od karty wideo VGA, jak sądzę, a następnie od specyfikacji HD dla wideo 720-liniowego i 1080-liniowego. Nawiasem mówiąc, istnieje kilka formatów HD, które nagrywają 1440 x 1080 lub 960 x 720, ale mają proporcje klatki 16: 9, a także mają piksele niekwadratowe. Piksele kwadratowe powstały stosunkowo niedawno i nie należy ich automatycznie oczekiwać.
Komentarze
Odpowiedź
Są dwie różne rzeczy:
- Rzeczywista szerokość i wysokość ramek (w pikselach) – patrz zielona część poniższego obrazu.
- wyświetlana szerokość i wysokość (podczas odtwarzania) – zobacz niebieską część tego samego obrazu.
Problem pojawił się w starym złe dni, kiedy rozdzielczość urządzeń (liczba pikseli w obrazie) była bardzo niska, ale wymagany stosunek szerokości do wysokości do odtwarzania wynosił 4: 3.
Rozwiązanie (w w tamtych czasach) był wynalezieniem niekwadratowych pikseli.
Dla uproszczenia załóżmy (teoretycznie) bardzo małe wymiary:
- wymagane: 4 x 3 piksele (i. mi. 12 pikseli) na klatkę.
- rzeczywiste możliwe (za akceptowalną cenę): 3 x 3 (czyli 9 pikseli).
Rozwiązaniem były piksele niekwadratowe z współczynnik proporcji pikseli ( PAR ) 4: 3 , jak tutaj:
Zatem współczynnik proporcji piksela ( PAR ) to stosunek rozmiarów każdego pojedynczego piksela:
Każdy niebieski piksele na naszym obrazie mają PAR 4: 3, a każdy pomarańczowy i każdy zielony ma PAR 1: 1.
Teraz cały (niebieski) obraz jest wyświetlany poprawnie, tak jak chcieliśmy – np. sol. jako 12 cm x 9 cm – więc jego współczynnik proporcji wyświetlania ( DAR ) wynosi 12: 9 lub 4: 3.
Mimo to jest zapisywany jako 3 x 3 piksele – więc współczynnik proporcji pamięci ( SAR ) to 3 piksele: 3 piksele lub 1: 1.
Wskazówka:
- proporcje pikseli ( PAR ) to mikrometry: mikrometry
- współczynnik proporcji wyświetlacza ( DAR ) to centymetry: centymetry
- współczynnik proporcji pamięci ( SAR ) to piksele: piksele
W konsekwencji relacja między te 3 wartości to
DAR = SAR × PAR
Ważna uwaga:
Czasami jest PAR (Pixel Aspect Ratio) o nazwie Sample Aspect Ratio – jak w FFmpeg . Niefortunnie, jego skrót to SAR , co jest bardzo mylące, ponieważ – jak widzieliśmy – jest to również skrót od Storage Aspect ratio.
Główny problem:
W dzisiejszych czasach wszystkie urządzenia mają proporcje 1: 1 (piksele kwadratowe), oraz wiele odtwarzaczy multimedialnych, głównie dla małych urządzeń (telefony komórkowe, tablety), polega na nim, całkowicie ignorując wartość DAR zapisaną w strumieni wideo.
Może się więc zdarzyć, że to samo wideo (ze wszystkich źródeł) będzie odtwarzane poprawnie na komputerze stacjonarnym lub laptopie, ale nieprawidłowo (zawężone) w smartfonie. Lub nawet na inny odtwarzacz multimedialny na tym samym komputerze lub urządzeniu.
W naszym przykładzie ramki mogą być nieprawidłowo wyświetlane jako kwadrat (zobacz zieloną część powyższego obrazu).
Rozwiązanie tego problemu w FFmpeg:
- zmień rozmiar problematycznego wideo, a następnie
- s ustaw SAR na 1, a
- DAR ma prawdopodobnie poprawną wartość, ale możesz ustawić ją dla pewności.
W naszym (nierealnym) przykładzie może użyć wykresu filtrów
-vf scale=4:3,setsar=1,setdar=w/h
gdzie w
to z (tylko przeskalowanymi) ramkami w pikselach, h
to ich wysokość. FFmpeg automatycznie podstawi odpowiednie wartości.
Rezultatem będzie pomarańczowa część powyższego obrazu.
W Twoim przypadku Twój film ma (z Twoich informacji)
- DAR 4: 3 (640: 480),
- SAR (współczynnik proporcji pamięci) 720: 480 = 3: 2 i – w konsekwencji –
- PAR = DAR / SAR = 8: 9. (W terminologii FFmpeg jest to SAR – przykładowy współczynnik kształtu).
A więc aby uniknąć problemów z odtwarzaczami multimedialnymi ignorującymi wartość DAR (i odtwarzać ją w proporcji 720: 480, możesz rozważyć przekonwertuj go poleceniem
ffmpeg -i your_input_file -vf -scale=640:480,setsar=1 -c:a copy your_output_file
Problemy z obrazami z pikselami innymi niż kwadratowe:
W przypadku zdjęć sytuacja jest jeszcze gorsza:
Prawie wszyscy przeglądający / redaktorzy zdjęć i przeglądarki internetowe po prostu ignorują obrazy SAR i DAR , zakładając, że wszystko zdjęcia na całym świecie mają SAR 1: 1.
Honorowy wyjątek to (co ciekawe i zaskakująco) Microsoft Windows Photo Viewer , która wyświetla wszystkie zdjęcia w poprawnej ctly.
Możesz się o tym przekonać e. sol. przez Test współczynnika proporcji pikseli – wszystkie 9 zdjęć powinno być poprawnie wyświetlanych w przeglądarce, ale – bardzo prawdopodobne – nie są.
Komentarze
- dobrze opisane. Dzięki! Obie odpowiedzi są poprawne. Gdy liczba ups wzrośnie, zaktualizuje najlepszą odpowiedź.
FFmpeg
w celu wykonania pewnych eksperymentów (aby sprawdzić, czy oba mają taką samą długość cięcia scen). Więc skoro odtwarzanie jest takie samo, czy powinienem założyć zffmpeg
, 640×480 i 720×480 są identyczne ?!