Topic: Переменная частота кадров (VFR) и SVP

Постоянная частота кадров в видео была общепринятой долгое время. Это объясняется тем, что скорость пленки у кино-камер и кино-проекторов была постоянной на всем протяжении фильма, а при трансляции видео по телевизору передавалось определенное число кадров в секунду, согласно стандарту вещания (PAL/SECAM - 50 полей/25 кадров, NTSC - 60 полей/30 кадров). Именно поэтому видеоконтейнеры AVI и MPG поддерживают только постоянную частоту кадров.
Но появились проблемы вещания кино (24p) по телевидению (50i/50i), появилась необходимость монтажа видеоряда из фрагментов, имеющих разную скорость кадров. На телевидении такие проблемы решаются телекино-преобразованием, при котором каждый исходный кадр повторяется определенное число раз, заданное пулдаун-формулой, например 2:3 pulldown. Для такого видео перед повышением плавности надо избавляться от дублей кадров, делать обратное телекино-преобразование (см. Просмотр телекино-видео с плавностью).

Для компьютера же существует другая возможность совмещения видео-фрагментов с разной частотой кадров в одном файле и называется она переменная частота кадров, VFR (variable frame rate). Переменную частоту кадров поддерживают контейнеры MKV и MP4. В эти контейнеры заложена большая гибкость в отношении частоты кадров, она может быть задана кусочно-постоянной, а может задаваться индивидуально для каждого кадра. Правильней сказать, для каждого кадра указывается продолжительность его показа на экране. Получается плавающая частота кадров.

С по-настоящему плавающей частотой кадров мне сталкиваться пока не приходилось. А вот VFR видео-файлы с кусочно-постоянной частотой кадров попадаются. Мне известно два типа видео, где встречается такая переменная частота кадров:
1. Аниме, в которых титры и компьютерная графика имеют одну частоту, а рисованная графика - другую (обсуждали в ветке:  [ошибка] Низкий SVP-индекс при неполной загрузке процессора).
2. Релиз-группа CtrlHD начала эксперимент и выкладывает VFR TopGear, кодируя его фрагментами: студийные эпизоды и трек имеют 50 кадров/сек, а выездные сессии 25 кадров/сек. Например, эта раздача.

Про этот TopGear мне подсказал sergioleon вон там.

Вот про этот VFR TopGear и пойдет речь далее.

Re: Переменная частота кадров (VFR) и SVP

Итак, что пишут авторы VFR релиза TopGear:

This is a variable framerate encode of Top Gear. Studio sections + celebrity/Stig laps are shot at 50fps, while the films are shot at 25fps.
This VFR encode presents each section at the correct framerate, so no bits are wasted, and no unique frames are thrown out (like in the scene encodes).

Вольный перевод:

Это TopGear, закодированный с переменной частотой кадров. Съемки в студии и на треке сняты с частотой 50 кадров/сек, в то время как съемки сюжетов - с частотой 25 кадров/сек.
Кодирование с переменной частотой кадров выполнено на каждом фрагменте с его исходной частотой кадров, таким образом ни бита не потеряно, а неуникальные кадры выброшены (как при кодировании отдельных фрагментов).

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

# timecode format v1
Assume 23.976
0,623,25.0000
624,2945,50.0000
2946,16856,25.0000
16857,37278,50.0000
37279,46670,25.0000
46671,86934,50.0000
86935,101934,25.0000
101935,106352,50.0000
106353,122822,25.0000
122823,128660,50.0000

Если посчитать продолжительность каждого фрагмента, то получится:

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

Желтым цветом выделены короткие фрагменты. Зачем? Об этом речь пойдет дальше.

Post's attachments

TopGear_S17E01_VFR_fragments.png, 4.14 kb, 236 x 205
TopGear_S17E01_VFR_fragments.png 4.14 kb, 826 downloads since 2012-04-07 

Re: Переменная частота кадров (VFR) и SVP

SVP имеет механизм обнаружения переменной частоты кадров и перевыбора профиля при обнаружении смены частоты кадров. Работает этот механизм не моментально. Требуется время, чтобы обнаружить новую частоту кадров и отличить эту смену частоты между кусочно-постоянной частотой кадра от по-настоящему плавающей частоты кадров. В первом случае надо перевыбрать профиль, а во-втором включить аварийное удвоение кадров.

