Nazwa Użytkownika   
Hasło   
  

Zarejestruj się  
Przypomnij hasło  
 
  Strona Główna Artykuły audio/video Forum Pliki Odtwarzacze Blu-ray Soft DVD Recenzje playerów MP3 Szukaj Kontakt RSS22.05.2012 16:13 
 
Nawigacja
Strona Główna
Artykuły audio/video
Forum
Pliki
FAQ
Odtwarzacze Blu-ray
Soft DVD
Recenzje playerów MP3
Szukaj
Kontakt
Archiwum newsów
Sponsorzy serwisu
RSS
Dodaj newsa
Pliki do pobrania
Ostatnio dodane
Avidemux 2.6 r7970 (SVN)
MediaCoder 0.8.12.5245
ffdshow rev4453 clsid 20120...
AC3Filter 2.2a
AviAddXSubs 9.11
DVDStyler 2.2
K-Lite Codec Pack Full 8.8.0
DVDFab HD Decrypter 8.1.8.2...
Zoom Player Home FREE 8.1.6
x264vfw 2197

Najchętniej pobierane
VirtualDubMod 1.5.10.3 buil... [58586]
VSO ConvertXToDVD 4.1.19.365 [36278]
Virtualdub-MPEG2 1.6.19 bui... [35706]
VirtualDubMod 1.5.10.2 (b.2... [35253]
XviD 1.3.2 stable (Koepi) [34100]
WinAVI Video Converter 11.5 [33985]
Avi ReComp 1.5.4 [32323]
Ultra RM Converter 5.1.0225 [31947]
AviSynth 2.5.8 final [29229]
Auto Gordian Knot 2.55 [28317]
Sztama


AviSynth POLSKA
Szybkie statystyki
VideoAudio.pl - serwis o technologii video/audio
WITAMY:
biniek
jako nowego użytkownika.

Zarejestrowanch Uzytkowników: 3877

Super Administratorzy: 3
Administratorzy: 2
Użytkownicy: 3872

Użytkownicy Online:

Placio7403:10:01
alpinus903:54:58
artsza17:57:00
biniek 1 dzień
tadzos 1 dzień
Liparus 2 dni
007marc 3 dni
SHINGO 5 dni
Waldemar 1 tydzień
teklan 1 tydzień

Gości Online: 16

Najwiecej online: 106
Bylo: 27.05.2008-19:56
Twoje IP to: 38.107.179.209

Newsy 3377
Artykuły 132
Trutka na Spam
Poprzedni | Następny
NTSC Inverse Telecine w AviSynth
Aby wykorzystaćdowolną z opisanych tu metod należy zainstalować AviSynth 2.5.x oraz wyposażyć się w odpowiednie wtyczki dostępne tutaj (ściągając każdą z nich należy wybrać wersję dla AviSynth 2.5.x). Pliki *.dll z archiwów *.zip poszczególnych wtyczek należy skopiować do katalogu wtyczek AviSynth (domyślnie C:\Program Files\AviSynth 2.5\plugins) - wówczas będziemy mogli się nimi posługiwać bez użycia LoadPlugin(). Zakłada się, że czytelnik zna podstawy AviSynth oraz obsługę programu VirtualDubMod (który w dalszych rozważaniach będziemy określać skrótem VDM).

Słowo wstępne

W zależności od źródła jego pochodzenia, możemy wyróżnić dwa rodzaje przeplotu: "naturalny" i "sztuczny". Przeplot "naturalny" (którego dotyczy ten artykuł) powstaje już w trakcie filmowania - kamera nie filmuje pełnych klatek, lecz najpierw jeden półobraz, zaś chwilę później drugi (w ten sposób pracują kamery telewizyjne a także amatorskie kamery cyfrowe DV). Przeplot "sztuczny" (którego dotyczy niniejsze opracowanie) powstaje wskutek wykonania procesu telecine, czyli dostosowania filmu progresywnego (filmowanego pełnowymiarowymi klatkami) do emisji w telewizji. Elementem procesu telecine jest rozdzielenie każdej klatki na półobrazy, ponieważ w analogowym sygnale telewizyjnym muszą być one rozdzielone. Z progresywnych klatek

ABCD

uzyskujemy klatki podzielone na półobrazy górne (t) i dolne (b):

AtBtCtDt
AbBbCbDb

Jest to tzw. 2:2 pulldown.
Następnie konieczna jest korekta ilości klatek na sekundę (w skrócie FPS od angielskiego frames per second) w filmie. Filmy kinowe kręcone są przy 24 FPS, zaś systemy telewizyjne PAL i SECAM używają 25 FPS (50 półobrazów na sekundę), a NTSC 29.97 FPS (59.94 półobrazów na sekundę). W przypadku dwóch pierwszych systemów (których dotyczy niniejsze opracowanie) zazwyczaj dokonuje się tego poprzez przyspieszenie z 24 do 25 FPS oraz ewentualnej późniejszej korekty tonacji dźwięku (która wskutek jego przyspieszenia została nieco podniesiona i może brzmieć nienaturalnie, co jest szczególnie odczuwalne w przypadku muzyki). W systemie NTSC jest to nieco bardziej skomplikowane - najpopularniejszym sposobem konwersji z 24 do 29.97 FPS jest tzw. 3:2 pulldown, który wygląda następująco: spowalniamy film z 24 do 23.976 FPS, a potem z czterech klatek ABCD rozdzielonych na półobrazy górne (t) i dolne (b):

AtBtCtDt
AbBbCbDb

poprzez przestawienie i duplikację niektórych półobrazów uzyskujemy pięć klatek:

AtAtBtCtDt
AbBbCbCbDb

Jak widać, proces telecine w systemie NTSC zaburza płynność ruchów (poprzez duplikację półobrazów) oraz progresywną strukturę klatek, Aby film poddany 3:2 pulldown był prawidłowo odtwarzany, musimy ten proces odwrócić i tego właśnie dotyczy niniejsze opracowanie.
UWAGA: Niedopuszczalna jest zmiana rozdzielczości pionowej obrazu przed usunięciem przeplotu (zmiana rozdzielczości poziomej też nie jest polecana). Należy też pamiętać, że tylko materiał pochodzący z progresywnego źródła posiadający 29.97 lub 30 klatek na sekundę (ewentualnie zbliżoną wartość) i artefakty przeplotu może zawierać wzorzec 3:2 pulldown i tylko do takich materiałów należy stosować opisaną niżej procedurę.

1. Określanie prawidłowej kolejności półobrazów

Działanie funkcji i wtyczek AviSynth opisywanych w tym artykule jest uzależnione od kolejności półobrazów w materiale żródłowym, toteż musimy ją prawidłowo określić. Wprawdzie AviSynth sam stara się ją rozpoznać i dysponuje wbudowaną funkcją GetParity() (zwracającą true dla materiału TFF, zaś false dla materiału BFF), lecz często informacja ta okazuje się nieprawdziwa.
Aby "ręcznie" określić prawidłową kolejność półobrazów, piszemy skrypt postaci:

AVISource("ścieżka\plik.avi")
AssumeTFF()
SeparateFields()


Następnie otwieramy go w VirtualDubMod i przewijamy suwakiem obserwując ruch. Jeśli ruch przebiega tylko w jednym kierunku (z ewentualnymi przestojami spowodowanymi półobrazami pochodzącymi z tej samej klatki) bez żadnych cofnięć, oznacza to, że znaleźliśmy właściwą kolejność półobrazów - jest to TFF, czyli półobraz górny jest zapisany jako pierwszy. Jeśli ruch jest szarpany (po półobrazie zawierającym ruch w prawidłowym kierunku następuje półobraz z cofnięciem), czynność powtarzamy dla skryptu:

AVISource("ścieżka\film.avi")
AssumeBFF()
SeparateFields()


Teraz ruch powienien już być prawidłowy, a kolejność półobrazów to BFF - dolny półobraz jest zapisany jako pierwszy.
Kolejność półobrazów należy zapamiętać, gdyż będziemy ją podawać jako argument funkcjom używanym w kolejnych przykładach.

2. Rozpoznanie wzorca duplikacji półobrazów

Aby przekonać się, czy nasz materiał zawiera wzorzec 3:2 pulldown, czy 3:2:3:2:2 pulldown, otwieramy w VirtualDubMod skrypt:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=0,post=3,show=true,chroma=true,hints=true)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF

