"Дёрганые панорамы" или "Разный FPS на выходе и выходе"
Добавлено: фев 22, '23, 17:49
Моё внимание к этому вопросу привлёк Верендей, сетуя на переменный fps на исходниках с айфонов. Почему я сам не увидел - привык к неравномерности проигрывания в окне просмотра на старом железе.
Итак, есть ролик про Кунашир, в котором был материал с разных источников: три разных айфона, андроид и коптер, с разным набором разрешений и fps: 25, 30, 29.97. Местами ещё и тот самый VFR, но зло было не в нём. При таком наборе, какой бы я ни выбрал fps при выводе, всё равно было бы масса несовпадений, поэтому с этим как-то надо справляться. Можно делать ускорения/замедления (с 30 fps до 50 либо 25), такое применимо к общим планам с дрона, где нет движений, которые в неродном темпе будут выглядеть неестественными. Но это не решает проблему со съёмками людей, а также кадры с переменной частотой кадров.
И тут я вспомнил про "киллер-фичу" Адоби Премьера как раз для таких случаев. В одном из обучающих роликов, которые я смотрел после установки, приводился пример трёх вариантов расчёта промежуточных кадров (Time interpolation), когда fps исходника не совпадает с заданной fps при просчёте, а также при замедлении/ускорении. Вариантов три: Frame Sampling (выбирается ближайший по времени кадр), Frame Blending (смешивается два соседних кадра ) и Optical Flow (новый кадр расчитывается на основе "оптического потока" - карты скоростей пикселей, построенной по соседним кадрам). В теории - как раз то, что нужно, в демо ролике всё идеально. Теперь смотрим на практике.
Во-первых, я вспоминаю, что ролик выводил как раз с Optical Flow в настройках рендера. Но раз на видео видны продёрги, значит, не помогло. Надо разобраться. Нахожу в ролике фрагмент с продёргами, дублирую поверх самого себя, сдвигаю на один кадр и меняю режим наложения на difference, чтобы увидеть смещение между соседними кадрами. Так невооружённым взглядом становится видно, где картинка дёргается: на четырёх кадрах контуры объектов одной ширины, на каждом пятом - в два раза шире. Вывожу этот фрагмент с тремя разными настройками. Содержимое видеопотоков побайтово эквивалентно между собой, отличия только в метаданных файла и потока (время создания, uid). Подумал на несовершенство аппаратных алгоритмов, сделал просчёт программно - то же самое. То есть, изменение режима при выводе недостаточно.
Нахожу, что такой выбор доступен как минимум ещё в двух местах: при изменении скорости клипа и в настройках самого клипа. Делаю просчёт, убеждаюсь: да, разница есть, виден микс кадров на frame blending и плавность движения на optical flow. Но заметил я это не сразу, т.к. в окне program monitor при изменении кадра сначала отображается быстрый ближайший кадр, затем через 2-3 секунды отображается кадр, пересчитанный с учётом режима интерполяции. Я же по тыкал переход на соседний кадр и поначалу не увидел разницы, пока не решил сделать просчёт фрагмента. Кстати, если просчитанный фрагмент наложить поверх в режиме difference, то при перемотке поначалу виден рельеф, говорящий о несовпадении кадров, а после "обдумывания" просмотр становится почти абсолютно чёрным.
Ближе к выводам.
Математически, может, с Optical Flow движение и стало равномерным и плавным. Но, как говорил наш математик, математически и стиральная доска является гладкой кривой. Да, движение уже не дёрганое, смещение на рассчитанных кадрах выглядит одинаковым, но одинаково плохим. Качество на стоп-кадре такое себе. Я специально выбрал кадр с самым худшим смещением, как пример. Для анализа приведу увеличенный фрагмент (шириной примерно 250 пикселей из 3840). Для понимания масштаба - это красная рамка в кадре. Да и сам кадр тоже сгодится для оценки - это с optical flow.
Ниже сравнение этого фрагмента в четырёх вариантах интерполяции. Красным здесь я выделил контрастный край с чёткого кадра для понимания смещения. Первый - Frame Sampling, просто берём ближайший кадр. На втором варианте видно подмешивание предыдущего кадра со следующим. Видны дубликаты очертаний объектов. В оригинале смещение составило 23 пикселя вправо, 11 вверх. Дальше интереснее. При расчёте оптического потока также появились"призраки", но их положение не совпадает ни с предыдущим кадром, ни с последующим. Синим я подчеркнул тот же край на ближайшем из "призраков". Для понимания расстояния, смещение между "призраками" составило где-то около 6 пикселей вправо и 4 вверх, смещение от предыдущего кадра - 8 вправо и 4 вверх, плюс-минус один пиксель. Т.е., это два рассчитанных промежуточных кадра, смешанные между собой. Почему, а главное зачем - непонятно.
Ну, и последний вариант - это фрагмент, пересчитанный в Topaz с увеличением частоты до 50 fps. На нём красным - граница объекта от предыдущего кадра, синим - граница левого из призраков от optical flow, чтобы показать, что они не совпадают. Смещение от предыдущего кадра составило 10 пикселей вправо и 4 вверх. Т.е., до следующего будет где-то (13;7), значит, положение рассчитывается пропорционально времени между расчётным кадром и соседними. Вывод пока для себя сделал такой: некоторые возможности Adobe Premiere в очередной раз несколько преувеличены и перехвалены. При нужде работать со смешанными исходниками, либо с VFR, режим "оптического потока" лучше, чем просто прореживание или дублирование кадров, и не требует дополнительных манипуляций. Но для качественной картинки, похоже, без внешних средств никак не обойтись.
Итак, есть ролик про Кунашир, в котором был материал с разных источников: три разных айфона, андроид и коптер, с разным набором разрешений и fps: 25, 30, 29.97. Местами ещё и тот самый VFR, но зло было не в нём. При таком наборе, какой бы я ни выбрал fps при выводе, всё равно было бы масса несовпадений, поэтому с этим как-то надо справляться. Можно делать ускорения/замедления (с 30 fps до 50 либо 25), такое применимо к общим планам с дрона, где нет движений, которые в неродном темпе будут выглядеть неестественными. Но это не решает проблему со съёмками людей, а также кадры с переменной частотой кадров.
И тут я вспомнил про "киллер-фичу" Адоби Премьера как раз для таких случаев. В одном из обучающих роликов, которые я смотрел после установки, приводился пример трёх вариантов расчёта промежуточных кадров (Time interpolation), когда fps исходника не совпадает с заданной fps при просчёте, а также при замедлении/ускорении. Вариантов три: Frame Sampling (выбирается ближайший по времени кадр), Frame Blending (смешивается два соседних кадра ) и Optical Flow (новый кадр расчитывается на основе "оптического потока" - карты скоростей пикселей, построенной по соседним кадрам). В теории - как раз то, что нужно, в демо ролике всё идеально. Теперь смотрим на практике.
Во-первых, я вспоминаю, что ролик выводил как раз с Optical Flow в настройках рендера. Но раз на видео видны продёрги, значит, не помогло. Надо разобраться. Нахожу в ролике фрагмент с продёргами, дублирую поверх самого себя, сдвигаю на один кадр и меняю режим наложения на difference, чтобы увидеть смещение между соседними кадрами. Так невооружённым взглядом становится видно, где картинка дёргается: на четырёх кадрах контуры объектов одной ширины, на каждом пятом - в два раза шире. Вывожу этот фрагмент с тремя разными настройками. Содержимое видеопотоков побайтово эквивалентно между собой, отличия только в метаданных файла и потока (время создания, uid). Подумал на несовершенство аппаратных алгоритмов, сделал просчёт программно - то же самое. То есть, изменение режима при выводе недостаточно.
Нахожу, что такой выбор доступен как минимум ещё в двух местах: при изменении скорости клипа и в настройках самого клипа. Делаю просчёт, убеждаюсь: да, разница есть, виден микс кадров на frame blending и плавность движения на optical flow. Но заметил я это не сразу, т.к. в окне program monitor при изменении кадра сначала отображается быстрый ближайший кадр, затем через 2-3 секунды отображается кадр, пересчитанный с учётом режима интерполяции. Я же по тыкал переход на соседний кадр и поначалу не увидел разницы, пока не решил сделать просчёт фрагмента. Кстати, если просчитанный фрагмент наложить поверх в режиме difference, то при перемотке поначалу виден рельеф, говорящий о несовпадении кадров, а после "обдумывания" просмотр становится почти абсолютно чёрным.
Ближе к выводам.
Математически, может, с Optical Flow движение и стало равномерным и плавным. Но, как говорил наш математик, математически и стиральная доска является гладкой кривой. Да, движение уже не дёрганое, смещение на рассчитанных кадрах выглядит одинаковым, но одинаково плохим. Качество на стоп-кадре такое себе. Я специально выбрал кадр с самым худшим смещением, как пример. Для анализа приведу увеличенный фрагмент (шириной примерно 250 пикселей из 3840). Для понимания масштаба - это красная рамка в кадре. Да и сам кадр тоже сгодится для оценки - это с optical flow.
Ниже сравнение этого фрагмента в четырёх вариантах интерполяции. Красным здесь я выделил контрастный край с чёткого кадра для понимания смещения. Первый - Frame Sampling, просто берём ближайший кадр. На втором варианте видно подмешивание предыдущего кадра со следующим. Видны дубликаты очертаний объектов. В оригинале смещение составило 23 пикселя вправо, 11 вверх. Дальше интереснее. При расчёте оптического потока также появились"призраки", но их положение не совпадает ни с предыдущим кадром, ни с последующим. Синим я подчеркнул тот же край на ближайшем из "призраков". Для понимания расстояния, смещение между "призраками" составило где-то около 6 пикселей вправо и 4 вверх, смещение от предыдущего кадра - 8 вправо и 4 вверх, плюс-минус один пиксель. Т.е., это два рассчитанных промежуточных кадра, смешанные между собой. Почему, а главное зачем - непонятно.
Ну, и последний вариант - это фрагмент, пересчитанный в Topaz с увеличением частоты до 50 fps. На нём красным - граница объекта от предыдущего кадра, синим - граница левого из призраков от optical flow, чтобы показать, что они не совпадают. Смещение от предыдущего кадра составило 10 пикселей вправо и 4 вверх. Т.е., до следующего будет где-то (13;7), значит, положение рассчитывается пропорционально времени между расчётным кадром и соседними. Вывод пока для себя сделал такой: некоторые возможности Adobe Premiere в очередной раз несколько преувеличены и перехвалены. При нужде работать со смешанными исходниками, либо с VFR, режим "оптического потока" лучше, чем просто прореживание или дублирование кадров, и не требует дополнительных манипуляций. Но для качественной картинки, похоже, без внешних средств никак не обойтись.