Смотрим лог, как повышается частота кадров на этом файле.
Открытие файла:

14:57:08.685; GetDimensionAndFPS_Grab start. Длительность: 135 мсек
14:57:08.820; GetDimensionAndFPS_Grab result: 1280 720 50
14:57:08.820; T1T: подготовка
14:57:08.824; T1T: начало
14:57:08.829; T1T: GetAllMediaParams
14:57:08.830; T1T: SettingsPrepare
14:57:08.835; T1T: Настройка плавного воспроизведения
14:57:08.836; T1T: WriteAllMediaParamsToIni
14:57:08.836; запуск приложения...
команда: C:\Program Files (x86)\SVP\SVPMgr
параметры: main "C:\Users\Andrey\AppData\Roaming\SVP 3.1\" 1280 720 50 1280 720 6 5
запись в лог: True. Длительность: 518 мсек
14:57:09.354; T1T: SVPMgr main. Длительность: 18 мсек
14:57:09.372; T1T: Воспроизведение
50 * (6 : 5) = 60 fps
14:57:09.373; SetPriorityPlayer: 2. Длительность: 2167 мсек
14:57:11.540; это изменение FalseVFR_Dwn. ffdShow-частота: 31.409 SVP-индекс:0.97/0.50
14:57:12.476; это изменение FalseVFR_Dwn. ffdShow-частота: 12.726 SVP-индекс:0.97/0.50
14:57:13.412; это изменение FalseVFR_Up. ffdShow-частота: 19.668 SVP-индекс:1.01/1.97
14:57:14.348; это изменение FalseVFR_Up. ffdShow-частота: 22.684 SVP-индекс:1.01/1.28
14:57:15.283; это изменение FalseVFR_Up. ffdShow-частота: 23.994 SVP-индекс:1.01/1.14
14:57:16.219; это изменение FalseVFR_Up. ffdShow-частота: 24.562 SVP-индекс:0.97/1.01
14:57:17.156; это изменение FalseVFR_Up. ffdShow-частота: 24.81 SVP-индекс:1.01/1.02
14:57:18.093; это изменение FalseVFR_Up. ffdShow-частота: 24.917 SVP-индекс:0.97/0.98
14:57:26.890; сброс интервала. Длительность: 936 мсек
14:57:27.826; частота стабилизировалась: 24.999 fps
14:57:27.826; RefreshSVP начало
14:57:27.827; RefreshSVP конец: Ожидание появления ffdshow video. Длительность: 514 мсек
14:57:28.341; GetDimensionAndFPS_Grab start. Длительность: 120 мсек
14:57:28.461; GetDimensionAndFPS_Grab result: 1280 720 24.999
14:57:28.462; T1T: подготовка
14:57:28.465; T1T: начало
14:57:28.468; T1T: GetAllMediaParams
14:57:28.469; T1T: SettingsPrepare
14:57:28.472; T1T: Настройка плавного воспроизведения
14:57:28.473; T1T: WriteAllMediaParamsToIni
14:57:28.474; запуск приложения...
команда: C:\Program Files (x86)\SVP\SVPMgr
параметры: main "C:\Users\Andrey\AppData\Roaming\SVP 3.1\" 1280 720 24.999 1280 720 12 5
запись в лог: True. Длительность: 512 мсек
14:57:28.986; T1T: SVPMgr main. Длительность: 17 мсек
14:57:29.003; T1T: Воспроизведение
24.999 * (12 : 5) = 59.998 fps
14:57:29.003; SetPriorityPlayer: 2

Итак, видно, что изначально ffdShow сообщил, что частота кадров видео = 50 кадров/сек.
Уже через 0,7 сек включилось воспроизведение с повышением плавности "Воспроизведение 50 * (6 : 5) = 60 fps".
И тут же частота ffdShow плавно поплыла вниз до 12.726, а затем вверх до 24.917. Плавание частоты происходило 9 сек. Далее еще 9 сек потребовалось SVP, чтобы убедиться, что частота стабилизировалась. И еще 1,2 сек происходило переключение профиля на новую частоту: "Воспроизведение 24.999 * (12 : 5) = 59.998 fps".
В общей сложности SVP потребовалось 20 сек, чтобы переключиться с неверно определенной на старте воспроизведения частоты 50 каров/сек на частоту 25 кадров/сек.

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

