js截取video視頻某一幀做封面的簡(jiǎn)單案例(附完整代碼)
可以使用 canvas
元素來(lái)截取視頻某一幀并生成封面。
首先,在 video
標(biāo)簽上設(shè)置視頻源地址和自動(dòng)播放屬性:
<video src="video.mp4" autoplay></video>
然后,在 canvas
標(biāo)簽上定義寬高和樣式,并通過(guò) JavaScript 獲取視頻元素和 canvas 元素:
<canvas width="640" height="360" style="display:none;"></canvas> <script> const video = document.querySelector('video'); const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d'); </script>
接著,定義一個(gè)函數(shù)來(lái)截取視頻某一幀,并將其渲染到 canvas 上:
<script> function captureFrame() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); } </script>
在需要生成封面的地方調(diào)用該函數(shù)即可:
<button onclick="captureFrame()">生成封面</button>
最后,將 canvas 元素轉(zhuǎn)換為圖片元素并插入到頁(yè)面中:
<script> function captureFrame() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); const dataURL = canvas.toDataURL(); const img = document.createElement('img'); img.src = dataURL; document.body.appendChild(img); } </script>
完整代碼如下:
<video src="video.mp4" autoplay></video> <canvas width="640" height="360" style="display:none;"></canvas> <button onclick="captureFrame()">生成封面</button> <script> const video = document.querySelector('video'); const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d'); function captureFrame() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); const dataURL = canvas.toDataURL(); const img = document.createElement('img'); img.src = dataURL; document.body.appendChild(img); } </script>
附:js截取視頻第一幀作為封面
在vue的v-for
循環(huán)中,直接video
標(biāo)簽進(jìn)行列表渲染時(shí),滾動(dòng)列表頁(yè)面會(huì)很卡,所以最好以img
標(biāo)簽渲染視頻封面圖,點(diǎn)擊后再播放視頻。
具體代碼如下:
//取視頻的第一幀作為封面 function cutPicture(item) { //這里的item是列表的每一項(xiàng) let video = document.createElement("video"); video.style = "position:fixed; top: 9999px;left:9999px;z-index:-9999"; video.preload = "metadata"; video.currentTime = 1; //截取的視頻第一秒作為圖片 video.src = item.videoUrl; video.setAttribute("crossOrigin", "anonymous"); video.width = 113; video.height = 75; document.body.appendChild(video); video.onloadeddata = function () { let canvas = document.createElement("canvas"); canvas.width = 113; canvas.height = 75; canvas.getContext("2d").drawImage(video, 0, 0, video.clientWidth, video.clientHeight); var oGrayImg = canvas.toDataURL("image/jpeg"); item.imgUrl = oGrayImg; //這里輸出的imgUrl就是視頻的封面圖 this.remove(); }; return item; }
總結(jié)
到此這篇關(guān)于js截取video視頻某一幀做封面的文章就介紹到這了,更多相關(guān)js截取video視頻幀做封面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
transport.js和jquery沖突問(wèn)題的解決方法
這篇文章主要介紹了transport.js和jquery沖突問(wèn)題的解決方法,需要的朋友可以參考下2015-02-02使用window.prompt()實(shí)現(xiàn)彈出用戶(hù)輸入的對(duì)話(huà)框
window對(duì)象的最后一種對(duì)話(huà)框是提示對(duì)話(huà)框,它顯示了預(yù)先設(shè)置的信息并提供文本域供用戶(hù)輸入應(yīng)答。它包括兩個(gè)按鈕,即Cancel和Ok,允許用戶(hù)用兩個(gè)相反的期望值來(lái)關(guān)閉這個(gè)對(duì)話(huà)框:取消整個(gè)操作或接收輸入到對(duì)話(huà)框中的文本2015-04-04js實(shí)現(xiàn)導(dǎo)航欄中英文切換效果
本篇文章主要分享了javascript實(shí)現(xiàn)導(dǎo)航欄中英文切換效果的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01一文詳解preact的高性能狀態(tài)管理Signals
這篇文章主要介紹了一文詳解preact的高性能狀態(tài)管理Signals,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2022-09-09ES6中Promise、async、await用法超詳細(xì)講解指南
async+await是ES6中引入的異步編程解決方案,旨在解決異步編程中的回調(diào)地獄問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于ES6中Promise、async、await用法超詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下2024-08-08js canvas實(shí)現(xiàn)驗(yàn)證碼并獲取驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了js canvas實(shí)現(xiàn)驗(yàn)證碼并獲取驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09js限制輸入框只能輸入數(shù)字(onkeyup觸發(fā))
這篇文章主要介紹了通過(guò)js實(shí)現(xiàn)input輸入框只能輸入數(shù)字的實(shí)現(xiàn)方法,主要是通過(guò)正則表達(dá)式替換實(shí)現(xiàn),需要的朋友可以參考下2018-09-09在實(shí)例中重學(xué)JavaScript事件循環(huán)
這篇文章主要介紹了在實(shí)例中重學(xué)JavaScript事件循環(huán),幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2020-12-12