MAG79 wrote:

Таблицу так и не нашел. Видимо, безвозвратно потерялась при очередной переустановке Windows. Теперь только с нуля по памяти воспроизводить.
Еще актуально?

Конечно, актуально! (я мечтаю увидеть эту таблицу уже более 5 месяцев, чтобы тщательно её изучить и применить, поскольку мне казалось, после моих экспериментов в октябре, что это вообще невозможно реализовать на практике).

http://funkyimg.com/i/2pBUo.jpg

MAG79, всё ещё есть шанс увидеть заветную таблицу?..

MAG79 wrote:

Очень хотел вернуться к этой теме. А раз интерес есть, то и мне вдвойне интересней будет.
Причешу и выложу эту таблицу.

Как там дела?..

MAG79 wrote:

Таблица Excel готова наполовину. Как доделаю - выложу.

Доброе утро. Никаких новостей пока нет?

Надо же, впервые отсюда не пришло уведомление на почту о появлении нового сообщения в теме.

MAG79 wrote:

Скачок наблюдается на 8-м кадре. Это значит, что при выводе 7-го кадра он отличается от 6-го на прогнозируемую величину, а вот 8-ой кадр от 7-го отличается сильнее, чем ожидалось. Т.е. скачок. Я вкладывал именно этот смысл. Посмотрите архив panoram_move.zip, приложенный к сообщению. Нумерация кадров начинается с 0. Может в этом причина разного понимания записи 8j? wink

Спасибо, да, похоже именно из-за этого.

MAG79 wrote:

Таблица Excel готова наполовину. Как доделаю - выложу.

Прекрасно, буду ждать!

MAG79 wrote:

Если самостоятельно не получится разобраться, то помогу с файлом.

Да-да, очень нужна помощь! Я уже прикидывал возможность такой реализации, но поскольку там идет смещение на кадр каждую секунду (для той пары, которая с интервалом 24 кадра), то через X секунд ещё и порядок строк нужно будет менять, т.к. последовательность выделяемых диапазонов кадров тоже будет меняться с течением времени. У этого delta.txt не очень простая структура. Мне вообще кажется, что это нереализуемая задача, а если даже ВДРУГ такое и возможно реализовать, то это скорее всего получится какая-то дико сверхсложная формула в Экселе.

MAG79 wrote:

Насчет прыжка. Он не между 8-ым и 9-ым, а между 7-ым и 8-ым. Вот приготовил анимацию, схематически показывающую смещение кадров обратно к их правильному положению. Может так станет понятней?

В анимациях нет нужды, я предпочитаю статичный набор картинок (это удобнее, нагляднее и главное точнее).
Да и я вообще не жалуюсь на проблемы с пониманием... вот у вас же в предыдущих сообщениях было:

MAG79 wrote:

На выбранном отрезке дубли (d - double) и скачки (j - jump). 3d, 8j, 13j, 22d, 27d, 33j, 37j, 47d, 51d
Приложил архив из 52 кадров и график.

В вашем архиве (panoram_move) выбранного фрагмента видео из 52 кадров указано:
3d, 8j, 13j... [т.е. 3-4 дубли, между 8-9 - скачок, и между 13 и 14 тоже скачок]
Относительно исходных физических кадров (т.е. исходного видео) скачок именно между 8-9, поэтому и возник вопрос, что получается в delta.txt надо учитывать выброшенный ранее (на 3-4) дубль и смещение на кадр, вот тогда с учетом ранее выброшенного кадра уже получится скачок между 7-8.

MAG79
Большое спасибо за скрипт! Только я не очень понимаю, как это применять на практике не для нескольких десятков кадров, а для нескольких сотен тысяч кадров, т.е. каким образом можно задавать необходимую периодичность в delta.txt?
Ведь в вашем примере delta.txt, насколько я разобрался после экспериментов с ним, периодичность не задана вообще, а просто покадрово, вручную по номерам кадров (с предварительным анализом) расписано с какими кадрами, что делать (без учёта последующих многих тысяч кадров):

MAG79 wrote:

В данном случае файл такой:

delta.txt wrote:

Type int
Default 0

R 3 6 100
7 50
13 -50
R 14 21 -100
R 27 31 100
32 50
37 -50
R 38 46 -100
R 51 52 100

P.S. Кстати, на вашем примере прыжок между 8 и 9 кадрами, а в delta.txt указывать надо 7 кадр: "7 50" т.е. там ещё кое-где получается надо учитывать смещение на один кадр (видимо, из-за выкидывание ранее идущего дубля). В общем этот формат значительно сложнее для восприятия и сложнее для редактирования, чем предыдущий вариант с SelectEvery и Interleave (жаль, что его тут никак не использовать).