Re: Переменная частота кадров (VFR) и SVP

Смотрим лог дальше. Что там написано про второе переключение профилей:

14:57:32.772; это изменение #1. ffdShow-частота: 32.324 SVP-индекс:0.93/1.02
14:57:33.708; это изменение #2. ffdShow-частота: 42.322 SVP-индекс:0.68/0.96
14:57:34.644; это изменение #3. ffdShow-частота: 46.664 SVP-индекс:0.99/1.17
14:57:35.581; вывод OSD о переменной частоте
14:57:35.581; это изменение #4. ffdShow-частота: 48.551 SVP-индекс:1.01/1.13
14:57:36.526; вывод OSD о переменной частоте
14:57:36.526; это изменение #5. ffdShow-частота: 49.37 SVP-индекс:0.82/0.82
14:57:37.458; вывод OSD о переменной частоте
14:57:37.458; это изменение #6. ffdShow-частота: 49.863 SVP-индекс:0.66/0.67
14:57:38.388; вывод OSD о переменной частоте
14:57:38.389; это изменение #7. ffdShow-частота: 50 SVP-индекс:0.66/0.68
14:57:46.811; сброс интервала. Длительность: 937 мсек
14:57:47.748; частота стабилизировалась: 50 fps
14:57:47.748; RefreshSVP начало
14:57:47.751; RefreshSVP конец: Ожидание появления ffdshow video. Длительность: 511 мсек
14:57:48.262; GetDimensionAndFPS_Grab start. Длительность: 122 мсек
14:57:48.384; GetDimensionAndFPS_Grab result: 1280 720 50
14:57:48.385; T1T: подготовка
14:57:48.390; T1T: начало. Длительность: 6 мсек
14:57:48.396; T1T: GetAllMediaParams
14:57:48.396; T1T: SettingsPrepare. Длительность: 9 мсек
14:57:48.405; T1T: Настройка плавного воспроизведения
14:57:48.406; T1T: WriteAllMediaParamsToIni
14:57:48.407; запуск приложения...
команда: C:\Program Files (x86)\SVP\SVPMgr
параметры: main "C:\Users\Andrey\AppData\Roaming\SVP 3.1\" 1280 720 50 1280 720 6 5
запись в лог: True. Длительность: 514 мсек
14:57:48.921; T1T: SVPMgr main. Длительность: 13 мсек
14:57:48.934; T1T: Воспроизведение
50 * (6 : 5) = 60 fps
14:57:48.934; SetPriorityPlayer: 2

В этом случае частота в ffdShow плавала 6 сек, SVP проверял, что частота стабилизировалась еще 9 сек. Какое-то время потребовалось на переключение. В итоге переключение на новый профиль произошло через 16 сек после начала фрагмента с другой частотой кадров.
Длительность фрагмента 46 сек, из них первые 16 секунд на экране красовалась OSD-надпись о переменной частоте кадров и плавность была неудовлетворительной, т.к. применялся профиль от предыдущего фрагмента.

Re: Переменная частота кадров (VFR) и SVP

Выводы, которые можно сделать на основе данного анализа:
1. Мгновенные переключения между разными частотами кадров в VFR-файлах ffdShow показывает как плавное изменение частоты в течение 6-9 секунд.
2. SVP требуется еще 9 секунд, чтобы убедиться, что частота стабилизировалась.
3. При смене частоты из меньшей в большую выводится сообщение о плавающей частоте кадров, что на самом деле не так.

Что можно предпринять:
1. Уменьшить время реакции на смену частоты кадров. Попробовать разные версии ffdShow, покрутить в нем настройки, поперебирать декодеры.
2. Исправить SVP. Уменьшить период проверки стабилизировавшейся частоты с 9 секунд например до 3-ех.
3. Исправить SVP. Это явно ошибка, надо исправлять, чтобы в данном случае не выводилось OSD о плавающей частоте кадров.

6 (edited by NightFox 07-04-2012 08:29:47)

Re: Переменная частота кадров (VFR) и SVP

Было бы круто если бы SVP мог сам доставать список переменных частот подобно mkv2vfr и дальше бы жёстко им следовал. Если SVP может считывать данные из AVS, то можно же получить полный путь к файлу, дальше с помощью того же mkv2vfr вытащить эти частоты и создать временный профиль, при этом вовсе игнорируя частоту ffdShow.

