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

文章目录

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

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

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 })
  })
相关推荐
VidDown9 小时前
VidDown 工具站:视频分辨率技术
javascript·网络·编辑器·音视频·视频编解码·视频
qq3621967051 天前
谷歌SEO教程: 新网站如何做SEO规划?|零流量的网站如何通过SEO快速获取流量?|独立站运营
视频
小北的AI科技分享2 天前
AI赋能超薄旗舰:当人工智能遇上智能手机新形态
应用·视频·智能
VidDown2 天前
VidDown 工具站:免费视频处理与开发者工具箱
网络协议·编辑器·音视频·视频编解码·视频
10WTW014 天前
QQ本地缓存机制初步探寻
缓存·视频·md5
VidDown5 天前
热门短视频平台的视频编码技术解(VidDown)
网络协议·编辑器·音视频·视频编解码·视频
VidDown5 天前
VidDown 使用介绍:一个免费、本地化的在线工具集
javascript·编辑器·音视频·视频编解码·视频
小贺儿开发7 天前
Unity VideoPlayer 播放控制器
unity·编辑器·播放器·视频·工具·videoplayer·互动
smart199810 天前
真实使用案例,动漫影视公司,影视后期制作NAS共享
视频·数码科技
shandianchengzi15 天前
【记录】LosslessCut|Linux下配置开源无损剪辑软件 LosslessCut AppImage 命令行启动和设置图标
linux·运维·服务器·音视频·视频·剪辑