В данном случае нет. т.к. в результате перекодирования дубль кадры стали не дубль кадрами. Это видно если смотреть по стоп-кадру, существуют микро-изменения в структуре.
Из-за этих микро-изменений в менее динамичных сценах, gamedropfix распознаёт их полноценными кадрами.

А чтобы они были полноценными дублями, их необходимо повторно сделать дублями, в этом случаее gamedropfix сработает в 99.99% (кроме ну ооочень медленных сцен).
А в некоторых случаях, когда дубль-кадры являются неотъемлемой частью видеоряда, наоборот перестараться.

Планку по замене можно было-бы поднять до 100% (и без перестараний), если бы gamedropfix умел использовать таймкоды, тогда данный поток необходимо былобы переводить в VFR... (но это уже другая история)

Для данного семпла необходимо составить скрипт, который удаляет данный дубль-кадр, заменяя его предыдущим, тогда gamedropfix подхватит такие (не перекодированные) кадры.

Фикс 24 кадров за 2 прохода по 4ре кадра:
1 pass: X AAAA Y
2 pass: X ooooAooooAooooAooooAoooo Y

X и Y - опорные, нормальные кадры.
А - кадры 1го прохода
о - кадры 2го прохода
зелёные - мин.артефакты [макс. 4ре кадра]
желтые - сред.артефакты [макс. 8мь кадров]
красные - макс.артефакты [макс. 12ть кадров]

там где ??? я не смог подобрать оптимального сочетания кадров.

В пирамиде я указал наиболее правильную расстановку кадров для 2го прохода в соответствии с количеством дропов которые необходимо заменить.


p.s. т.к. тема разрослась на 2'ю страницу, подведём итог первой, для тех кому лень читать предыдущую.
На данный момент есть такой список пожеланий:
- использование файла таймкодов.
- 2pass режим для фикса более 3'ёх (или 4'ёх кадров), где первый проход обязан быть супер-точным.
- 4'ре кадра для наиболее лучшего фикса в 2pass режиме.

При 2pass режиме, сильно артефачит будет только в 'о'-кадрах которые находятся между 'А'-кадрами 1го прохода. (макс. 12 кадров)
Боковые 'о'-кадры второго прохода дадут меньше артефактов в виду того, что будут опираться на оригинальный кадр.

Но повторюсь, если будет выбран 2pass режим, то 1 проход обязан быть супер-тяжёлым, чтобы максимально снизить артефакты для 2го прохода. (это прямо как и у кодеков, только там 1 проход быстрый, второй тяжелый)

Можно как доп.опцию на свой "страх и риск", если вариантов расширить до много-много кадров не найдётся ( всё лучше чем ничего wink )

Дополнил 'пирамиду' на 4'ре дропа, она более оптимальна и при этом востановит до 24 дропов.

Сегментированный подход, да подтверждаю, идейка так себе, дальше её смысла мозолить нет.

Вот как пример можно сделать 63 дроп фикса используя сегодняшний dropfix

X - AAA - Y [3 drop fix]
X - bbb A bbb A bbb A bbb - Y [15 drop fix ]
X - ccc b ccc b ccc b ccc A ccc b ccc b ccc b ccc A ccc b ccc b ccc b ccc A ccc b ccc b ccc b ccc - Y [63 drop fix]

только первый заход необходим супер точным и тяжёлым, на 2ой и 3ий заходы точность можно сбавить в угоду скорости.

---

вот что у меня из этого получилось: https://cloud.mail.ru/public/Ju5u/op5nu6MPA
25fps > 3fps > 9fps(dropfix) > 18fps(dropfix) > 25fps(dropfix)

Из 3фпс в 25 фпс! 22дропа в секунду было восстановлено вполне более-менее если сцена не особо динамична.
Особенно если сравнивать 3 и 25дропфикс, прямо как небо и земля.

Если так прикинуть, то можно сотавить такую модель востановления за 2 захода используя только по три кадра:

A 
AA 
AAA
oAAo 
oAoAo 
oAooAo 
oAoAoAo 
ooAooAoo 
ooAoAoAoo 
oooAooAooo 
ooAooAooAoo 
????????????
oooAooAooAooo 
??????????????
oooAoooAoooAooo 


Где А - первый заход, b - второй.

Но вот если была возможность фикса хотябы 4х кадров, то, всё было бы чутка получше, тогда на фикс 5+ кадров уходили бы все 4ре кадра из 1го прохода, плюс всё выглядело более правильно растянутым:

A
AA
AAA
AAAA
AAbAA
oAAAAo
oAAoAAo
oAoAAoAo
oAoAoAoAo
ooAoAAoAoo
ooAoAoAoAoo
ooAoAooAoAoo
ooAooAoAooAoo
ooAooAooAooAoo
ooAooAoooAooAoo
oooAooAooAooAooo
oooAooAoooAooAooo
oooAoooAooAoooAooo
oooAoooAoooAoooAooo
oooAoooAooooAoooAooo
ooooAoooAoooAoooAoooo
ooooAoooAooooAoooAoooo
ooooAooooAoooAooooAoooo
ooooAooooAooooAooooAoooo

В этом случае уже 24 фикс кадров за 2 прохода, я думаю такого будет вполне достаточно для 99% VFR файлов.


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

При сегментированном подходе необходимо создавать новый файл таймкодов и мюксировать в контейнер новый поток с использованием нового файла таймкодов.

т.е. производится VFR to FixVFR, но необходимо чтобы этот плагин создавал новый файл таймкодов для нового потока, и уже используя его мюксовать FixVFR.

Ибо, что такое VFR: VFR, это тот-же самый CFR, но у которого межкадровый фпс задан для каждого кадра.

т.е. не важно сколько будет fps у полученного из ависинта потока, всё равно таймкод-файл исправит его как надо.

Ну както так:
VFR > extract(VFR) > input(CFR) > segment dropfix (VFR>CRF , in-timecodes , out-timecodes) > avisynth(CRF) > mkvmerge(CRF,out-timecodes) > FixVFR

[ extract(VFR) > input(CFR) ] - можно заменить на DSS(convertfps=false), ибо дубли должен делать dropfix исходя из макс.фпс в сегментах.

UPD: попробывал вручную сделать такой метод сегментированного дропфикса, ничего хорошего в итогде не получил.
Куски меньше дергатся не стали, но дергатся зато стали более одинаково "гладко" т.ч. да, сегментированный подход, особо сильного профита не даст, нужно смотреть в сторону увеличения 3х кадров.

Хотя если этот сглаженный сегмент открыть с более высоким fps чтобы появились дубли, то его можно еще раз сгладить, тем самым получаем 3+3..+3 пока не достигнем верхней планки фпс'а.
К примеру для преобразования 5фпс в 30фпс, необходимы 3 прохода: 5 > 15(5*3) > 30(15*2)

Кстати, в некоторых VFR'ах где у контейнера не указан max.fps (например у дампов mpeg-ts с перископа, да и в остальных случаях когда данное значение хоть и указано но не достигается), необходимо высчитывать максимальный фпс:
Делается, это просто, опять таки через файл таймкодов:
1000 делим на (значение вычесть пред.значение), получим межкадровый фпс.
Из получившегося массива находим максимальное, но которое не будет больше 30, 60 (ибо могут быть быстрые кадры с 1000fps)

В последующем, при открытии потока с найденной частотой кадров, VFR будет преобразован к более правильно-единой частоте кадров, для того, чтобы не было лишних дублей для GameDropFix'a.

По сути делается, это через эксель, но неплохо бы иметь такой-же правильный подход к преобразованию VFR to CFR на автоматике и в самом ависинте.



К примеру, зачем уплавнять VFR до 30fps, если поток имеет максимум ~27fps т.е. три якобы 'лишних' кадра GameDropFix посчитает дропом, когда как мог-бы 'дропфикснуть' уже 24fps, но увы 30fps(минус три) планка, и скрипт дропфиксит уже нормальные кадры hmm
А на следующем этапе (по желанию) эти 27fps уже CFR, можно спокойно поднять до ровных 30fps.

--- --- ---

Исходя из первого возникает еще одна идейка, но куда сложнее, сегментированный дроп фикс:

Плагин проводит анализ файла таймкодов, и на основе него смотрит изменения в частоте кадров, в соотвецтвии с максимальным межкадровым фпс,
и если за 1 секунду времени, на взятом промежутке частота кадров намного ниже межкадрового фпс, то межкадровый фпс для данного промежутка вычисляется дополнительно и в соответствии с ним производится дропфикс.
т.е. производится VFR to FixVFR, но необходимо чтобы этот плагин создавал новый файл таймкодов для нового потока, и уже используя его мюксовать FixVFR.

Схематичный график:
http://s019.radikal.ru/i602/1608/8e/f96facbdb445.png


p.s. Чувствую, с моими идеями, просто avsi файлом не обойтись, тут уже на целый dll тянет wink

Попробуйте, я думаю это должно дать как минимум выигрыш в скорости, т.к. идёт замена поиска на уже готовую модель.
Ну еще, можно посоветовать реализовать опционал по замене овер 20 дублей, - полезно на VFR где дропы идёт по секунде и более.