Re: Переменная частота кадров (VFR) и SVP

NightFox
Хм. Предложение хорошее, но утилита mkv2vfr создавала табличку 6 минут. А повторить ее функциональность внутри SVP - это довольно сложная задача. Без автора (Haali) тут не разобраться.

Другое дело, если до просмотра фильма рядом с ним будет находиться уже заранее подготовленный vfr-файл с фрагментами. Тогда SVP сможет сверять текущее положение проигрывания файла с таблицей фрагментов и переключаться намного быстрей, чем упоминавшиеся выше 16-20 сек. Вот такое реализовать намного реальнее.

Re: Переменная частота кадров (VFR) и SVP

А сам Haali, вроде же, отошёл от программерских дел...

Re: Переменная частота кадров (VFR) и SVP

Noweol
Похоже на то. Haali (Matroska) Splitter им уже год как не поддерживается. sad

Re: Переменная частота кадров (VFR) и SVP

MAG79
Спасибо за подробное исследование! cool
Мне пока только Ctrl+Shift+P подходит. smile
Уменьшить период проверки - да, не помешает.
Попробовать разные версии ffdShow, покрутить в нем настройки - какие настройки крутить?

Re: Переменная частота кадров (VFR) и SVP

sergioleon
какие настройки крутить?
Вот это я пока сам не знаю, зато могу сказать куда смотреть wink

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

Вот эта цифра должна как можно быстрей реагировать на смену частоты кадров. В идеале: моментально.

Post's attachments

ffdShow_fps.png, 20.94 kb, 568 x 479
ffdShow_fps.png 20.94 kb, 834 downloads since 2012-04-07 

12 (edited by NightFox 07-04-2012 16:23:43)

Re: Переменная частота кадров (VFR) и SVP

MAG79
утилита mkv2vfr создавала табличку 6 минут
yikes
Другое дело, если до просмотра фильма рядом с ним будет находиться уже заранее подготовленный vfr-файл с фрагментами. Тогда SVP сможет сверять текущее положение проигрывания файла с таблицей фрагментов и переключаться намного быстрей, чем упоминавшиеся выше 16-20 сек. Вот такое реализовать намного реальнее.
Как вариант, но надо как-то это упростить для конечного пользователя. Может добавить пункт «vfr-файл для видео с переменной частотой» в подменю «Сформировать». При нажатии на который появится или окно выбора файла или окно для перетягивания на него файлов. После выбора/перетягивания создавать vfr-файл рядом с файлом видео с таким же названием, но с расширением vfr, который и будет пытаться подцепить SVP при воспроизведении.

13 (edited by vivan 07-04-2012 19:54:37)

Re: Переменная частота кадров (VFR) и SVP

В авишках тоже бывает VFR... 120 фпс + нуль фреймы.

З.ы. в теме ffdshow на d9 можно попросить что-нибудь с этим сделать, также можно попробовать nev'а такое сделать для LAV...

Re: Переменная частота кадров (VFR) и SVP

NightFox
добавить пункт «vfr-файл для видео с переменной частотой» в подменю «Сформировать»
Спасибо за предложение. Для начала надо реализовать чтение vfr-файла. Перегружать интерфейс редкоиспользуемым пунктом - это не совсем логично. Начну с того, что напишу мини-инструкцию, как создавать vrf-файлы и реализую в SVP менеджере чтение этих файлов. А уж дальше поглядим.

vivan
В авишках тоже бывает VFR... 120 фпс + нуль фреймы
Да. Точно! Спасибо! Слышал про это раньше. Аниме. Интересно, сейчас такие файлы еще делают?
Есть ссылка на подобный файл? Раньше, насколько я помню, эти файлы были противопоказаны для совместного использования с SVP.
Надо будет посмотреть, что с ними можно сделать, как реализовать совместимость.

в теме ffdshow на d9 можно попросить что-нибудь с этим сделать, также можно попробовать nev'а такое сделать для LAV
да, с ffdShow вполне может получиться. Надо будет к ним обратиться.

15 (edited by NightFox 08-04-2012 14:18:38)

Re: Переменная частота кадров (VFR) и SVP

MAG79

Спасибо за предложение.

Да не за что  wink

