FFMPEG 图像到视频缩放起始位置
Posted
技术标签:
【中文标题】FFMPEG 图像到视频缩放起始位置【英文标题】:FFMPEG Image to video zoompan starting position 【发布时间】:2018-08-02 19:22:28 【问题描述】:在从图像中创建 mp4 幻灯片时,我在网上为 zoompan 做了一些示例,但我仍然没有完全掌握如何让它们从图像中的某个位置开始。这是典型的命令:
ffmpeg -i image-000.jpg -filter_complex "color=c=black:r=60:s=1920x1080[demo];[0:v]format=pix_fmts=yuva420p,scale=8000:-1,zoompan =z='min(zoom+0.0005,1.2)':s=2000x1333:d=360:x='if(gte(zoom,0.9),x,x+1/a)':y='if(gte (zoom,0.9),y,y+1)',fade=in:0:25:alpha=1,setpts=PTS-STARTPTS+0.0/TB[v0];[demo][v0]overlay=format=yuv420 " -t 6 -c:v libx264 -y out000.mp4
我使用的照片的纵横比通常为 3x2 或 4x3,因此我知道它们必须在 16x9 视频的某个地方被截断。上述代码(以及许多其他“Ken Burns 效果”示例)的问题在于,它们从图像的底部截断开始,然后放大或缩小,从不显示底部。
如何让动画在图像上进一步向下开始? 我在 y='...' 部分所做的任何操作都不会影响它。甚至没有输入 0 到 100000 之间的常数,而是调整该公式中的值 y='if(gte(zoom,0.9),y,y+1)'。
注意:我已经为原始图像使用 crop 或 pad 取得了一些成功,但我更想了解如何更好地在图像内定位缩放。
【问题讨论】:
【参考方案1】:由于缩放永远不会小于 1,因此在 expr 'if(gte(zoom,0.9),x,x+1/a)
中,gte(zoom,0.9)
将始终为真,而 expr 将始终评估为 x
。 x 初始化为 0,因此 expr 将始终计算为 0。y expr 也是如此。
使用
y='if(on,y-1,ih-ih/zoom)
从底部开始动画并向上。 on
是输出帧数,从零开始,所以第一帧设置在底部,然后每帧向上移动 1 个像素。
【讨论】:
谢谢!这对我正在玩的不同平底锅起到了作用。它还使渲染速度更快,因为我不需要在缩放之前进行裁剪和填充以获得类似的结果。以上是关于FFMPEG 图像到视频缩放起始位置的主要内容,如果未能解决你的问题,请参考以下文章
FFMpeg SDK使用8调用FFmpeg SDK实现视频缩放