纵享丝滑!Cesium + ffmpegserver 生成高质量动态视频【逐帧生成】

工作中需要提供一些在三维场景下的视频动画素材,屏幕录制会出现掉帧等其他问题,看到 ffmpegserver 后,眼前一亮

Cesium + ffmpegserver 生成高质量视频

1.自建 ffmpegserver

首先,克隆 ffmpegserver 仓库代码

bash 复制代码
git clone https://github.com/greggman/ffmpegserver.js.git

安装依赖

bash 复制代码
cd ffmpegserver.js && npm install

启动服务

bash 复制代码
npm start

ffmpegserver 中有两个 demo 案例,可以打开源代码看看具体实现

效果的预览地址是:

1.普通 canvas案例: http://localhost:8080/test.html

2.threejs 案例 http://localhost:8080/test2.html

原理是通过一帧一帧截取图片,最后用 ffmpeg 逐帧将图片合成为视频。

2. 在 cesium中 集成

以定点环绕来举例

首先,初始化 CCapture 实例

js 复制代码
const capturer = new CCapture({
  format: 'ffmpegserver',
  framerate: 60,
  onProgress: () => {},
  extension: '.mp4',
  name: 'cesium'
});

开始环绕

js 复制代码
const lat = 45.2013
const lng = 82.08887889
const position = Cesium.Cartographic.fromDegrees(lng, lat);
// 获取点位所在地形高度
const updatedPosition = await Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, [position]);
const [destination] = updatedPosition;
const height = destination.height;

capturer.start();

const center = Cesium.Cartesian3.fromDegrees(lng, lat, height);
let heading = Cesium.Math.toRadians(40.0);
const pitch = Cesium.Math.toRadians(-45.0);
const range = 2000.0;
let totalRotation = 0
const speed = 1; // 环绕速度,每帧转多少度

capturer.capture(viewer.canvas);

function showVideoLink(url, size) {
  size = size ? ' [size: ' + (size / 1024 / 1024).toFixed(1) + 'meg]' : ' [unknown size]';
  let filename = url;
  const slashNdx = filename.lastIndexOf('/');
  if (slashNdx >= 0) {
    filename = filename.substr(slashNdx + 1);
  }
  // 视频下载链接
  console.log("http://127.0.0.1:8080" +  url)
}

function animate() {
  if (totalRotation >= 360) {
    if (screenRecording) {
      capturer.stop();
      capturer.save(showVideoLink);
    }
    totalRotation = 0;
    return;
  }
  viewer.render();
  capturer.capture(viewer.canvas); // 一定要加这一行,不然视频是纯黑的
  totalRotation += speed;
  heading = Cesium.Math.toRadians(x);
  viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range));
  viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
  requestAnimationFrame(animate);
}

animate();
相关推荐
show4337 小时前
2026微信小程序视频转文字多语种识别引擎技术选型:22种方言25种外语挑战
微信小程序·小程序·音视频
诺....9 小时前
mkv转mp4并将字幕和音频烧进去
音视频
OH_TPC10 小时前
HarmonyOS APP开发---“股动力“实时行情App,需要用到这个库
华为·音视频·harmonyos·鸿蒙
碧海银沙音频科技研究院12 小时前
ONNX 的全称Open Neural Network Exchange(开放神经网络交换格式)
人工智能·音视频·语音识别
IT小白杨13 小时前
短视频多账号运营环境管理指南:指纹浏览器与云手机技术解析
大数据·经验分享·web安全·智能手机·音视频·指纹浏览器
人工智能研究所13 小时前
正面硬刚 Seedance 2.5, 开源视频模型:LTX-2.5 用 6.8 秒生成 10 秒视频
人工智能·开源·音视频·文生视频·seedance·ltx-2.5
乐橙开放平台13 小时前
物业 SaaS 笔记:子账号 Policy 按通道隔离,At_ 管控面 / St_ 数据面治理 accessToken
后端·物联网·音视频
pillowss15 小时前
如何去除视频背景:5 种可靠的方法
人工智能·音视频
毕安格 - BimAngle15 小时前
国家电网 GIM 格式模型一键输出 3D Tiles (for Cesium) 和 glTF/glb 更新时间:2026-08-18
3d·gis·cesium·gltf·glb·3d tiles·gim
天天进步201515 小时前
Pixelle-Video 源码解析 #4:快速启动流程:uv、Streamlit、ffmpeg 分别负责什么?
ffmpeg·uv