FFmpeg实现以顶部中心为锚点的动态画中画缩放效果
FFmpeg画中画:实现顶部中心锚点的动态缩放
要让你的画中画视频以顶部中心为锚点缩放,核心是在动态调整尺寸的同时,同步计算overlay的水平偏移量,保证视频始终处于背景顶部居中位置。
修改后的完整命令
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=x='(W-w)/2':y=0:eval=frame" -vcodec libx264 out.mp4
关键改动解释
- overlay的x坐标动态计算:
使用x='(W-w)/2',其中W是背景视频的宽度(这里为1920),w是每一帧top视频缩放后的宽度。这个公式会自动让top视频水平居中,配合y=0固定在顶部,完美实现顶部中心锚点的缩放效果——缩小时左上角自动右移,放大时左移。 - 保留原有缩放动画:
原代码中scale=-1:'480+600*abs(sin((t-2)*2*PI/8))':eval=frame的动态尺寸逻辑完全保留,确保缩放的节奏和效果和原来一致。 - eval=frame参数:
必须给overlay加上eval=frame,这样FFmpeg才会逐帧计算x坐标,否则只会用第一帧的尺寸计算一次,无法跟随动画变化。
效果验证
运行命令后,top视频会延迟2秒启动缩放动画,整个过程中顶部中心位置固定,缩放时的位置偏移完全自动适配,符合需求。
内容的提问来源于stack exchange,提问作者loarrin
相关产品推荐
相关产品推荐