Для начала надо реализовать чтение vfr-файла.
А использовать программу mkv2vfr нельзя? Она же консольная, её можно скрыто в фоне запускать.
Перегружать интерфейс редкоиспользуемым пунктом - это не совсем логично. Начну с того, что напишу мини-инструкцию, как создавать vrf-файлы и реализую в SVP менеджере чтение этих файлов. А уж дальше поглядим.
Ну он настолько же редкоиспользуемый будет как и формирование avs-cкрипта.
Тут конечно по хорошему надо исследования проводить smile В некоторых программах такое есть, но думаю для SVP это пока излишне и лучше сосредоточиться на более важных вещах.

Само это подменю пока достаточно пустое, так что дополнительный пункт перегружаться ничего не будет.
Но вообще стоит сначала узнать на тему ffdShow, может можно будет обойтись и без этого. Хотя когда заранее знаешь где какие частоты, получаешь более быстрое переключение.

Re: Переменная частота кадров (VFR) и SVP

MAG79
Интересно, сейчас такие файлы еще делают?
давно такого не видел. Да и это понятно - матрешка всем лучше avi, поэтому в avi уже рипов и не встретишь (разве что HWP-рипы, но я таким ... не интересуюсь  smile).

Есть ссылка на подобный файл?
Нет, попытался найти те рипы - безнадежно, уже сделали лучше, а старое удалили из интернетов)

Кстати про реально плавующую частоту кадров - телефоны с такой снимают, т.к. не всегда тянут заданное fps.

Re: Переменная частота кадров (VFR) и SVP

NightFox
использовать программу mkv2vfr нельзя?
Вижу, я невнятно написал. Да. Для создания vfr-файла из mkv будет использоваться mkv2vfr.
vfr-файл - это таблица.
Так вот я собираюсь в SVP реализовать чтение этой таблицы. Ну и переключение профилей согласно ей. Только и всего smile

когда заранее знаешь где какие частоты, получаешь более быстрое переключение
Вот на это и делаю ставку. wink
Есть надежда, что переключение получится сделать с точностью до десятых долей секунды. Это намного точней, чем 20-ти секундное переключение hmm

vivan
про реально плавующую частоту кадров - телефоны с такой снимают, т.к. не всегда тянут заданное fps
Во! Было бы интересно пощупать такое видео. Есть у кого? hmm

Re: Переменная частота кадров (VFR) и SVP

MAG79
И заранее 10 минут индексировать файл? От меня ускользает смысл  hmm

19 (edited by vivan 08-04-2012 17:30:46)

Re: Переменная частота кадров (VFR) и SVP

О, нашел наконец smile
http://www.mediafire.com/?w7a8a2bnfc7rj

Chainik
И заранее 10 минут индексировать файл?
зато потом все идеально smile Да и не 10 минут... Серия аниме у меня за 2 секунды проиндексировалась. И довольно забавный результат получился http://pastebin.com/4idNa5Lt

Re: Переменная частота кадров (VFR) и SVP

vivan
Серия аниме

SD-разрешения размером 300 метров
у меня за 2 секунды проиндексировалась
с SSD на 6-ядерном i7
  big_smile

21 (edited by NightFox 08-04-2012 20:49:40)

Re: Переменная частота кадров (VFR) и SVP

MAG79

Вижу, я невнятно написал.
Это я невнятно прочитал big_smile

Это намного точней, чем 20-ти секундное переключение hmm
Ну а если ffdshow не будет такой хернёй страдать, разве уменьшить время проверки нельзя будет?
А так-то да, в любом случае такая дополнительная возможность не повредит.

22 (edited by NightFox 08-04-2012 20:54:56)

Re: Переменная частота кадров (VFR) и SVP

Chainik wrote:

И заранее 10 минут индексировать файл? От меня ускользает смысл  hmm

Это в любом случае лучше чем так как сейчас. Да и индексировать файл нужно только 1 раз.
Кстати говоря, может ещё сделать чтобы SVP говорил в случае переменной частоты что нужно сформировать vfr-файл для лучшего уплавнения.

Re: Переменная частота кадров (VFR) и SVP

vivan
довольно забавный результат получился
Что за такое жуткое анимцо?

Re: Переменная частота кадров (VFR) и SVP

NightFox
Да и индексировать файл нужно только 1 раз.

А смотреть сколько?

Re: Переменная частота кадров (VFR) и SVP

Chainik wrote:

А смотреть сколько?

Сколько угодно big_smile