Teraz powoli przewijając go w VDM sprawdzamy, czy Telecide() znalazł stały wzorzec układu półobrazów. Należy zwrócić uwagę na informacje wyświetlane w ostatnich dwóch linijkach. W rubryce [using ?] powinien występować stały cykl liter postaci cccnn lub nnncc (ewentualnie inna kombinacja z użyciem litery p, ale też w proporcjach 3:2), zaś w sąsiadującej z nią rubryce [progressive] (ewentualnie [interlaced], ale tylko sporadycznie).


Jeśli warunek ten jest spełniony dla każdej sceny (tzn. zmiana wzorca występuje tylko w momentach cięć), znaczy to, że zidentyfikowaliśmy wzorzec 3:2 pulldown. Możemy się go spodziewać w filmach kinowych a także serialach telewizyjnych kręconych w krajach NTSC. Jeśli zaś w rubryce [using ?] występuje stały cykl liter typu ccccnn lub nnnncc (ewentualnie inna kombinacja z użyciem litery p, ale też w proporcjach 4:2), znaczy to, że mamy do czynienia z 3:2:3:2:2 pulldown. Wzorzec ten jest spotykany czasem w materiałach kręconych progresywnie przy 25 FPS dla telewizji w krajach PAL i SECAM.

3. Odwrócenie procesu telecine