MAG79 wrote:

Шаблон и правда подтвердился. Есть дубли, есть скачки. Причем парные. Периодичность каждые 24 и каждые 25 кадров.

Спасибо. Это, конечно, замечательно, что я не ошибся с анализом этого видео и подтвердились все найденные мной проблемы в этом видео (хотя было бы и очень странно, если бы не подтвердились, потому что за время многочисленных  экспериментов и попыток по его восстановлению я это видео изучил очень хорошо).
Так а не подскажете, что теперь тут можно сделать? Как я написал в предыдущем комментарии, хотя я нашел и понял все ошибки, но идей как работать с такой периодичностью у меня больше нет. sad

MAG79
Спасибо за ответы.
Ещё маленький вопрос по первому Вашему коду, а для чего там вводилась дополнительная переменная: "orig = last", почему там сразу не использовалась "last"?

MAG79 wrote:

Сэмпл скачаю, погляжу.

Отлично!

P.S. Ещё день спустя как-то само собой пришло понимание почему в своей последней попытке я потерпел неудачу: если бы у меня были дубли в местах скачков (и требовалось бы заменить эти дубли на рассчитанные кадры), то у меня бы все получилось (т.к. не было бы никаких сдвигов по кадрам). Но у меня дубли в одних местах, а скачки в других и если сделать первый этап, т.е. выбросить ненужный каждый 25-й дубль и добавить в нужном месте дополнительный кадр в месте скачка (также с интервалом 25), то это нарушает периодичность второго дубля (который идет с интервалом 24 кадра) в том промежутке между выброшенным дублем25 и добавленным кадром Fix25. Т.е. когда 24 дубль попадает в этот интервал, то там есть сдвиг на один кадр и из-за этого всё нарушается.
С одной стороны хорошо, что я понял из-за чего был сбой в моем варианте, а с другой - вот теперь у меня даже нет никаких идей и предположений каким образом может решаться эта задача. Теперь узнать решение мне ещё интереснее и важнее прежнего. smile

MAG79 wrote:

Можно ли их сократить? Да. Возможен, например, такой вариант: удвоение с прореживанием.

Благодарю! С упрощением теперь понятно.
А всё-таки, насчет упрощения с использованием SelectRangeEvery - его совсем никак не получится применить?

MAG79 wrote:

После удвоения кадров из 24 исходных получится 48 кадров, где каждый четный кадр - исходный, а нечетный - промежуточный.

Я правильно понимаю, что по сути тратятся ресурсы на удвоение кадров для всего видео, а потом выбираются только нужные кадры?
А нельзя делать рассчитывание промежуточных кадров только между двумя необходимыми кадрами? (для увеличения быстродействия)

MAG79 wrote:

Это здорово, что удалось разобраться самостоятельно.

К сожалению, не удалось.

Проведя более подробные тесты я увидел, что нужного результата добиться не удалось. После этого я отредактировал свой комментарий:

Сегодня 19:11:14 (изменено: Bars, Сегодня 20:09:45)

Но как раз именно в этот момент, очевидно, вы писали ответ на первоначальную версию моего комментария и отправили ответ в:

Сегодня 20:15:13

Так что большая просьба ознакомиться с моим сэмплом (4 имеющиеся проблемы я описал в своем первом комментарии), а то у меня уже закончились идеи, где именно искать ошибку.
Примечание: В моем семпле дубли совсем не в тех местах, где скачки, т.е. нужна не простая замена дубля на рассчитанный кадр, а 2 разных действия (выкидывание кадра в нужном месте и добавление кадра в нужном месте).
А целом необходимо выбросить 2 дубля и добавить 2 рассчитанных кадра.

P.S. Очень хочется разобраться где именно ошибка, чтобы научиться нормально "восстанавливать" не только это видео, но и любые другие, имеющие какую-либо четкую последовательность скачков/дублей.

MAG79
Пытался после первого этапа (решение 1-2 проблем), оставшиеся 3-4 проблемы решить (на втором этапе) абсолютно тем же самым способом, только уже со значением clip'а равным не 25, а 24 (ведь тут же нет привязки в исходному fps видео), поначалу даже подумал что всё получилось, но я ошибся, после того как Fix24 пересекается с Fix25 всё идет на так как должно.

P.S. И ещё вопрос, сейчас используется:

f0 = SelectEvery(orig, 4, 0)

