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)'

注意:我已经为原始图像使用 croppad 取得了一些成功,但我更想了解如何更好地在图像内定位缩放。

【问题讨论】:

【参考方案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实现视频缩放

如何定位“隐藏”的 iframe? (应用程序:链接到“隐藏的海报图像”嵌入的 Youtube 视频的起始位置)

使用 FFmpeg 将音频输入与视频混合到特定位置

ffmpeg对视频进行帧序列提取要怎样改变它的输出位置?

[SimplePlayer] 1. 从视频文件中提取图像

FFmpeg解码H264及swscale缩放详解