(a) 3:2 pulldown

Aby pozbyć się zduplikowanych półobrazów oraz poustawiać pozostałe w prawidłowej kolejności, należy użyć skryptu postaci:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=1,post=2,show=false,chroma=true,hints=true,blend=false)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
Decimate(cycle=5)

To spowoduje, że Telecide() usunie przesunięcie półobrazów, a następnie wykona postprocessing, czyli usunie pozostające w filmie artefakty przeplotu (któych powinno być bardzo mało, mogą wystąpić np. w logo wytwórni na początku lub końcu filmu) metodą analogiczną do FieldDeinterlace(blend=false) (informacje o poszczególnych parametrach funkcji Telecide() oraz FieldDeinterlace() znajdziecie na polskiej stronie AviSynth). Ustawiając w Telecide() parametr blend=true uzyskamy zlewanie półobrazów w obszarach zawierających przeplot (w przypadku blend=false stosowana jest interpolacja). Ważne jest, aby zaraz po Telecide() użyć Decimate() - dzięki temu pierwsza funkcja będzie mogła przekazać drugiej podpowiedzi (numery zduplikowanych klatek). Pamiętajmy, że Telecide() nie usuwa duplikatów, a jedynie dopasowuje do siebie półobrazy przywracając progresywne klatki. W celu usunięcia duplikatów musimy użyć jednej z funkcji stworzonych do tego celu - najlepszym wyborem będzie tu właśnie Decimate(), która pochodzi z tego samego pakietu decomb.dll i została zaprojektowana do ścisłej współpracy z Telecide().
Możliwe też jest użycie KernelDeint() do postprocessingu zamiast FieldDeinterlace() - wystarczy użyć skryptu postaci:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=1,post=1,show=false,chroma=true,hints=true)
KernelDeint(order=?)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
Decimate(cycle=5)


(b) 3:2:3:2:2 pulldown

Tym razem skrypt ma postać:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=3,post=2,show=false,chroma=true,hints=true,blend=false)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
Decimate(cycle=6)

