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ź.
FFmpegw 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 ?!