我正在寻找某种东西(最好是 FOSS 软件),它可以以 N 张图像作为输入,制作一个动画,并输出一个包含 M 帧的动画,其中 M 在 2N 到 5N 左右的范围内。
我认为这种通用技术被称为“时间上采样”或可能称为“中间”(或简称为“补间”)。请注意,它确实需要付出一些努力来对场景中的物体进行运动跟踪(“光流”);仅在关键帧之间淡入淡出(“溶解”)是行不通的。在 Google 上搜索“时间上采样”会出现许多关于该主题的论文,但我还没有发现任何代码/软件(gstreamer 插件就很完美)可以用来尝试该技术。
有什么建议 ?
附加信息:“运动插值”似乎是电视界最常用的名字,代表我所寻找的内容。请参阅这和视频这里也一样。有趣的是,一些电影爱好者似乎讨厌这些技术对 24FPS 电影的影响:例如,有评论说“让《乱世佳人》看起来像是一部用视频拍摄的肥皂剧”。
答案1
这MV工具插件AVISynth施行帧插值。艾维合成(源码) 是一个基于脚本的视频编辑工具。您可以在脚本文本文件中定义要执行的操作。
我必须播放的脚本查理·威尔逊的战争以 120fps 拍摄:
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)
是的,它确实摧毁了电影品质当转换为高于 24fps 的任何值时。
答案2
简短回答:
利用现有技术需要大量的手工工作才能使其工作起来。
较长的答案:
获取“中间”图像(即所谓的光流)的常用方法是映射两张图片(源、目标)中的点并计算两张图片之间的变换。当然,我们确实有边缘查找算法或跟踪不同对象(Blob、基于内核、轮廓等)的预测算法。但“真实生活”运动图像的完全自动化变换充其量只是实验性的。
答案3
慢动作视频
slowmoVideo 是一个开源程序,可以根据您的镜头创建慢动作视频。
但它并不是简单地让您的视频以 0.01 倍的速度播放。您可以平滑地减慢或加快您的镜头速度,还可以选择使用运动模糊。
慢动作如何运作?slowmoVideo 尝试找出视频中像素移动的位置(此信息称为光流),然后使用此信息计算额外的帧。
Gstreamer 慢动作插件
该插件使用了来自 slowmovideo 的代码,将其从 QT 和其自己的基于 ffmpeg 的内部解码“框架”移植到 gstreamer。