图片生成视频
2018-5-18
| 2024-10-1
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

项目简介

最近在维护一个原有的视频合成项目,还算比较有意思,就记录下来(公司项目,不贴代码); 功能大致如下:给定几张图片,选择图片缓动特效,然后生成视频;

实现方式

  1. 设计缓动特效函数,按照一定时间间隔在canvas上进行绘制;
  1. 在固定时间间隔对canvas进行截图操作;
  1. 使用之前的所有截图调用FFmpeg进行视频合成;

用户操作流程

  1. 选择音频、特效;
  1. 选择一定张数的图片;
  1. 点击生成,此时会生成一个array<object>类型的json数据;

代码执行过程

  • 首先是代码初始化,分为以下几步:
    • 根据每张图片的宽高比计算出用于渲染的宽、高,上、左偏移值;
    • 配置每张图片的缓动函数、需要的steps数以及在哪一个step开始;
    • 最终也会配置所有图片的总步骤数(步骤取决于总运动时长以及帧率);
  • 初始化完成后开始绘制图片,绘制的具体逻辑如下:
    • 判断当前步骤是否为最后一步,如果是,则标记为已完成,否则就继续执行;
    • 然后开始循环渲染所有图片,渲染每一帧图片的具体逻辑如下:
      • 判断当前图片是否应该开始并且为结束,如果是,则进行渲染,否则就执行下一个;
      • 获取图片对应的缓动函数,如果是第一步,则计算缓动的初始状态,否则就进行下一步;
      • 渲染当前步骤对应的效果,然后把当前step+1;
      • 然后判断当前图片是否已经渲染完成,如果完成,则强制更新并重置状态,否则什么也不做;
      • 每渲染完成一张图片就把总的step+1;
    • 在指定1000/FPS的时间间隔下保存图片到本地;
  • 等绘制完最后一步后,调用FFmpeg进行视频合成;

tips

未完待续(never)
  • 开发
  • JS学习记录移动端布局记录
    Loading...