AviSynth
Deweloperzy | Twórcy AviSynth, społeczność Doom9 |
---|---|
Pierwsze wydanie | 19 maja 2000 |
Wersja stabilna | 3.7.2 (AviSynth+) (17 marca 2022 | )
Wersja podglądu | 3.7.2 (17 marca 2022 | )
Magazyn | |
Napisane w | C++ , montaż |
System operacyjny | Windowsa , Linuksa , macOS |
Platforma | x86 i x86-64 |
Typ | Cyfrowy serwer klatek wideo |
Licencja | GNU GPL |
Strona internetowa |
AviSynth to program serwera ramek dla systemów Microsoft Windows , Linux i macOS , początkowo opracowany przez Bena Rudiaka-Goulda, Edwina van Eggelena, Klausa Posta, Richarda Berga i Iana Brabhama w maju 2000 r., a później przejęty i utrzymywany przez społeczność open source, która jest nadal aktywna Obecnie. Jest to wolne oprogramowanie na licencji GNU GPL .
Skryptowy edytor wideo
AviSynth działa jako nieliniowy edytor wideo kontrolowany całkowicie przez skrypty (bez GUI ). Emuluje AVI (lub plik audio WAV ) widziany przez aplikację podrzędną VFW , która zazwyczaj jest odtwarzaczem multimedialnym , oprogramowaniem do edycji wideo lub koderem .
AviSynth opiera się na filtrach , które są bardzo podobne do filtrów DirectShow , ale mają inny interfejs binarny . Możliwości filtrów obejmują kadrowanie , usuwanie przeplotu , odwrotną telecine , pracę z obrazami nieruchomymi , podstawową korekcję kolorów , redukcję szumów wideo i wiele innych rzeczy. AviSynth wykonuje również tradycyjne związane z edycją wideo, takie jak wycinanie, przycinanie i ponowne sekwencjonowanie segmentów.
Rozważmy na przykład skrypt „myAvi.avs” (zwykły plik tekstowy zapisany z rozszerzeniem „avs”)
AviSource("myAvi.avi") Crop(0, 0, 320, 240) Blur(0.1)
Ten plik skryptu można otworzyć w większości odtwarzaczy multimedialnych (takich jak Windows Media Player ). Program odtworzy plik wideo „myAvi.avi” przycięty do lewego górnego rogu o wymiarach 320 pikseli i nieznacznie rozmyty. Operacje odbywają się w kolejności sekwencyjnej, więc najpierw następuje kadrowanie, a następnie rozmycie.
Technicznie rzecz biorąc, AviSynth konstruuje wykres filtru (podobnie jak Microsoft GraphEdit , ale z dodatkowymi możliwościami), kontrolowany przez skrypty napisane w języku skryptowym AviSynth . Jego funkcjonalność można rozszerzyć za pomocą filtrów innych firm, zwanych wtyczkami . Zewnętrzna lista wtyczek jest utrzymywana w AviSynth Filter Collection .
AviSynth jest serwerem ramek – program wywołujący żąda ramek audio/wideo, a skrypt je obsługuje . Program wywołujący może wywoływać ramki w dowolnej kolejności, umożliwiając mu pauzę, przeskakiwanie do przodu lub do tyłu itp., tak jak w przypadku pliku fizycznego.
Język skryptowy AviSynth
Język skryptowy to język przepływu danych : paradygmat programowania opisujący ukierunkowany wykres danych przepływających między operacjami. Brakuje w nim pewnych proceduralnych struktur kontroli programowania, ale zawiera wiele funkcji znanych programistom, w tym zmienne , różne typy danych , wyrażenia warunkowe i złożone wyrażenia .
Język działa głównie z klipem audio/wideo jako wbudowanym typem danych. Klip to złożona struktura z wieloma atrybutami, takimi jak szerokość, wysokość i czas trwania. Język ma również kilka innych bardziej standardowych typów danych: int , float , bool i string . Można ich używać do wykonywania obliczeń, podejmowania decyzji i pisania tekstu, takiego jak napisy do filmu.
Skrypt ma pojedynczą wartość zwracaną , która jest dźwiękiem i obrazem „widzianym” przez program uruchamiający skrypt. Zwykle jest to ostatnia linia skryptu, ale w dowolnym miejscu można wstawić instrukcję return .
"Witaj świecie"
Ten przykład to program „Hello World” .
BlankClip() Subtitle("Witaj świecie!")
Jeśli powyższy tekst zostanie wpisany do pliku tekstowego z rozszerzeniem .avs, można go otworzyć w programie Windows Media Player lub dowolnym innym programie z poniższej listy , a wideo zawierające słowa „Witaj, świecie!” zostanie wyświetlone.
Funkcja BlankClip tworzy nowy film. Nawiasy na końcu słowa są opcjonalne, ponieważ żadne argumenty nie są przekazywane, ale w tym przypadku są podane, aby wskazać, że jest to funkcja, a nie zmienna.
Funkcja napisów rysuje słowa „Witaj, świecie!” na wcześniej utworzonym pustym filmie.
Chociaż obie funkcje akceptują o wiele więcej argumentów (na przykład kontrolowanie rozmiaru i długości pustego wideo oraz pozycjonowanie, czcionkę i kolor napisów), ten przykład je pomija; funkcje używają wbudowanych argumentów domyślnych.
Avisynth wykorzystuje cukier syntaktyczny , który znacznie ułatwia pisanie prostych skryptów: niejawną zmienną o nazwie Last . Bez zmiennych niejawnych powyższy skrypt musiałby być napisany w następujący sposób:
Last = BlankClip() Last = Last.Subtitle("Witaj świecie!") return Last
lub tak:
A = BlankClip() B = A.Subtitle("Witaj świecie!") return B
Jawne zmienne klipu są zwykle używane tylko w przypadku funkcji obejmujących więcej niż jeden klip:
A = BlankClip() B = A.Subtitle("Witaj, świecie!") return Rozpuść(A, B, 30) # 30-klatkowe przenikanie
Przetwarzanie wideo
Ten przykład pobiera rzeczywiste wideo, stosuje proste przetwarzanie i zwraca je na wyjście.
AviSource("C:\Przykład.avi") ReduceBy2() GreyScale()
Funkcja AviSource służy do ładowania wideo AVI z rzeczywistej lokalizacji. Aby otworzyć inne typy multimediów, zamiast tego można użyć funkcji DirectShowSource . ReduceBy2 dzieli pionowy i poziomy rozmiar wideo na pół, a GreyScale usuwa wszystkie informacje o kolorach.
Filtry AviSynth działają w wielu przestrzeniach kolorów RGB i YUV , umożliwiając wszelkiego rodzaju wejścia i wyjścia wideo. Niektóre funkcje działają tylko w określonych przestrzeniach kolorów i wymagają konwersji — na przykład większość filmów jest dystrybuowana w przestrzeni kolorów YUV , ale większość korekcji kolorów odbywa się w jednej z przestrzeni RGB . Skrypt korygujący kolory może wyglądać tak:
DirectShowSource("movie.mp4") # Przestrzeń kolorów YV12 ConvertToRGB32 RGBAdjust(1.0, 0.95, 1.0) # Zmniejsz kanał zielony ConvertToYV12
Określony przez użytkownika
Język skryptowy AviSynth pozwala użytkownikom definiować własne funkcje.
To jest przykład funkcji, która pozwala przechodzić z jednego klipu do drugiego bez uszkadzania przeplotu.
clip1 = AVISource("video1.avi") clip2 = AVISource("video2.avi") # wywołaj zdefiniowaną przez użytkownika funkcję zdefiniowaną poniżej: interlaced_dissolve(clip1, clip2, 30) # ...skrypt zwraca powyższy wynik do programu wywołującego # funkcja zdefiniowana przez użytkownika: # rozpuszczanie od klipu1 do klipu2 na 30 klatkach function interlaced_dissolve(clip clip1, clip clip2, int iter) { clip1 = clip1.SeparateFields evn1 = clip1.SelectEven nieparzyste1 = clip1.SelectOdd clip2 = clip2 .SeparateFields evn2 = clip2.SelectEven nieparzyste2 = clip2.SelectOdd evn = Dissolve(evn1, evn2, iter) nieparzyste = Dissolve(nieparzyste1, nieparzyste2, iter) Interleave(evn, nieparzyste).Weave.DoubleWeave.SelectOdd # ...funkcja zwraca powyższy wynik do głównego skryptu }
AviSynth 3.0 i AviSynth+
AviSynth 3.0 był całkowitym przepisaniem AviSynth 2.x i miał na celu przezwyciężenie ograniczeń AviSynth 2.x. Dodanie ulepszeń, takich jak abstrakcyjny przestrzeni kolorów , w którym nowe przestrzenie kolorów (w tym dwie z 45-bitową głębią) mogą być obsługiwane przez mechanizm wtyczek, lepsze zarządzanie pamięcią podręczną w celu uzyskania lepszej wydajności oraz używanie języka Ruby zamiast używanego języka rodzimego w aktualnych wersjach.
AviSynth 3.0 miał być dostępny dla innych systemów operacyjnych niż Windows , zamiast polegać na GStreamer , rozszerzając wsparcie na platformy takie jak Linux , Mac OS X i BSD . Rozwój utknął w martwym punkcie od sierpnia 2007 roku.
Najnowszą i najnowocześniejszą wersją AviSynth jest AviSynth+ , pierwotnie fork oficjalnej wersji AviSynth 2.xx, ale od tego czasu AviSynth+ zyskał szerokie uznanie i stał się powszechnie stosowaną implementacją. Przepisał większość oryginalnego kodu AviSynth i wprowadził długo poszukiwane funkcje, takie jak obsługa 64-bitów , wielowątkowość , głębokie przestrzenie kolorów , obsługa najnowszych kompilatorów, nowe konstrukcje skryptowe (nowe konstrukcje przepływu sterowania, takie jak pętle) i zwiększona wydajność w wielu dziedzinach. Jednocześnie zachował 100% kompatybilność z serią AviSynth 2.5/2.6, zarówno w zakresie filtrów, jak i aplikacji hosta. W chwili pisania tego tekstu (2020-12) jest również aktywnie utrzymywany.
AviSynth dla systemów operacyjnych innych niż Windows
AviSynth 2.xx może być używany w systemach operacyjnych innych niż Windows za pomocą Wine . Do pracy na skryptach VirtualDub / VirtualDubMod można używać tak jak w systemie Windows. Aby połączyć AviSynth pod Wine i na przykład FFmpeg działający na hoście Linux, można użyć Avs2YUV. Avs2YUV to systemu Windows , który jest uruchamiany pod Wine i renderuje wyjście skryptu AviSynth na standardowe wyjście , które jest następnie przesyłane do FFmpeg. Avs2YUV obsługuje również zapis do nazwanego potoku .
Istnieje port Linux AviSynth o nazwie AvxSynth.
Programy kompatybilne z AviSynth
Nazwa programu | Licencja | Uwagi | Strona główna |
---|---|---|---|
Adobe Premiere Pro | Własny, komercyjny | Wersje 6.0 i nowsze (do CS4 włącznie) mają dostępną wtyczkę importującą AviSynth. | Premierowa wtyczka do importu AviSynth |
GUI Avanti | Zastrzeżony, darmowy | Avanti GUI to darmowy interfejs dla FFmpeg z opcją wstawienia AviSynth jako preprocesora. | GUI Avanti |
AvsPmod | GPL | AvsPmod to edytor skryptów AviSynth z wbudowanym odtwarzaczem, podświetlaniem składni i autouzupełnianiem kodu. | AvsPmod |
Koder Cinema Craft | Prawnie zastrzeżony | Cinema Craft Encoder to komercyjny koder MPEG-2 obsługujący wejście AviSynth. | Rzemiosło kinowe |
FFmpeg | LGPL2.1+, GPL2+ | FFmpeg skompilowany dla systemu Windows może odbierać dane wejściowe AviSynth | instrukcje |
Odtwarzacz GOM | Zastrzeżone, darmowe, obsługiwane przez reklamy | może odtwarzać pliki .avs | |
Media Player Classic | GPL | Media Player Classic może ładować i odtwarzać skrypty AviSynth. Wymagana jest wersja 32-bitowa. | Media Player Classic |
Koder wyrażeń firmy Microsoft | Własność, freemium | Microsoft Expression Encoder może importować i transkodować pliki .avs. | |
MPlayer | GPL | MPlayer może odtwarzać pliki .avs | |
Pakiet multimedialny Nero | Własny, komercyjny | Nero Showtime może odtwarzać pliki avs | |
SUPER | Zastrzeżone, darmowe, obsługiwane przez reklamy | SUPER (Simplified Universal Player, Encoder and Renderer) to darmowe oprogramowanie firmy eRightSoft, które może kodować większość popularnych formatów wideo i ma pełną obsługę AviSynth. | SUPER |
TMPGEnc | Oprogramowanie typu shareware/freeware | TMPGEnc to darmowy koder MPEG-1 i MPEG-2. TMPGEnc Plus i TMPGEnc Express to komercyjne wersje TMPGEnc, które obejmują ulepszoną funkcjonalność, a także usunięcie 30-dniowego ograniczenia kodowania MPEG-2 obecnego w TMPGEnc. | Pegasys Inc. |
Całkowity konwerter wideo | Zastrzeżone, wersja próbna | Total video converter ma dostępną wtyczkę importującą AviSynth. | Całkowity konwerter wideo |
VirtualDub | GPL | VirtualDub to szeroko stosowany uniwersalny konwerter wideo. | VirtualDub |
VirtualDubMod | GPL | VirtualDubMod zawiera kilka funkcji specyficznych dla AviSynth, takich jak wyraźna obsługa skryptów AviSynth, edytor skryptów AviSynth i wiele innych. Jednak nie był aktualizowany od 2006 roku i zawiera wiele błędów. | VirtualDubMod |
Windows Media Player | Własność, składnik systemu Windows / freeware | Windows Media Player może ładować i odtwarzać skrypty AviSynth, więc jest dobrym wyborem do prostego odtwarzania i testowania. Może wymagać pewnych poprawek w rejestrze, aby działał. | Windows Media Home |
Ponadto stworzono kilka programów, które akceptują tylko skrypty AviSynth jako dane wejściowe - upraszczając w ten sposób same programy, ale dając użytkownikom pełną moc AviSynth do wprowadzania danych.
Istnieje również kilka aplikacji do kodowania wsadowego, które łączą AviSynth z koderami i mukserami audio i wideo z wiersza poleceń, aby zapewnić wszechstronną, modułową, konfigurowalną aplikację do kodowania wideo. MeGUI jest przykładem tego rodzaju aplikacji.
Chociaż skrypty AviSynth mają być łatwo otwierane w prostych programach do edycji tekstu, istnieje kilka edytorów przeznaczonych specjalnie do edycji skryptów AviSynth, takich jak AvsPMod .
Zobacz też
Linki zewnętrzne
- Strona główna AviSynth: (angielski) (japoński)
- Kolekcja filtrów AviSynth
- Fora AviSynth Doom9
- Strona główna rozwoju AviSynth 3.0