Nietrudno spostrzec, że różni się on od skryptu dla 3:2 pulldown tylko wartością parametru guide w Telecide() (1 dla 3:2 pulldown, 3 dla 3:2:3:2:2 pulldown) oraz wartością parametru cycle (5 dla 3:2 pulldown, 6 dla 3:2:3:2:2 pulldown). Ta ostatnia zmiana spowodowana jest częstością występowania duplikatów - w pierwszym przypadku jedna na pięć klatek jest duplikatem, w drugim zaś jedna na sześć.
Podobnie jak w poprzednim przypadku, tak i tu możemy użyć KernelDeint() do wykonania postprocessingu:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=3,post=1,show=false,chroma=true,hints=true)
KernelDeint(order=?)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
Decimate(cycle=6)


Suplement A. Materiały hybrydowe

(a) ...zawierające głównie materiał pulldown

Większość seriali emitowanych w krajach NTSC zawiera partie kręcone progresywnie przy 23.976/24 FPS oraz krótkie fragmenty 29.97/30 FPS (progresywne lub z przeplotem), np. sekwencje złożone tylko z animacji komputerowej, czołówka i napisy końcowe. Najkorzystniej byłoby wykonać IVTC na partiach filmowych (zmniejszając FPS do 23.976/24) i usunąć artefakty przeplotu z partii wideo (pozostawiając je przy 29.97/30 FPS). Ponieważ jednak AviSynth nie obsługuje zmiennej prędkości klatkowej (z ang. variable framerate, w skrócie VFR), musimy znaleźć sposób na zachowanie jednolitej wartości FPS w całym klipie. Możemy to zrobić dzięki rozdziałowi funkcji w pakiecie decomb.dll (Telecide() przywraca progresywne klatki, Decimate() zmienia FPS) oraz dużych możliwościach Decimate().

Tym razem nasz skrypt wygląda tak:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=?,post=2,show=false,chroma=true,hints=true,blend=false)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
# parametr guide ustawiamy na 1 dla 3:2 pulldown, 3 dla 3:2:3:2:2 pulldown
Decimate(cycle=?,mode=3,threshold=2.5)
# parametr cycle ustawiamy na 5 dla 3:2 pulldown, 6 dla 3:2:3:2:2 pulldown

Wartość 3 parametru mode w Decimate() powoduje, że fragmenty progresywne są traktowane inaczej, niż fragmenty "przeplecione". Tam, gdzie Telecide() wykrył wzorzec 3:2 pulldown, zduplikowane klatki są usuwane, zaś we fragmentach uznanych przez Telecide() za "przeplecione" Decimate() zastosuje "zlewanie" klatek (z których Telecide() wcześniej usunął artefakty przeplotu). Aby ten mechanizm zadziałał prawidłowo, Decimate() należy użyć zaraz po Telecide() oraz ustawić Telecide()=1. Drugim kryterium wyboru sposobu zmniejszenia FPS (jedynym, które działa dla 3:2:3:2:2 pulldown) jest wartość parametru threshold w Decimate() (wartość 2.5 w skrypcie jest tylko przykładowa). Decimate(cycle=N,mode=3) sprawdza dla każdych N klatek, czy są wśród nich dwie identyczne (sąsiadujące ze sobą) klatki. Jeśli znajdzie dwie takie klatki, usuwa jedną z nich, jeśli nie, traktuje ten cykl N klatek jak materiał wideo ("zlewa" dwie klatki w jedną). Wartość threshold to ilość różnic (w procentach) pomiędzy dwoma klatkami, którą trzeba przekroczyć, aby dwie klatki zostały uznane za różne (im wyższy threshold, tym bardziej muszą się różnić klatki, aby zostały uznane za różne). Wartość 0 wyłącza ten sposób poszukiwania duplikatów.

(b) ...zawierające głównie materiał wideo

Dotyczy to na przykład programów dokumentalnych typu "making of" (opowiadających o produkcji filmu kinowego) zawierających wywiady i materiały z planu filmowego kręcone z przeplotem i krótkie fragmenty filmu zawierające 3:2 pulldown.

Skrypt ma postać:

