You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不通过DOM操作获取视频文件的宽度和高度尺寸

视频文件无需渲染DOM获取宽高的实现方法

可以实现和图片类似的、无需插入DOM渲染即可获取原始宽高的效果,核心是利用视频元数据加载的事件回调,逻辑和你用Image对象获取图片尺寸的思路一致:全程在内存中处理,仅加载必要的元数据,不触发页面渲染。

完整实现代码

const getVideoDimensions = (videoUrl) => {
  return new Promise((resolve, reject) => {
    // 在内存中创建video元素,无需append到DOM树
    const video = document.createElement('video');
    // 仅预加载元数据,避免下载完整视频,降低性能开销
    video.preload = 'metadata';
    video.src = videoUrl;

    // 元数据加载完成后触发,此时已获取到视频原始宽高
    video.addEventListener('loadedmetadata', () => {
      const result = {
        width: video.videoWidth,
        height: video.videoHeight
      };
      // 清理内存资源
      video.remove();
      resolve(result);
    });

    // 处理加载异常
    video.addEventListener('error', (error) => {
      video.remove();
      reject(new Error(`视频元数据加载失败: ${error.message}`));
    });
  });
}

// 调用示例
getVideoDimensions('example-video.mp4')
  .then(dimensions => {
    console.log('视频原始宽高:', dimensions.width, dimensions.height);
  })
  .catch(err => {
    console.error(err);
  });

关键注意事项

  • 必须读取video.videoWidth和video.videoHeight属性,而非元素自带的width/height属性:前者是视频本身的原始分辨率,后者是元素在页面中的展示尺寸,默认值不代表视频真实参数
  • 跨域视频需要资源服务器配置正确的CORS响应头,否则会触发加载错误,规则和跨域图片的处理逻辑一致
  • 回调执行后主动调用video.remove()可以避免残留未完成的资源请求,减少内存占用

内容的提问来源于stack exchange,提问作者James Hudson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:27:01