AssumeFPS

AssumeFPS (clip, float fps, bool "sync_audio")
AssumeFPS (clip, int numerator [, int denominator], bool "sync_audio")
AssumeFPS (clip1, clip2, bool "sync_audio")
AssumeFPS (clip, string preset, bool "sync_audio")

Фильтр AssumeFPS изменяет частоту кадров без изменения их числа (в результате видео воспроизводится быстрее или медленнее). Он устанавливает только параметр частоты кадров.
Если sync_audio - true (истина), то в той же степени изменяется и частота аудио-отсчетов, сдвигая высоту результирующего звука.

Это так же метод изменить только одну частоту аудио-отсчетов.

В v2.55, если указан clip2, частота кадров клипа clip1 будет подстроена для совпадения с частотой клипа clip2. Это полезно когда вы желаете сложить (склеить) два клипа с немного различной частотой кадров.

В v2.57, поведение в отношении частоты кадров немного изменено. Главный вопрос в том, что пользователям разрешено указывать частоту кадров вещественной (десятичной дробью), а NTSC (FILM и Video) и PAL стандарты требуют отношение в качестве частоты кадров. Кроме того, AviSynth экспортирует частоту кадров как отношение, так что когда указана десятичная дробь, она будет преобразована в отношение. Отношения в стандартах даны как 24000/1001 для 23.976 (FILM) и 30000/1001 для 29.97 (Video). При указании этих десятичных дробей, они экспортируются из AviSynth как отношения, но не как стандартные отношения. Одна из причин этого то, что эти десятичные дроби являются приближенными (помните что 24000/1001 = 23.9760239760...), так что как бы AviSynth знал, как выбрать корректное отношение? Чтобы преодолеть эту проблему, пользователь может использовать AssumeFPS(24000,1001) или просто AssumeFPS("ntsc_film").

Другой проблема в том, что преобразованные десятичные дроби были (в v2.56 и ранее) экспортированы с 64 битной точностью, приводя к очень большим числителям и знаменателям, приводя некоторые проигрыватели к отказу. Чтобы преодолеть это, разумное вещественное-в-отношение преобразование добавлено внутренне, и теперь частоты кадров аккуратно аппроксимируются отношениями малых чисел. Например, AssumeFPS(23.976) теперь превращается в AssumeFPS(2997,125) что может быть проверено с Info.

Синонимы (Presets):

стандарт числитель (numerator) знаменатель (denominator)
"ntsc_film" 24000 1001
"ntsc_video"  30000 1001
"ntsc_double" 60000 1001
"ntsc_quad" 120000 1001
"ntsc_round_film" 2997 125
"ntsc_round_video" 2997 100
"ntsc_round_double" 2997 50
"ntsc_round_quad" 2997 25
"film" 24 1
"pal_film" 25 1
"pal_video" 25 1
"pal_double" 50 1
"pal_quad" 100 1

Примеры преобразования PAL +4% Telecine :

AVISource("FILM_clip.avi") # получить клип 24 к/с.
LanczosResize(768,576)     # Изменить размер к размеру кадра PAL с квадратными пикселами.
AssumeFPS(25, 1, true)     # Изменить частоту кадров к PAL, так же подстроить аудио.
SSRC(44100)                # Восстановить частоту аудио-отсчетов к стандартному значению.

+4% ускорение обычно применяется для отображения фильма с 24fps на PAL телевидении. Небольшое увеличение частоты и темпа с готовностью принимается смотрящими материалы PAL.

ChangeFPS

ChangeFPS (clip, float fps, bool "linear")
ChangeFPS (clip, int numerator [, int denominator], bool "linear")
ChangeFPS (clip1, clip2, bool "linear")
ChangeFPS (clip, string preset, bool "linear")

ChangeFPS изменяет частоту кадров удалением или копированием кадров.

До v2.05, видео урезалось или дополнялось для сохранения скорости и времени воспроизведения (число кадров не менялось). В более поздних версиях, поведение было изменено и число кадров увеличивается или уменьшается как в ConvertFPS.

В v2.54, к Changefps добавлена опция linear = true/false. Она заставит AviSynth запрашивать кадры в линейной форме (манере), когда кадры пропускаются. Значение по умолчанию true.

В v2.56, если присутствует clip2, частота кадров клипа clip1 будет подстроена в соответствии с частотой клипа clip2.

В v2.57, поведение в отношении частоты кадров немного изменено. Смотри AssumeFPS.

Пример преобразования PAL->NTSC:

AVISource("PAL_clip.avi")        # Получить клип.
Bob(height=480)                  # Разделить поля и интерполировать их к полной высоте.
BicubicResize(640,480)           # Изменить размер к NTSC с квадратными пикселами.
ChangeFPS(60000, 1001)           # Преобразовать частоту полей к NTSC их дублированием.
SeparateFields.SelectEvery(4,0,3)# Отменить Bob, четное поле первым. SelectEvery(4,1,2) для нечетного первого поля.
Weave                            # Закончить отмену Bob.

Эффект аналогичен 3-2 telecine pull down. Постоянные зрители PAL материалов могут заметить подрагивание движения, которое зрители NTSC материалов легко игнорируют как и для обработанного по принципу telecine фильма.

ConvertFPS

ConvertFPS (clip, float new_rate, int "zone", int "vbi")
ConvertFPS (clip, int numerator [, int denominator], int "zone", int "vbi")
ConvertFPS (clip1, clip2, int "zone", int "vbi")
ConvertFPS (clip, string preset, int "zone", int "vbi")

