js截取video視頻某一幀做封面的簡單案例(附完整代碼)
可以使用 canvas
元素來截取視頻某一幀并生成封面。
首先,在 video
標簽上設(shè)置視頻源地址和自動播放屬性:
<video src="video.mp4" autoplay></video>
然后,在 canvas
標簽上定義寬高和樣式,并通過 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>
接著,定義一個函數(shù)來截取視頻某一幀,并將其渲染到 canvas 上:
<script> function captureFrame() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); } </script>
在需要生成封面的地方調(diào)用該函數(shù)即可:
<button onclick="captureFrame()">生成封面</button>
最后,將 canvas 元素轉(zhuǎn)換為圖片元素并插入到頁面中:
<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
標簽進行列表渲染時,滾動列表頁面會很卡,所以最好以img
標簽渲染視頻封面圖,點擊后再播放視頻。
具體代碼如下:
//取視頻的第一幀作為封面 function cutPicture(item) { //這里的item是列表的每一項 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用window.prompt()實現(xiàn)彈出用戶輸入的對話框
window對象的最后一種對話框是提示對話框,它顯示了預(yù)先設(shè)置的信息并提供文本域供用戶輸入應(yīng)答。它包括兩個按鈕,即Cancel和Ok,允許用戶用兩個相反的期望值來關(guān)閉這個對話框:取消整個操作或接收輸入到對話框中的文本2015-04-04一文詳解preact的高性能狀態(tài)管理Signals
這篇文章主要介紹了一文詳解preact的高性能狀態(tài)管理Signals,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的朋友可以參考一下2022-09-09ES6中Promise、async、await用法超詳細講解指南
async+await是ES6中引入的異步編程解決方案,旨在解決異步編程中的回調(diào)地獄問題,下面這篇文章主要給大家介紹了關(guān)于ES6中Promise、async、await用法超詳細講解的相關(guān)資料,需要的朋友可以參考下2024-08-08js限制輸入框只能輸入數(shù)字(onkeyup觸發(fā))
這篇文章主要介紹了通過js實現(xiàn)input輸入框只能輸入數(shù)字的實現(xiàn)方法,主要是通過正則表達式替換實現(xiàn),需要的朋友可以參考下2018-09-09