【问题标题】:ffmpeg scale down video dynamically (squeeze-back) or zoompan out to smaller than originalffmpeg 动态缩小视频(向后挤压)或缩小到小于原始视频
【发布时间】:2021-12-11 01:05:57
【问题描述】:

我有 2 个视频,我正在尝试将一个叠加在另一个之上,并让它以动画方式缩小,直到它看起来像画中画设置。然后,几秒钟后,它应该会按比例放大。

这就是我想要实现的(这些是视频不是图片):

这是我能得到的最接近的结果,但至关重要的是,缩放“out”(而不是“in”)似乎不起作用;所以,当然,这不起作用

ffmpeg -i bg.mov -i top.mov -filter_complex "[0:v]zoompan=z='pzoom-0.1':d=1, setpts=PTS-STARTPTS[top]; [1:v]setpts=PTS-STARTPTS+2/TB, scale=1920x1080, format=yuva420p,colorchannelmixer=aa=1.0[bottom]; [top][bottom]overlay=shortest=0" -vcodec libx264 out.mp4

这可以用 ffmpeg 实现吗?

【问题讨论】:

    标签: animation video dynamic ffmpeg scale


    【解决方案1】:

    使用带有动画的缩放滤镜,自 v4.3 起可用。

    这里有一些东西可以帮助您入门。这将在 2 秒内将顶层从 480 像素高度扩展到 1080 像素高度,然后在 2 秒内恢复到 480 像素。

    ffmpeg -i bg.mov -i top.mov -filter_complex "[0:v]scale=1920x1080,setpts=PTS-STARTPTS[bg]; [1:v]setpts=PTS-STARTPTS+2/TB, scale=-1:'480+600*abs(sin((t-2)*2*PI/8))':eval=frame[top]; [bg][top]overlay" -vcodec libx264 out.mp4

    【讨论】:

    • 这是我得到的地方:ffmpeg -i bg.mov -i top.mov -filter_complex "[1:v]scale=1920x1080,setpts=PTS-STARTPTS[bg]; [0:v]setpts=PTS-STARTPTS, scale=-1:'if(lte(t,2),ih,if(between(t,2,3),ih-ih*.475*abs(sin((t-2)*4*PI/8)),if(between(t,3,9),ih-ih*.475,if(lte(t,10),ih-ih*.475*abs(sin((t-2)*4*PI/8))))))':eval=frame[top]; [bg][top]overlay=y=(main_h-overlay_h)*.15" -vcodec libx264 out.mp4 这基本上是在做我想要的行为,除了 1 个例外:overlay y=(main_h-overlay_h)*.15 似乎使动画有点紧张,大概是由于舍入。有什么办法解决这个问题?
    • 你们中的哪一位能告诉我们为什么要使用公式 abs(sin((t-2)*2*PI/8)) 吗?我没有太多关于视频编辑的背景知识,所以关于这个主题的任何指针都会有所帮助。
    • @sivano 我正在使用正弦函数来实现平滑的动画。您也可以只使用没有正弦的 t 的线性函数。
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2018-09-18
    • 2018-01-13
    相关资源
    最近更新 更多