Фильтр делает попытку преобразовать частоту кадров клипа clip к значению new_rate без выкидывания или вставки кадров, предлагая плавное преобразование с результатом, аналогичным автономным преобразовательным устройствам. Выход будет (почти) той-же длительности, как и clip, но число кадров изменится пропорционально соотношению целевой и исходной частот кадров.

В v2.56, если присутствует clip2, частота кадров клипа clip1 будет подстроена в соответствии с частотой клипа clip2.

В v2.57, поведение в отношении частоты кадров немного изменено. Смотри AssumeFPS.

Фильтр имеет два режима действия. Если отсутствует опциональный аргумент zone, он взвешенно смешивает (blend) смежные видео-кадры с коэффициентом смешивания пропорциональным относительному хронометражу кадров ("Режим смешивания", blend mode). Если zone присутствует, он переключится с одного видео-кадра к следующему ("Режим переключения", switch mode) всякий раз, когда начинается новый кадр источника, т.е., обычно где-то в середине целевого кадра. Режим переключения предполагает, что результат будет показан на TV где каждый кадр сканируется сверху вниз. Параметр zone определяет высоту переходной области в которой текущий кадр будет подвергнут смешению со следующим.

Режим смешивания вызовет заметное, хотя и слабое, размытие движения. Это - типичный артефакт преобразования частоты кадров, и также может быть виден на коммерческих видео-кассетах и в телевизионных программах. При работе с чересстрочным видео, важно позволить фильтру работать на отдельных полях, но не на чересстрочных кадрах. (См. пример внизу)

Режим переключения - это попытка избежать размытия движения, но это достигается ценой небольшого мерцания и артефактов движения. Горизонтальное и вертикальное панорамирование может показать небольшое дрожание. Ещё кадры при таком преобразовании показывают "ломаные" или "кривые" вертикальные линии в сценах с движением. Переход от сцены к сцене может произойти в середине кадра. Тем не менее, результат выглядит менее размытым, чем в "Режиме смешивания".

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

Преобразование частоты кадров по сути сложно. Этот фильтр реализует два обычных способа, используемых коммерческими,  полу-профессионального (Prosumer) уровня системами преобразования. Результат обычно вполне хорош. Более сложные системы включают алгоритмы интерполяции движения, что сложно получить правильно, но, если сделано верно, приводит к результатам высшего качества.

Отснятый материал, преобразованный этим фильтром, не должен быть преобразованным вновь. Размытость нарастает быстро при последовательных преобразованиях.

Аудио-данные не затрагиваются этим фильтром. Звук остаётся синхронизированным, хотя длина аудио-данных может немного отличаться от видео-данных после преобразования. Это из-за того, что выход может содержать только целое число кадров. Этот эффект более заметен для коротких клипов. Различие в длине должно быть проигнорировано.

Параметры:
new_rate Целевая частота кадров. Может быть целым, или числом с плавающей точкой. В Режиме Смешивания new_rate должна быть как минимум 2/3 (66.7%) от частоты кадров источника, или произойдет ошибка. Это сделано для предотвращения пропуска кадров. Если вам надо замедлить частоту кадров более этого, используйте Режим Переключения.
zone (Опциональный) Если указан, переводит фильтр в Режим Переключения. Целое число более или равное нулю. Если 0, фильтр предпримет жёсткое переключение, т.е., немедленно покажет следующий кадр ниже линии переключения. Если больше нуля, указывает высоту (в линиях) области перехода, где один кадр плавно переходит в другой. zone=80 производит хороший результат для полноразмерного видео (480/576 активных линий). Переход делается таким же образом, как и в PeculiarBlend(). zone должен быть менее либо равным числу линий целевого кадра. Это обычно 5/6 или 6/5 высоты целевого кадра, т.е., несколько сотен линий. Произойдет ошибка, если выберется большее значение.
vbi (Опциональный) В режиме Переключения, указывает что фильтр должен осуществлять коррекцию хронометража для вертикального интервала гашения (Vertical Blanking Interval). Целое число больше нуля, показывает высоту VBI целевого кадра, в линиях. Обычно vbi=49 для PAL и VBI=45 для NTSC, но эти значения не критичны. Игнорируется в Режиме Смешивания.

Пример преобразования NTSC->PAL:

AVISource("NTSC_clip.avi")       # Получить клип
Bob(height=576)                  # Разделить поля и интерполировать их к полной высоте.
BicubicResize(768,576)           # Изменить размер к PAL с квадратными пикселами. (Используйте 720,576 для CCIR.)
ConvertFPS(50)                   # Преобразовать частоту кадров к PAL, используя Режим Смешивания.
SeparateFields.SelectEvery(4,0,3)# Отменить Bob, четное поле первым. SelectEvery(4,1,2) для нечетного первого поля.
Weave                            # Закончить отмену Bob.

Этот пример также работает с основанным на кадрах NTSC материалом, даже с фильмами (кинокартинами), обработанными по принципу telecine. Для кинофильмов, однако, вы получите лучшие результаты, используя фильтр обратного telecine и ускоряя частоту кадров с 23.976 до 25fps.

Не все значения параметров проверяются на осмысленность.

Изменения:

v2.57 добавлена опция preset; изменено поведение частоты кадров; YV12 и RGB поддежка для ConvertFPS, исправлен фактор смешивания
v2.56 добавлена опция clip2 в ChangeFPS, добавлена AssumeScaledFPS
v2.55 добавлена опция clip2 в AssumeFPS
v2.54 добавлена linear=true/false к ChangeFPS

$English Date: 2006/12/06 20:33:16 $
Русский перевод 26.05.2005 mitra anime@mdv.vrn.ru
Дополнения 10.04.2006-06.12.2006 Fizick http://avisynth.org.ru