AVISource("ścieżka\film.avi")
AssumeTFF() # jeśli stwierdziliśmy TFF w punkcie pierwszym
# AssumeBFF() jeśli stwierdziliśmy BFF w punkcie pierwszym
Telecide(order=?,guide=1,post=2,show=false,chroma=true,hints=true,blend=false)
# parametr order ustawiamy na 1 dla TFF, 0 dla BFF
Decimate(cycle=5,mode=1,threshold=2.5)

Wartość 1 parametru mode każe Decimate() pozostawić oryginalną ilość klatek na sekundę. Podobnie jak w przypadku mode=3, tak i tutaj Decimate() posługuje się podpowiedziami pochodzącymi od Telecide(). Tam, gdzie Telecide() wykrył wzorzec 3:2 pulldown, duplikaty są traktowane w następujący sposób: z klatek A B C C D otrzymujemy A B C C+D D, gdzie C+D powstaje przez "zlanie" klatek C i D. Klatki pochodzące z fragmentów wideo są wykrywane tak jak w podpunkcie a i pozostawiane bez zmian.

Suplement B. DVD i 3:2 pulldown

W przypadku filmów kinowych wydawanych na DVD w regionach NTSC, proces 3:2 pulldown jest zazwyczaj wykonywany dopiero podczas odtwarzania (film jest zapisany na DVD jako 23.976 FPS bez zduplikowanych półobrazów). Jest to możliwe dzięki istnieniu w strumieniu wideo znaczników top field first (TFF) i repeat first field (RFF), które mówią odtwarzaczowi kiedy i jak ma powtarzać półobrazy. Dla grupy czterech klatek wartości znaczników wyglądają tak:

Klatka A B C D
TFF TAK - - TAK
RFF TAK - TAK -

Gdy naszym źródłem jest taka płyta DVD, wykonywanie inverse telecine może się okazać niepotrzebne. Aby otworzyć strumień MPEG-2 w AviSynth za pomocą dgdecode.dll (dawniej mpeg2dec3.dll), tworzymy plik projektu *.d2v za pomocą DGIndex (dawniej DVD2AVI). Po uruchomieniu programu używamy polecenia File -> Autoincrement Open (albo klawisza F3) po czym wskazujemy pierwszy plik *.vob naszego filmu.


Następnie klikamy OK i z głównego menu programu wybieramy polecenie Video -> Field Operation -> Forced FILM.


Potem zapisujemy projekt *.d2v poleceniem File -> Save Project (lub klawiszem F4). Potem otwieramy plik projektu w AviSynth poleceniem:

MPEG2Source("ścieżka\projekt.d2v")

Otrzymamy prawidłowy progresywny klip, który możemy dalej przetwarzać.

Epilog

Wprawdzie pojawienie się DVD zlikwidowało część problemów powodowanych przez telecine w systemie NTSC, lecz w przypadku materiałów pochodzących ze źródeł analogowych (telewizja, VHS) wciąż napotykamy na zduplikowane półobrazy, przez co metody opisane w tym artykule wciąż mają rację bytu. Niemożliwe jest opisanie wszystkich możliwych patologii, na jakie możemy się natknąć przetwarzając materiały pochodzące ze źródeł progresywnych, dlatego ów poradnik należy traktować jako zachętę do dalszych eksperymentów, nie zaś jak zamknięte kompendium wiedzy.




Artykuł dostępny jest również w formie dokumentu PDF
Aby ściągnąć plik skorzystaj z menu kontekstowego myszy i opcji Zapisz element docelowy jako...
Poprzedni | Następny
Oceny
Dodawanie ocen dostępne tylko dla zalogowanych Użytkowników.

Proszę się zalogować lub zarejestrować, żeby móc dodawać oceny.

Brak ocen.
Reklama
Miejsce na reklamę
Honey Pot
 

Prawa autorskie © VideoAudio.pl 2001-2011.
Zabronione jest bez zgody właściciela wyrażonej na piśmie; kopiowanie, powielanie lub jakiekolwiek inne wykorzystywanie w całości lub we fragmentach informacji, danych lub innych treści Serwisu.
oldfashioned
9830068 Unikalnych wizyt
Powered by v6.01.19 © 2003-2009