и последующие 25 аналогичных строчек.
Но я очень хотел вместо SelectEvery задействовать SelectRangeEvery (всего 2 строчки с SelectRangeEvery заменили бы 24-25 строк с SelectEvery), но для такого варианта я так и не смог найти на что можно заменить функцию вывода Interleave, т.к. чередование тут уже не подходит. А может всё-таки есть способ использовать SelectRangeEvery?

MAG79
Добрый вечер.
Ваш прекрасный код в этом комментарии (отдельное за него спасибо!) очень интересный и полезный, он вдохновил меня на эксперименты с теми видео, которые раньше я считал не подлежащими нормальному восстановлению плавности.

Но тут мне попался фильм с крайне необычным и сложным случаем сочетания дропов и скачков (хоть всё это и имеет чёткую последовательность!), который полностью "восстановить" мне не удалось.
Семпл (видео 25fps, продолжительность 5 минут): http://sendfile.su/1274221

В этом видео 4 проблемы (из них я понял как решать только первые 3 проблемы):
1) 1 дубль - 1 раз каждые 25 кадров

2) 1 скачок (пропуск кадра) - 1 раз каждые 25 кадров
Эти первые 2 проблемы прекрасно решаются по аналогии с тем способом из Вашего комментария чуть выше.

3) 1 дубль - 1 раз каждые 24 кадра
Если бы не существовало 4-й проблемы, то эту проблему можно было бы решить, применив (после предыдущего этапа) выкидывание каждого 24-го кадра (к примеру начиная с 20 кадра) при помощи SelectEvery. Как-то так:

SelectEvery(24,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23)

4) 1 скачок - 1 раз каждые 24 кадра.
Вот здесь я и не знаю как реализовать смещение на 1 кадр каждую секунду, т.е. необходимый сдвиг для вставки в нужное место рассчитанного промежуточного кадра.

andeyut wrote:
Bars wrote:

после этапа объединения полукадров, тоже получается каждый 5-й кадр-дубль

После деинтерлейса хардтелесиненного видео получится точнее 3+2. 3 прогрессивных кадра и 2 бленда. Здесь уже надо было делать IVTC.

Я нигде не писал про применение деинтерлейса, т.к. речь изначально не об интерелейсном, а о прогрессивном видео. Под "этапом объединения полукадров", разумеется, имелся в виду любой способ, позволяющий собрать исходные прогрессивные кадры из полукадров.

MAG79 wrote:

23,976 к/сек, но при этом каждый 4-ый кадр - дроп. Как так могло получиться?

Мне подобное видео уже попадалось несколько раз и как-то даже удалось найти и ознакомиться с исходником, сравнение с которым подтвердило мои догадки: как ни странно, но такое кривое видео получают из вполне стандартных случаев (29,970fps в которых все кадры уже прогрессивные и просто каждый 5-й кадр-дубль, либо опять-таки 29,970fps, в которых после этапа объединения полукадров, тоже получается каждый 5-й кадр-дубль) вследствие использования простого понижения fps (вместо использования алгоритма анализа кадров для поиска и выбрасывания именно дублей), которое просто выбрасывает каждый 5-й кадр (чаще всего нормальный кадр, если только случайно не совпадает, что этот кадр как раз дубль), который дублем не является, что дает из исходных (4+1) кадров, соответственно, (3+1) кадров (3 нормальных +1 дубль).

Chainik wrote:

"по братски для своих" вообще бесплатно, если ты не заметил big_smile

Если еще можно, то очень прошу выслать лицензию. Спасибо.

MAG79
В скрипте GameDropFix_v4 сохранены все 8 вариантов замены одиночных, двойных и тройных дропов. Функциональность из скрипта не удалялась. Быстродействие не замерял, но вполне приемлемое. Тут уж либо быстродействие, либо универсальность
Ну просто чуть выше писали:

MAG79 wrote:

Проще взять GameDropFix, повырезать из него лишнее...

Т.е. возможно всё-таки планировалось повырезать лишнее, вот я и решил уточнить этот момент.

Ошибочное определение дропов настраивается параметрами min_move и max_stop (пкс). Первый параметр - минимальное движение в кадре, которое еще распознается за движение, второй - максимальное движение в кадре, который признается дропом при наличии рядом кадров с движением, быстрее текущего в move_idx раз.
Спасибо, в случае чего - теперь буду знать что попробовать подкрутить.

