javascript video to audio demo。前端视频转音频。FileReader,decodeAudioData,OfflineAudioContext

本文介绍如何使用JavaScript在前端将视频转换为音频。通过FileReader加载视频,decodeAudioData解码,再利用OfflineAudioContext重新渲染,将AudioBuffer转化为WAV格式,最后可以下载保存。提供了一个在线演示链接和GitHub项目源码。
摘要由CSDN通过智能技术生成


前言

javascript video to audio。前端视频转(提取)音频。使用FileReader加载视频,然后decodeAudioData对其进行解码,并使用OfflineAudioContext重新渲染,最后将audiobuffer转换为wav。

demo:https://237005722.github.io/video-to-audio/


一、引用参考

二、示例代码

1.视频转换(提取)音频

/***
 * video-to-audio
 * creater:qc
 * reference://github.com/mdn/webaudio-examples/tree/master/offline-audio-context-promise
*/
const videoToAudio = async(file) => {
   
  try {
   
    console.log('videoToAudio file', file)
    const fileData = new Blob([file]) // video file
    
    const arrayBuffer = await new Promise((resolve) => {
   
      const reader = new FileReader()
      reader.onload = ()=> {
   
        const arrayBuffer = reader.result
        resolve(arrayBuffer)
      }
      reader.readAsArrayBuffer(fileData)
    })
    console.log('arrayBuffer', arrayBuffer)
    
    const audioContext = new(window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext)()
    const decodedAudioData = await audioContext.decodeAudioData(arrayBuffer)
    console.log('decodedAudioData', decodedAudioData)
    const fileDuration = durationTrans(decodedAudioData.duration)
    console.log('fileDuration', fileDuration)

    const offlineAudioContext = new OfflineAudioContext(decodedAudioData.numberOfChannels, decodedAudioData.sampleRate * decodedAudioData.duration, decodedAudioData.sampleRate)
    const soundSource = offlineAudioContext.createBufferSource()
    soundSource.buffer = decodedAudioData
    soundSource.connect(offlineAudioContext.destination)
    soundSource.start()

    const renderedBuffer = await offlineAudioContext.startRendering()
    console.log('renderedBuffer', renderedBuffer) // outputs audiobuffer
    const wav = audioBufferToWav(renderedBuffer)
    
    const fileType = `wav`
    const fileName = `${
   file.name}.${
   fileType}`
    downloadWav(wav, fileName)
    return {
    fileName, fileType, fileDuration }
  } catch (error) 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值