解决获取视频第一帧黑屏问题

文章目录

解决获取视频第一帧黑屏问题

废话不多说,直接上代码:

js 复制代码
<script setup>
const status = ref('请点击"添加视频"按钮添加视频')
const videoElement = ref(document.createElement('video'))
const currentImageSource = ref(null)

async function getImageByVideo() {
 videoElement.value.src = 'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c4/Physicsworks.ogv/Physicsworks.ogv.240p.vp9.webm'
  videoElement.value.crossOrigin = 'anonymous' // 处理跨域
  videoElement.value.preload = 'metadata'
  videoElement.value.muted = true
  videoElement.value.playsInline = true

  status.value = '视频加载中...'

  // 解决封面黑屏问题
  await new Promise((resolve) => {
    videoElement.value.addEventListener('loadeddata', resolve, { once: true })
  })

  // 设置当前时间确保获取有效帧
  videoElement.value.currentTime = 0.01

  // 等待视频跳转到指定时间
  await new Promise((resolve) => {
    videoElement.value.addEventListener('seeked', resolve, { once: true })
  })

  // 获取视频帧作为封面
  const canvas = document.createElement('canvas')
  canvas.width = videoElement.value.videoWidth
  canvas.height = videoElement.value.videoHeight
  const ctx = canvas.getContext('2d')
  ctx.drawImage(videoElement.value, 0, 0, canvas.width, canvas.height)

  // 创建封面图像
  const img = new Image()
  img.src = canvas.toDataURL('image/jpeg')
  img.onload = () => {
    currentImageSource.value = img
  }
}
</script>

核心代码

js 复制代码
  // 解决封面黑屏问题
  await new Promise((resolve) => {
    videoElement.value.addEventListener('loadeddata', resolve, { once: true })
  })

  // 设置当前时间确保获取有效帧
  videoElement.value.currentTime = 0.01

  // 等待视频跳转到指定时间
  await new Promise((resolve) => {
    videoElement.value.addEventListener('seeked', resolve, { once: true })
  })
相关推荐
learndiary7 天前
[其他] Linux技术视频分享11则,deepin 25 平台制作
linux·运维·视频
Hy行者勇哥9 天前
实用技术分享:6类白板录屏软件推荐,覆盖全场景需求
学习方法·视频
REDcker12 天前
HDR Vivid 技术介绍
数据库·算法·视频·sdr·屏幕·显示技术·dhr
春风细雨无声13 天前
基于FPGA实现PAL视频接口(附代码)
图像处理·fpga开发·视频
Hy行者勇哥14 天前
Seedance 全面解析:定义、使用指南、同类软件与完整攻略
人工智能·学习方法·视频
博客园团队17 天前
发布园子的第一个B站视频!提前祝大家春节快乐!
视频
小龙18 天前
【学习笔记】视频抽帧方法大全
笔记·学习·计算机视觉·视频·视频抽帧
nov4th21 天前
WebRTC实现无插件多端视频通话
java·spring boot·音视频·webrtc·实时音视频·html5·视频
Echo_NGC223723 天前
【FFmpeg 使用指南】Part 3:码率控制策略与质量评估体系
人工智能·ffmpeg·视频·码率
Echo_NGC22371 个月前
【FFmpeg使用指南】Part 1:核心架构与媒体流处理
ffmpeg·音视频·媒体·视频