Alex_Dragon
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ze Bolacha, ну и задал ты головоломку. Хотя арифметика тут и простейшая, пока разложл все кадры — чуть мозгами не двинулся. Поковырялся с видео со своего фотоаппарата, он тоже прогрессив 30 fps выдаёт. В принципе всё просто. Суть в чём: 25 из 30 мы можем получить выкинув каждый шестой кадр. Но это могут быть заметные рывки, надо как-то потери «размазать» по последовательности кадров. Первая мысль — сблендить либо соседние кадры, либо последовательности кадров. В принципе, как я теперь понял, именно это и делает встроенная функция ConvertFPS. Но мы можем пойти и другим путём, более телевизионным. Для этого нужно разбить видео на поля и работать с ними, выкидывая не кадр, а два поля, после чего обратно собрать в целые кадры. Например, мы чётное поле четвёртого кадра таким образом смешиваем в нечётным полем пятого кадра, а чётное поле пятого кадра с нечётным шестого, при этом выкидывая из них собственные поля, нечётное четвёртого и чётное шестого. В результате мы получим сдвиг влево на кадр и будем иметь последовательность из трёх нормальных кадров и двух чересстрочных. После чего необходимо применить функцию FieldDeinterlace плагина Decomb. Это фактически стандартный для Avisynt'а плагин удаления чересстрочности, довольно подробно описанный в документации, в том числе и в русском варианте. По умолчанию он делает блендинг полей, то есть мы получим два смешанных прогрессивных кадра — чего и добиваемся. Поскольку видео у нас прогрессивное, то полукадры в кадре у нас будут практически идентичными, а значит мы можем не особо морочить себя геморроем с соблюдением чётности, а просто отбрасывать ближайшие ненужные поля. Выглядеть это будет примерно так: AviSource ("XYZ.AVI") Separatefields() # бьём на поля SelectEvery(12, 0,1,2,3,4,5,6, 8,9, 11) #пропускаем 7 и 10 поле Weave() # складываем кадры обратно FieldDeinterlace(full=false) # параметр full задаёт обработку только тех кадров, которые Decomb сочтёт чересстрочными, не обрабатывая остальные; находит интерлейсы он хорошо, а в нашем случае они будут достаточно ярко выражены. В общем-то, тут всё равно, откуда начинать выкидывать, с таким же успехом можно убрать 1 и 4, 3 и 6 или 5 и 8 поля. Но в принципе это можно cделать и по-другому, сблендить только два смежных кадра, выкинув у каждого по полю: AviSource ("XYZ.AVI") Separatefields() SelectEvery(12, 0,1,2,3,4,5,6,7,8, 11) #пропущены поля 9, 10 Weave() FieldDeinterlace(full=false) В результате мы имеем четыре неповреждённых кадра — что лучше, чем только три — и один смешанный. Мне так показалось, что этот вариант выглядит приятнее. Вообще же рывки врядли получится задавить полностью. Фотоаппарат не лучшая видокамера, особенно если без стабилизации — руки дрожат, в кадре всё время динамика какая-то, особенно если съёмка на ходу, с резкими панорамами, ещё и АРУ без конца прыгает. Тут как не выпендривайся, при конвертации частоты кадров часть информации пропадает, так что все дрожания будут сильнее выражены и неравномерней. | Всего записей: 422 | Зарегистр. 05-01-2002 | Отправлено: 05:19 25-06-2008 | Исправлено: Alex_Dragon, 05:23 25-06-2008 |
|