p.s. если интересно, могу пособирать различных VFR'ов, есть даже такие дампы, в которых поток меняет размер картинки в ходе проигрывания, с ними только ffvideoSource более-менее нормально работает, а всякие dss и libav либо крашаться либо выдают непоймичто.

Я тут конечно нашел плагин по преобразованию VFRtoCFR с использованием файла таймкодов.
оригинал http://forum.doom9.org/showthread.php?t=165045
пересборка под новый ависинт: http://forum.gleitz.info/showthread.php?47538

Но он всё время ругается на неправильный файл таймкодов :\
хотя пробывал делать его и через ffmpeg и через mkvmerge->mkvextract

UPD: получилось извлечь правильный для VFRtoCFR файл таймкодов, нужно было указать vsync 0
ffmpeg -vsync 0 -i file -f mkvtimestamp_v2 timeccodes.txt

Вот теперь, кажется(нужно проверять вручную) все кадры на месте + GameDropFixv5 так-же работает tongue

UPD2: VFRtoCFR все-же с косяком, обрезал длину видео по времени равной если сорс открыть как CFR ... т.е. требует доработки.

Я к тому, что использование directshowsource, directshowsource2, и прочих инпутов напрямую с контейнером, иногда может дропать кадры на проблемных VFR, в отличии от извлеченной видеодорожки с последующим подключеннием таймкодов на мюксировании.
Но, такой способ не даёт работать GameDropFix'у т.к. дублей там не будет.

Потому, есть пожелания на шестую версию - прикрутить использование файла таймкодов
Ну можно еще и пресеты сложности обработки, тоже прикрутить roll

Есть примеры файлов, но они так сказать 18+ если через личку скину.

MAG79 wrote:

Может есть кусок такого видео, чтобы именно с ним тренироваться?

Ну посути такие куски можно сделать на подавляющем большинстве компьютеров ...
держите: https://cloud.mail.ru/public/8L99/oDc9VB78z
Bandicam, VFR mode, locked 30fps max.

И запись 3dmark'a, со счетчиками кадров, фпс и времени, для удобства.
https://cloud.mail.ru/public/J7a5/LXhzMDafA

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

rtmp поток как мне кажется сложнее, если судить по таймкодам из mkv2vfr, т.к. он почти никогда не достигает номинальной, а порой даже перескакивает её.

Схематичные графики:
rtmp: http://s020.radikal.ru/i716/1608/10/83fc960e91e7.png
game: http://s020.radikal.ru/i703/1608/f2/d8fdb54711e8.png

---

Общая задумка - подать на вход видео с дублированием кадров для соответствия времени (2-ой способ). Вот как раз эти дубли и станут исходником для замены их промежуточными кадрами. Надо будет только подготовить правильный файл с временными метками для замены.

1. способ работает когда на инпуте у плагина извлеченная raw дорожка. (FFVideoSource в этом более всеядный, в особенности rtmp потоков)
2. способ работает например у directshowsource + lavfilters, а на инпуте контейнер с vfr.

там файл захвата rtmp потока,
и vfr созданный вручную через замедление и ускорение видео.

https://cloud.mail.ru/public/L88H/nAKapzKSm

Немного для справки. AviSynth не умеет vfr в принципе и все инпут-плагины открывая VFR преобразуют его в два вида СFR:
- с сохранением количеств кадров и созданием четкого fps, соответственно изменяется время.
- с дублированием кадров для соответствия времени.

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

Именно поэтому я и сделал акцент на таймкоды, даже добавил в название темы, т.к. SVP в AviSynth'е необходимо выступать в роли 'мюксатора' который будет использовать файл таймкодов

Ответ, "нет, такой возможности на данный момент нет" тоже устроит ...

Вариант 1:

mediainfo http://www.beetxt.com/CDq/
Таймкоды из mkv2vfr http://www.beetxt.com/p56/
Таймкоды из mkvextract http://www.beetxt.com/s0V/

Вариант 2:
mediainfo http://www.beetxt.com/1vk/
Таймкоды из mkv2vfr http://www.beetxt.com/b8z/
Таймкоды из mkvextract http://www.beetxt.com/HSj/

Имеется весьма специфичные сорсы с VFR фпс'ом, не дропы по 1,2 или 3 кадра, а именно float проседание по 10-20 кадров от заданного (допустим 30fps).
Поиском пользовался но в основном натыкался на дроп-фиксы, что данной задаче не пригодно.

Как вариант, можно взять файл таймкодов, взятый из mkvextract, и оперируя им добавлять необходимое кол-во кадров в временные промежутки.

Тема весьма актуальна например для тех кто делает записи игр, или различных rtmp(flv) потоков.
Собственно ищется решение сей проблемы ...