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)
В результате мы имеем четыре неповреждённых кадра — что лучше, чем только три — и один смешанный. Мне так показалось, что этот вариант выглядит приятнее.
Вообще же рывки врядли получится задавить полностью. Фотоаппарат не лучшая видокамера, особенно если без стабилизации — руки дрожат, в кадре всё время динамика какая-то, особенно если съёмка на ходу, с резкими панорамами, ещё и АРУ без конца прыгает. Тут как не выпендривайся, при конвертации частоты кадров часть информации пропадает, так что все дрожания будут сильнее выражены и неравномерней.
Поковырялся с видео со своего фотоаппарата, он тоже прогрессив 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)
В результате мы имеем четыре неповреждённых кадра — что лучше, чем только три — и один смешанный. Мне так показалось, что этот вариант выглядит приятнее.
Вообще же рывки врядли получится задавить полностью. Фотоаппарат не лучшая видокамера, особенно если без стабилизации — руки дрожат, в кадре всё время динамика какая-то, особенно если съёмка на ходу, с резкими панорамами, ещё и АРУ без конца прыгает. Тут как не выпендривайся, при конвертации частоты кадров часть информации пропадает, так что все дрожания будут сильнее выражены и неравномерней.