stringtranslate.com

AviSynth

AviSynth — это программа фрейм-сервера для Microsoft Windows , Linux и macOS, изначально разработанная Беном Рудиаком-Гулдом, Эдвином ван Эггеленом, Клаусом Постом, Ричардом Бергом и Яном Брэбхэмом в мае 2000 года [1] , а затем подхваченная и поддерживаемая сообществом открытого исходного кода, которое действует и по сей день. Это свободное программное обеспечение, лицензированное в соответствии с GNU General Public License .

Сценарий видеоредактора

AviSynth действует как нелинейный видеоредактор, полностью управляемый скриптами (без графического интерфейса пользователя ). [2] Он эмулирует видеофайл AVI (или аудиофайл WAV ), как его видит нисходящее приложение VFW , которое обычно представляет собой медиаплеер , программное обеспечение для редактирования видео или кодер . [3]

AviSynth построен на фильтрах , которые во многом похожи на фильтры DirectShow , но с другим двоичным интерфейсом . Возможности фильтров включают обрезку , деинтерлейсинг , обратный телесин , работу с неподвижными изображениями , выполнение базовой цветокоррекции , снижение видеошума и многое другое. AviSynth также выполняет традиционные задачи редактирования видео, такие как резка, обрезка и повторное упорядочивание сегментов.

Например, рассмотрим скрипт «myAvi.avs» (простой текстовый файл, сохраненный с расширением «avs»).

Источник Avi("myAvi.avi") Обрезать(0, 0, 320, 240) Размытие(0.1)

Этот файл скрипта можно открыть в большинстве медиаплееров (например, Windows Media Player ). Программа воспроизведет видеофайл "myAvi.avi", обрезанный до верхнего левого угла 320 пикселей на 240 пикселей и размытый на небольшую величину. Операции выполняются последовательно, поэтому сначала происходит обрезка, затем размытие.

Технически AviSynth создает граф фильтров (подобный Microsoft GraphEdit, но с дополнительными возможностями), [4] управляемый скриптами, написанными на языке скриптов AviSynth. Его функциональность может быть расширена за счет использования сторонних фильтров, известных как плагины . Список внешних плагинов поддерживается в AviSynth Filter Collection.

AviSynth — это фрейм-сервер — вызывающая программа запрашивает аудио/видео кадры, а скрипт обслуживает их. Вызывающая программа может вызывать кадры в любом порядке, что позволяет ей делать паузу, переходить вперед или назад и т. д., как и в случае с физическим файлом.

Язык сценариев AviSynth

Язык сценариев — это язык потока данных : [4] парадигма программирования , описывающая направленный граф данных, протекающих между операциями. В нем отсутствуют некоторые структуры управления процедурным программированием , [5] но он содержит много функций, знакомых программистам, включая переменные , различные типы данных , условные операторы и сложные выражения .

Язык работает в основном с аудио/видеоклипами как со встроенным типом данных. Клип — это сложная структура со множеством атрибутов, таких как ширина, высота и длительность. [6] В языке также есть несколько других более стандартных типов данных: int , float , bool и string . [7] Их можно использовать для выполнения вычислений, принятия решений и написания текста, например субтитров к видео.

Скрипт имеет единственное возвращаемое значение , которое представляет собой аудио и видео, «видимые» программой, выполняющей скрипт. Обычно это последняя строка скрипта, но оператор возврата может быть вставлен в любой момент.

"Привет, мир"

Этот пример представляет собой программу «Hello World» .

BlankClip() Подзаголовок("Привет, мир!")

Если указанный выше текст ввести в текстовый файл с расширением .avs, его можно открыть в проигрывателе Windows Media или любой другой программе из списка ниже, и будет отображено видео, содержащее слова «Hello, world!».

Функция BlankClip создает новое видео. Скобки в конце слова необязательны, поскольку аргументы не передаются, но в данном случае они указаны для указания на функцию, а не переменную.

Функция «Субтитры» рисует слова «Привет, мир!» поверх ранее созданного пустого видео.

Хотя обе функции принимают гораздо больше аргументов (например, управление размером и продолжительностью пустого видео, а также позиционированием, шрифтом и цветом субтитров), в этом примере они не учитываются; функции используют встроенные аргументы по умолчанию.

Avisynth использует синтаксический сахар , который значительно упрощает написание простых скриптов: неявная переменная Last . Без неявных переменных приведенный выше скрипт пришлось бы записать так:

Последний = BlankClip() Last = Last.Subtitle("Привет, мир!") вернуться Последний

или так:

A = BlankClip() B = A.Subtitle("Привет, мир!") возвращение B

Явные переменные клипа обычно используются только для функций, включающих более одного клипа:

A = BlankClip() B = A.Subtitle("Привет, мир!") return Dissolve(A, B, 30) # 30-кадровый кроссфейд

Видео-обработка

В этом примере берется реальное видео, к нему применяется простая обработка, и оно возвращается на выход.

AviSource("C:\Example.avi") УменьшитьНа2() Оттенки серого()

Функция AviSource используется для загрузки видео AVI из реального местоположения. Для открытия других типов медиа можно использовать функцию DirectShowSource . ReduceBy2 делит вертикальный и горизонтальный размер видео пополам, а GreyScale удаляет всю цветовую информацию.

Фильтры AviSynth работают во многих цветовых пространствах RGB и YUV , чтобы обеспечить все виды ввода и вывода видео. [8] Некоторые функции работают только в определенных цветовых пространствах , требуя преобразования — например, большинство видео распространяется в цветовом пространстве YUV , но большая часть цветокоррекции выполняется в одном из пространств RGB . Скрипт цветокоррекции может выглядеть следующим образом:

DirectShowSource("movie.mp4") # Цветовое пространство YV12 Конвертировать в RGB32 RGBAdjust(1.0, 0.95, 1.0) # уменьшить зеленый канал Конвертировать в YV12

Определяется пользователем

Язык сценариев AviSynth позволяет пользователям определять собственные функции.

Это пример функции, которая позволяет переходить от одного клипа к другому, не повреждая чередующиеся линии.

 клип1 = AVISource("видео1.avi") clip2 = AVISource("video2.avi")  # вызов пользовательской функции, которая определена ниже: interlaced_dissolve(клип1, клип2, 30)  # ...скрипт возвращает указанный выше результат вызывающей программе   # определяемая пользователем функция: # растворение от клипа 1 до клипа 2 в течение 30 кадров функция interlaced_dissolve(клип клип1, клип клип2, int iter) { клип1 = клип1.ОтдельныеПоля evn1 = clip1.ВыбратьЧетный odd1 = clip1.ВыбратьOdd  клип2 = клип2.ОтдельныеПоля evn2 = clip2.ВыбратьЧетный odd2 = clip2.ВыбратьOdd  evn = Растворить (evn1, evn2, итер) нечетный = Растворение(нечетный1, нечетный2, итер) Interleave(evn, odd).Weave.DoubleWeave.SelectOdd # ...функция возвращает указанный выше результат в основной скрипт}

AviSynth 3.0 и AviSynth+

AviSynth 3.0 был полностью переписанным AviSynth 2.x и был нацелен на преодоление ограничений AviSynth 2.x. Добавление улучшений, таких как абстрактная модель цветового пространства , в которой новые цветовые пространства (включая два с глубиной 45 бит) могли поддерживаться через механизм подключаемых модулей, улучшенное управление кэшем для лучшей производительности и использование Ruby вместо доморощенного языка, используемого в текущих версиях. [9]

AviSynth 3.0 должен был быть доступен для других операционных систем, кроме Windows , вместо этого полагаясь на GStreamer , расширяя поддержку таких платформ, как Linux , Mac OS X и BSD . Разработка была остановлена ​​с августа 2007 года. [9] [10]

AviSynth+ — это ответвление официального AviSynth 2.xx, в котором реализованы долгожданные функции, такие как поддержка 64-битной архитектуры , многопоточность , глубокие цветовые пространства , поддержка последних компиляторов, новые конструкции сценариев (новые конструкции потока управления, такие как циклы) и повышенная производительность во многих областях. [11] В то же время он сохранил 100% совместимость с серией AviSynth 2.5/2.6 как для фильтров, так и для хост-приложений. На момент написания статьи (2023-06) он также активно поддерживается.

AviSynth для операционных систем, отличных от Windows

AviSynth 2.xx может использоваться в операционных системах, отличных от Windows, с помощью Wine . Для работы со скриптами VirtualDub / VirtualDubMod можно использовать как в Windows. Для взаимодействия между AviSynth под Wine и, например, FFmpeg , работающим на хосте Linux, можно использовать Avs2YUV. Avs2YUV — это программа командной строки Windows , которая запускается под Wine и выводит вывод скрипта AviSynth в stdout , который затем передается в FFmpeg. Avs2YUV также поддерживает запись в именованный канал . [12]

Существует порт AviSynth для Linux, который называется AvxSynth. [13]

Программы, совместимые с AviSynth

Кроме того, в настоящее время создано несколько программ, которые принимают в качестве входных данных только скрипты AviSynth, что упрощает сами программы, но при этом предоставляет пользователям все возможности AviSynth для ввода данных.

Также существует несколько приложений пакетного кодирования, которые связывают AviSynth с аудио- и видеокодерами командной строки и мультиплексорами, чтобы обеспечить комплексное, модульное, настраиваемое приложение для кодирования видео. MeGUI является примером такого рода приложений.

Хотя скрипты AviSynth предназначены для легкого открытия в простых программах для редактирования текста, существует несколько редакторов, специально предназначенных для редактирования скриптов AviSynth, например AvsPMod.

Смотрите также

Ссылки

  1. ^ "Avisynth Copyright". AviSynth Mediawiki . AviSynth Team . Получено 11 сентября 2015 г.
  2. ^ "Главная страница - Avisynth" . АвиСинт Медиавиики . Команда АвиСинт . Проверено 10 апреля 2013 г.
  3. ^ "Подробнее об AviSynth - Avisynth". AviSynth Wiki . AviSynth Team . Получено 10 апреля 2013 г.
  4. ^ ab "Модель выполнения скрипта: граф фильтров". AviSynth Wiki . Команда AviSynth . Получено 25 октября 2019 г. .
  5. ^ "Синтаксис AviSynth: управляющие структуры". AviSynth Wiki . Avisynth Team . Получено 21 сентября 2014 г. .
  6. ^ "Свойства клипа". AviSynth Wiki . Avisynth Team . Получено 27 октября 2019 г.
  7. ^ "Script Variables". AviSynth Wiki . Avisynth Team . Получено 14 сентября 2017 г. .
  8. ^ "Convert - Avisynth". AviSynth Wiki . AviSynth Team . Получено 27 октября 2019 г.
  9. ^ ab "Avisynth 3 - мертвый проект?". Форум Doom9 . Получено 2009-06-17 .
  10. ^ "АвиСинт v3" . АвиСинт Медиавиики . Проверено 22 сентября 2019 г.
  11. ^ "AviSynth+". AviSynth Mediawiki . Получено 22 сентября 2019 г.
  12. ^ "Avs2YUV". Akuvian.org . Получено 2011-01-09 .
  13. ^ "avxsynth/avxsynth: Linux-порт Avisynth". GitHub . Получено 16.09.2017 .
  14. ^ "SourceForge.net: VirtualDubMod: Ошибки" . Получено 2009-12-03 .

Внешние ссылки