Я ищу что-то (предпочтительно программное обеспечение FOSS), что может принимать анимацию с N изображениями на входе и выводить анимацию с M кадрами, где M находится в диапазоне от 2N до 5N или около того.
Я считаю, что общая техника называется «временной апсемплинг» или, возможно, «промежуточный» (или «промежуточный» для краткости). Обратите внимание, что для отслеживания движения объектов в сцене («оптический поток») нужно приложить некоторые усилия; простого затухания («растворения») между ключевыми кадрами недостаточно. Поиск в Google «временной апсемплинг» выдает множество статей по этой теме, но мне еще предстоит найти какой-либо код/программное обеспечение (плагин gstreamer был бы идеальным), которые я мог бы просто использовать для опробования этой техники.
Какие-либо предложения ?
Дополнительная информация:«Интерполяция движения»Кажется, это наиболее широко используемое название в мире телевидения для того, что я ищу. Смотретьэтотивидеоздесь тоже. Интересно, что некоторые киноманы, похоже, ненавидят то, что эти технологии делают с фильмом 24FPS: например, комментарий «заставляет «Унесенных ветром» выглядеть как мыльная опера, снятая на видео».
решение1
TheMVToolsплагин дляAVISynthвыполняетинтерполяция кадров.AviSynth(sourceforge) — это инструмент для редактирования видео на основе скрипта. Вы определяете операции для выполнения в текстовом файле скрипта.
Сценарий, который мне пришлось воспроизвестиВойна Чарли Уилсонапри 120 кадрах в секунду:
cyia.avs
:
source = DirectShowSource("Cyia Batten - Charlie Wilson's War.avi")
# assume progressive NTSC Film 23.976 source
# Fast Search
#============
# we use explicit idx for more fast processing
#backward_vec = source.MVAnalyse(blksize=16, isb = true, chroma=false, pel=1, searchparam=1, idx=1)
#forward_vec = source.MVAnalyse(blksize=16, isb = false, chroma=false, pel=1, searchparam=1, idx=1)
# Slow Search
# ===========
# Use block overlap, halfpixel accuracy and Exhaustive search
backward_vec = source.MVAnalyse(overlap=4, isb = true, pel=2, search=3, idx=1)
forward_vec = source.MVAnalyse(overlap=4, isb = false, pel=2, search=3, idx=1)
#double framerate
#source.MVFlowFps(backward_vec, forward_vec, num=2*FramerateNumerator(source), den=FramerateDenominator(source), idx=1)
#triple framerate
#source.MVFlowFps(backward_vec, forward_vec, num=3*FramerateNumerator(source), den=FramerateDenominator(source), mask=0, idx=1)
#120fps
source.MVFlowFps(backward_vec, forward_vec, num=120, den=1, mask=0, idx=1)
Да, это действительно разрушаеткачество фильмапри конвертации в что-либо выше 24 кадров в секунду.
решение2
Короткий ответ:
Чтобы заставить это работать, при использовании современных технологий требуется много ручной работы.
Более развернутый ответ:
Обычный метод получения "промежуточного" изображения (так называемого оптического потока) заключается в сопоставлении точек на обоих снимках (источник, назначение) и вычислении преобразования между двумя снимками. Конечно, у нас есть алгоритмы поиска границ или предиктивные алгоритмы, которые отслеживают различные объекты (Blob, kernel-based, contour и т. д. и т. п.). Но полная автоматизация преобразования "реального" киноизображения в лучшем случае экспериментальна.
решение3
замедленная съемкаВидео
slowmoVideo — это программа с открытым исходным кодом, которая создает замедленные видеоролики из отснятого материала.
Но это не просто заставляет ваши видео воспроизводиться со скоростью 0,01×. Вы можете плавно замедлять и ускорять ваши кадры, опционально с размытием движения.
Как работает замедленная съемка? slowmoVideo пытается определить, куда перемещаются пиксели в видео (эта информация называется оптическим потоком), а затем использует эту информацию для расчета дополнительных кадров.
Плагин Gstreamer Slowmo
Плагин использует код из slowmovideo, портируя его из QT и собственную внутреннюю «инфраструктуру» декодирования на основе ffmpeg в gstreamer.