Но обе претензии несущественны, т.к. первая неожиданно  сокращает количество даже такого большого количества рядом расположенных дропов, а вторая частично ловит и заменяет смешанные кадры из двух соседних, частично ловит приостановки проводки камеры оператором в обоих случаях сглаживая рывки и опять же делая видео плавнее.
Да, согласен, такое несущественно. Меня лично больше волнуют не определившиеся пропущенные дропы, если таковые будут, но думаю теперь всё будет проще, когда известно какие параметры настраивать. При пользовании DoubleDropFix.avs (второй версии), именно с такой проблемой я столкнулся на той серии сериала, что я приводил ссылку на рутрекер чуть выше (после удаления циклических дублей, там оставались местами единичные дропы, но сильные артефакты сжатия похоже помешали нормальному детекту дропов (соседние одинаковые кадры отличались только сильными артефактами сжатия и видимо распознались как движение)

MAG79
Адаптировал скрипт GameDropFix
Шикарно, спасибо! Завтра приступлю к тестированию (и в дальнейшем буду применять для всего материала с дропами), если найду какие-то недочёты - отпишусь здесь.

под любой размер кадра, а не только 1280x720, убрал необходмость кратности сторон кадра блокам 32x32.
Не упомянули про выбрасывание из скрипта лишнего, ненужного для обработки неигрового видео, чтобы улучшить быстродействие - не выбрасывали лишнее?

На сэмпле работает почти идеально.
А чего именно до идеала не хватает?

MAG79
Для начала - под конкретный файл. А дальше с каждой правкой скрипт будет все универсальней. Сразу всего не учтешь
ОК, "кривой" видеоматериал мне попадается относительно часто, так что будет на чём экспериментировать.

На сэмпле можно попробовать.
Отлично, буду ждать!

Но у меня встречный вопрос: неужели нет более качественной копии этого фильма на DVD/VHS/еще где-либо без выпавших кадров?
Я всегда стараюсь найти самое наилучшее качество (Blu-ray,HDTV,DVD9,DVD5), а  когда исходников не найти, нахожу и скачиваю все возможные варианты рипов, чтобы выбрать наилучший (по всем параметрам). Но иногда (преимущественно для редких фильмов и сериалов до 2000-х годов) выбирать просто не из чего (ни на закрытых трекерах, ни в др.местах, типа usenet), есть только один кривой рип с дропами. Без альтернатив. Разумеется, заниматься перекодировкой с фиксом дропов - это самая крайняя мера, т.к. просто нет другого выбора.

MAG79
Таблица сравнения этих двух скриптов.
Спасибо, отличная табличка, теперь все хорошо видно (в таблице, кстати в паре мест лишняя единичка закралась и получилось Fix133 вместо Fix33)
Преимуществ у игрового скрипта действительно много, даже для фикса двойных дублей вариант -Fix50&Fix50 гораздо интереснее, чем Fix33&Fix66

Качество интерполяции выше, качество идентификации дропов выше. Вариантов замены больше. Это приводит к лучшей плавности на выходе.
Мне все больше хочется перейти на использование игрового скрипта smile
Вот только:
Текущее ограничение: скрипт настроен для видео с разрешением 1280x720 и частоты 60 к/сек. Под видео другого характера возможны ошибки из-за некратности сторон видео блокам 32x32 и может потребоваться перенастройка параметров, отвечающих за граничные значения обнаружения движений.
А это ограничение можно убрать? Снизить кратность, например, до 4x4 (я в лучшем случае встречаю кратность 16x16, а уж 32x32 вообще почти никогда не попадается) и т.д., т.е. сделать более универсальным? (DoubleDropFix был в принципе достаточно универсален и подходил практически для любого видео)

Проще взять GameDropFix, повырезать из него лишнее и настроить под конкретный видеофайл.
Это один раз настройка под конкретный видеофайл или под другие потом тоже что-то перенастраивать надо будет? Хотелось бы что-то универсальное, чтобы с любым видеофайлом хорошо работало.
Поможете с этой задачей? (из видеоматериала с дропами, кроме семпла выше и этой серии сериала, имеющей кроме циклических дублей, ещё и кучу дропов с различным скачками)

Если еще проще: то только настроить, ничего не вырезая.
Если не вырезать лишнее, то как я понимаю это скажется на скорости работы скрипта из-за лишней бесполезной нагрузки?

MAG79
Да
А какие тогда недостатки (в плане качества, а не скорости) имеет GameDropFix_v3 в сравнении с DoubleDropFix_v3? (если применять для кино продукции, а не для игрового видео)
Если интересует качество, то вроде как получается, что GameDropFix_v3 лучше и универсальнее (разве что может у него другие настройки чувствительности определения дропов, либо какие-то другие параметры настроенные под игровое видео?).

P.S. А раз анализ движения уже реализован в GameDropFix_v3 может можно его тогда добавить и в DoubleDropFix_v4? (если не сложно)

MAG79
Была проблема в логике скрипта.
Скрипт по-разному искал кадры-дубли для текущего и соседних с ним кадров, отсюда появлялись половинки двойных замен кадров-дублей: Fix33 без следующего за ним Fix66, либо Fix66 без предшествующего Fix33.

Спасибо за пояснение.

Модифицировал скрипт DoubleDropFix второй версии. Организовал конвейер по опыту скрипта GameDropFix_v3: добавил промежуточный клип кадров к замене drop_clip.
Для работы скрипта теперь требуется еще и плагин MaskTools2.
Третья версия DoubleDropFix_v3.avs

Огромное спасибо за доработку скрипта! Завтра займусь тестированием и заодно сравню с результатом работы GameDropFix_v3.

разные пропуски в том числе и раннее появление кадра с последующим повтором
А что имелось ввиду под "ранним появлением"? 2-ой случай (скачок, потом дроп) описанный в этом посте или что-то другое?

В этом случае будет уместным анализ движения в местах выпавших кадров, поэтому для такого видео вполне можно применить скрипт GameDropFix_v3. Результат будет плавнее, чем после DoubleDropFix_v3.
А за счет чего в данном случае будет плавнее с GameDropFix_v3?
Если я правильно понял, то DoubleDropFix_v3 умеет фиксить только обычные дропы (fix50), если говорить об одиночных, а GameDropFix_v3 за счет анализа движения умеет определять и делать выбор между фиксом обычного дропа (fix50) и обратного дропа (-fix50). Т.е. для данного случая более высокая плавность будет достигнута за счет фикса обратных дропов (там где нужно) или по другой причине?

MAG79
Здравствуйте.
Есть вопрос по DoubleDropFix, а скорее проблема sad
Небольшой тестовый семпл (исходник + после обработки DoubleDropFix+на особо интересные проблемные места скрины с точным временем на них): http://sendfile.su/884431

Там вот никак не могу понять почему так сильно сбоит дропфикс, например, 1-ый пример (на скринах приложенных к архиву выше) это:
исходник : кадр1 - кадр2 - дубль - кадр4 - кадр5 (на нём смена сцены)
результат: кадр1 - кадр2 - Fix33* - кадр4 - кадр5
*Причем этот Fix33 построенный явно между кадрами 4 и 5, и как следствие получается заглядывание в будущее и перемигивание

2-ой пример:
исходник : кадр1 - кадр2 - кадр3 - дубль - дубль - кадр6 (на нем смена сцены)
результат: кадр1 - кадр2 - кадр3 - Fix33* - дубль - кадр6
*Тут Fix33 построен между кадрами 3 и 6, т.е. правильно, если бы ещё вместо второго дубля был Fix66 - было бы отлично, а так опять имеем перемигивание sad

Ну и третий пример на скринах, просто единичный замененный кадр, но почему-то с индикацией Fix66, т.е. и тут что-то пошло не так.

P.S. Перепробовал различные декодеры (LAV, ffdshow) с различными вариантами открытия в avs-скрипте: DSS2, ffvideosource, AVISource - безрезультатно

MAG79 wrote:

Хотя вручную это конечно все исправляется.

http://www.svp-team.com/forum/misc.php?item=1826

Я убрал четные кадры и заменил их интерполированными. Т.е. я удалил половину фаз движений фона, пожертвовал ими, чтобы интерполировать движения персонажа.

А не поделитесь кодом avs-скрипта, которым такое сделали?

P.S. Судя по индикации Fix-50 - использовалась, видимо, модификация этого скрипта.

MAG79 wrote:

Для видео есть специализированные библиотеки и скрипты для удаления циклических кадров-дублей. Например, TIVTC.

Я в курсе про TIVTC и пользуюсь им по назначению именно для циклических дублей.
Но DropFix из текущей темы мне пригождается именно для удаления хаотично расположенных дублей (или как в том варианте, что мы обсуждали в начале этой темы) или в качестве дополнения, после отработки TDecimate, т.к. попадаются фильмы где при смене сцен последовательность меняется, и как итог после смены сцены остаётся дубль
(что-то подобное описано тут).

Если я правильно понял, то мне стоит продолжить пользоваться DoubleDropFix.avs, а переходить на GameDropFix_v3 нет никакого смысла?