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

文章目录

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

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

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 })
  })
相关推荐
VidDown2 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
ck01357910 小时前
图片抠图怎么做?从背景去除到透明 PNG 的实用教程
人工智能·测试工具·音视频·媒体·视频
ck01357917 小时前
视频转 GIF 的基本流程与文件大小优化
前端·测试工具·html·音视频·视频
Evanfu02163 天前
整部短剧文件怎么管理:目录、命名与版本规则
aigc·音视频·视频·机器翻译·自动翻译
Evanfu02163 天前
短剧硬字幕如何批量 OCR:从字幕区到整剧校对
aigc·音视频·视频·机器翻译·自动翻译
Evanfu02163 天前
AI 短剧出海前要检查哪些版权、肖像和声音权利?
自然语言处理·aigc·音视频·视频·机器翻译·自动翻译
Hello_Pyhx4 天前
Veyra 电影、动漫补帧与画质增强教程:软件优势、配置和导出验证
视频·动漫·帧率·影视·补帧
2601_955662464 天前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频
VidDown6 天前
上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
python·django·音视频·状态模式·实时音视频·视频编解码·视频
蜕变的土豆6 天前
工业监控RTSP取流-实践指南
c++·视频