FAQ wczytywanie plików

From Avisynth wiki
Revision as of 20:25, 17 June 2008 by Thar (Talk)

Jump to: navigation, search

| Spis treści | Informacje ogólne | Wczytywanie plików | Wczytywanie skryptów | Komunikaty błędów | Rodzaje materiału źródłowego | Problemy z YV12 | Używanie pluginów VirtualDub |

Contents

Jak wczytuje się pliki do AviSynth?

Są dwa sposoby:

  1. używając polecenia AviSource()
  2. używając polecenia DirectShowSource()
  • AviSource() używa platformy Video for Windows (VfW). Jest dość stara i tak naprawdę jedyny powszechnie używany format jaki wspiera to AVI, jednak wspiera go dobrze - paradoksalnie, dzięki temu, że nie obsługuje wielu funkcji nowoczesnych kontenerów, VfW zwraca klatki w dokładnie takiej kolejności, w jakiej są umieszczone w ścieżce wideo. Przy używaniu tego sposobu trzeba jednak pamiętać, że z obsługą pewnych haków na AVI (jak np. dźwięk VBR czy wideo w H.264) mogą pojawić się problemy. Aby otworzyć plik potrzebujesz odpowiedniego kodeka z interfejsem VfW.
  • DirectShowSource() - jak sama nazwa wskazuje - używa nowszej platformy DirectShow (DS). Wspiera ona ogromną liczbę różnych formatów obrazu i dźwięku, ale z uwagi na to, że została stworzona z myślą o odtwarzaniu treści multimedialnych, nie ich edycji - nie zawsze klatki są zwracane we właściwej kolejności. Analogicznie, musisz mieć zainstalowane odpowiednie filtry DS, aby otworzyć plik. O tym, który filtr jest używany do obsługi danego formatu, decyduje wartość MERIT.

AviSynth obsługuje tylko po jednej ścieżce audio i wideo. Zanim wczytasz plik upewnij się, że nie zawiera więcej ścieżek - jeśli tak jest, wymuksuj te, z których chcesz korzystać. Możesz też wczytać obraz i dźwięk osobno, z dwóch różnych plików.

Część formatów nie jest poprawnie obsługiwana ani przez VfW, ani przez DS. Dla niektórych formatów powstały dedykowane pluginy, zwykle bardziej wiarygodne od dekoderów VfW/DS, które nastawione są na odtwarzanie, nie na obróbkę treści multimedialnych. Istnieją też pluginy dla części formatów zupełnie nieobsługiwanych przez ww. platformy. Opis niektórych znajdziesz poniżej, zaś pełną listę tutaj.

Wczytując pliki do AviSynth, dobrze jest trzymać się poniższego przewodnika:

  • gdy tylko możliwe, spróbuj wczytać swój plik używając AviSource() bądź wyspecjalizowanego pluginu, gdyż daje to najbardziej wiarygodne rezultaty;
  • jeśli to się nie uda, użyj DirectShowSource() z zainstalowanym filtrem;
  • jeśli to się nie uda, dokonaj konwersji pliku (najlepiej bezstratnej) do wspieranego formatu.

Sporą liczbę różnych formatów wraz ze wskazówkami, jak je wczytywać do AviSynth, opisano poniżej. Miłej lektury :)

Jak wczytać plik AVI?

Użyj AVISource. Przykład:

AVISource("C:\plik.avi")

Jeśli nie chcesz dźwięku:

AVISource("C:\plik.avi",false)

Jeśli AVISource() nie może otworzyć twojego pliku, musisz zainstalować odpowiedni kodek z interfejsem VfW - program GSpot może być pomocny w sprawdzeniu, jakiego kodeka potrzebujesz.

Możesz wymusić użycie konkretnego dekodera przy użyciu parametru fourCC. Zostanie użyty dekoder przypisany do podanego kodu.

## Otwieranie pliku AVI dekoderem Xvid:
AVISource("C:\plik.avi", fourCC="XVID")
## Otwieranie pliku avi dekoderem Canopus DV:
AVISource("C:\plik.avi", fourCC="CDVC")

Jak wczytać plik zawierający obraz i dźwięk?

Pliki AVI

Używając w takiej sytuacji AviSource(), oprócz odpowiedniego kodeka z interfejsem VfW będziesz potrzebował także kodeka dźwięku, kompatybilnego z platformą ACM (Audio Compression Manager). Odpowiednie kodeki są dostępne dla sporej liczby obsługiwanych przez kontener AVI formatów, jednak nie dla wszystkich. W miarę dokładną listę znajdziesz tutaj - program GSpot może być pomocny w sprawdzeniu, jakiego kodeka potrzebujesz.

Gdy już zainstalowałeś kodeki, plik możesz wczytać poleceniem:

AVISource("C:\plik.avi")

Inne kontenery

Oczywiście nie zawsze będziesz miał do czynienia z prostym AVI. Nowoczesne, bardziej zaawansowane formaty kontenerów multimedialnych - jak MKV, MP4, ASF/WMV i wiele innych - są w systemie Windows odczytywane za pomocą wspomnianego wyżej DirectShow. Nic nie stoi na przeszkodzie, by użyć go do dekodowania także w AviSynth. Może też zajść sytuacja, gdy będziesz chciał użyć dekodera DirectShow do uzyskania zawartości pliku AVI. W obydwu przypadkach, użyte polecenie będzie wyglądało np. tak:

DirectShowSource("C:\plik.mp4")

DirectShow wymaga filtrów - są to pliki z rozszerzeniem .ax - do obsługi kontenera (tzw. splittery) i do dekodowania zawartości (dekodery). Gdy odpowiednie filtry nie zostaną znalezione, AviSynth wyświetli komunikat Rendering failed (...). Dobrym i popularnym splitterem jest Haali Media Splitter, obsługujący pliki AVI, MKV, MP4, OGG, OGM oraz MPEG Transport Stream. Jeśli chodzi o dekodowanie, paczka filtrów ffdshow zawiera biblioteki do obsługi około 80 różnych formatów obrazu i dźwięku.

Obydwa podane powyżej filtry mają własne instalatory - może się jednak zdarzyć, że filtr do jakiegoś mało znanego formatu znajdziesz wyłącznie w postaci pliku AX. Wówczas musisz taki filtr zarejestrować ręcznie.

Jak sprawić, by DirectShow używał do danej zawartości wybranego przeze mnie filtra?

Po pierwsze i najważniejsze: problem nie będzie miał miejsca jeśli będziesz utrzymywał w filtrach porządek, czytał załączoną do nich dokumentację i NIE instalował na ślepo wszystkiego, co ci wpadnie w ręce. Trzymanie się tej zasady pozwala uniknąć problemów z większością oprogramowania, nie tylko z filtrami ;)

Jeśli jednak wiesz co robisz trzymając kilka filtrów obsługujących ten sam format, albo nie masz innego wyboru (bo np. oprócz obsługi wideo MPEG-4 ASP dwa filtry obsługują też inne formaty i koniecznie ich potrzebujesz), będziesz musiał zdecydować, który filtr ma być użyty - oczywiście ten lepszy. Są na to dwa sposoby: pierwszy uniwersalny, drugi działający wyłącznie w AviSynth (i być może innych programach których nie znam).

Modyfikacja wartości MERIT

Jak wspomniano wyżej, wartość MERIT używana jest w DirectShow do określenia, który filtr jest "ważniejszy" od innych i w sytuacjach konfliktowych (gdy do danej zawartości pasują dwa filtry lub więcej) będzie użyty. MERIT można łatwo zmieniać za pomocą programu RadLight Filter Manager. Z listy należy wybrać filtr, po czym ustawić, jak dalece jego MERIT ma się różnić od MERIT_NORMAL, i kliknąć Set Value. Sposób ten może nie zadziałać, gdy filtr posiada własne ustawienia MERIT (np. AC3Filter - aby respektował te ustawienia, należy w opcjach konfiguracyjnych wybrać Prefer other filters).

Użycie GraphEdit

Gdy plik jest otwierany w DirectShow, ten w niewidoczny dla użytkownika sposób konstruuje z odpowiednich filtrów schemat odtwarzania zawartości, nazywany grafem. GraphEdit jest narzędziem do ręcznego tworzenia grafów, pomocnym (nie tylko) dla programistów i dostępnym w Microsoft DirectX SDK. Na szczęście doskonale działa osobno i nie musisz pobierać prawie 450 MB niepotrzebnych narzędzi i bibliotek.

Po otwarciu GraphEdit, kliknij na ikonę Open, z rozwijanej listy formatów wybierz *.* (All Files) i otwórz plik, który chcesz wczytać do AviSynth. Pojawi się automatycznie skonstruowany przez DirectShow graf (lub komunikat błędu, jeśli nie masz odpowiednich filtrów), który możesz dowolnie modyfikować za pomocą klawisza Delete i przycisku Insert filter. Ponieważ nie chcesz odtworzyć pliku, a jedynie przesłać jego zawartość do AviSynth, pamiętaj o usunięciu z grafu wyjścia dźwięku i renderera wideo. Teraz zapisz gotowy graf (File --> Save graph) i otwórz go w AviSynth:

DirectShowSource("C:\plik.grf")

GraphEdit jest dobrym narzędziem, ale ma jedną zasadniczą wadę - od 2002 roku pozostaje niezmienione. Przez ten czas powstały inne programy, spełniające to samo zadanie. Podstawowe działanie wygląda niemal identycznie, więc powyższe wskazówki również powinny działać. Znane programy to:

Czy AviSynth umie skopiować fragment ścieżki bez rekompresji, jak VirtualDub w trybie "Direct stream copy"?

Nie. Zarówno obraz, jak i dźwięk są poddawane dekodowaniu przy wczytaniu ich do AviSynth.

Istnieje mod do AviSynth 2.55 dodający wsparcie dla bezpośredniego kopiowania ścieżek. Nazywa się DSynth i możesz go pobrać stąd. Być może pewnego dnia zostanie włączony do oficjalnej kompilacji AviSynth.

Personal tools