亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nodejs實現截取上傳視頻中一幀作為預覽圖片

發布時間:2020-09-27 10:58:32 來源:腳本之家 閱讀:265 作者:yanglang1987500 欄目:web開發

客戶有個上傳視頻的需求,上傳的視頻呢,需要能在線播放并且列表中必須出現類似優酷等視頻首頁上的那種縮略圖,成品如下圖所示:

nodejs實現截取上傳視頻中一幀作為預覽圖片

當然了,上傳視頻的界面就不貼出來了,畢竟我們這篇文章的重點不在于如何上傳,而在于如何用nodejs截取視頻中的幀!~

這里我們需要一個開源的第三方插件----大名鼎鼎的多媒體編解碼框架ffmpeg,需要安裝在服務器上由nodejs調用,

代碼貼出如下:

function fecthVideoThumbnail(entryid, index){ 
 var filename = path.join(imageDir, entryid, index + videoSuffix); 
 var thumb = path.join(imageDir, entryid, "overview",index + thumbSuffix); 
 var thumbPath = path.join(imageDir, entryid, "overview"); 
 if (!fs.existsSync(thumbPath)) { 
  <span > </span>fs.mkdirSync(thumbPath); 
 <span > </span>} 
 var that = this; 
 filename = filename.replaceAll("\\\\","\\\\"); 
 var cmdthumb = thumb.replaceAll("\\\\","\\\\"); 
 if(!fs.existsSync(thumb)){ 
  exec("ffmpeg -ss 00:00:10 -i "+filename+" -y -f image2 -t 0.001 "+cmdthumb+"", function() { 
    console.log(arguments[0]); 
    console.log('success'); 
    readFileEntry(thumb,that.res); 
  }); 
 }else{ 
  readFileEntry(thumb,that.res); 
 } 
  
} 
function readFileEntry(filename, response) { 
 path.exists(filename, function(exists) { 
  if (!filename || !exists) { 
   response.writeHead(404); 
   response.end(); 
   return; 
  } 
  fs.readFile(filename, "binary", function(err, file) { 
   if (err) { 
    response.writeHead(404); 
    response.end(); 
    return; 
   } 
 
   var contentType = 'none'; 
   var ext = path.extname(filename); 
   switch (ext) { 
   case ".xml": 
    contentType = 'application/xml;charset=utf-8'; 
    break; 
   case ".json": 
    contentType = 'application/json;charset=utf-8'; 
    break; 
   case ".png": 
    contentType = 'image/png'; 
    break; 
   case ".jpg": 
    contentType = 'image/jpeg'; 
    break; 
   case ".flv": 
    contentType = "video/flv"; 
    break; 
   } 
    
   response.writeHead(200, { 
    'Content-Type' : contentType, 
    'Content-Length' : file.length, 
    'Accept-Ranges' : 'bytes', 
    'Server' : 'Microsoft-IIS/7.5', 
    'X-Powered-By' : 'ASP.NET' 
   }); 
   response.write(file, "binary"); 
   response.end(); 
 
  }); 
 }); 
} 

重點就是這段

exec("ffmpeg -ss 00:00:10 -i "+filename+" -y -f image2 -t 0.001 "+cmdthumb+"", function() { 
    console.log(arguments[0]); 
    console.log('success'); 
    readFileEntry(thumb,that.res); 
  }); 

exec函數可以像cmd DOS命令臺一樣直接執行系統命令,ffmpeg提供的正是這樣的接口。具體的API可以參照ffmpeg的文檔,-ss代表指定視頻初始進度,-i代表入參視頻文件位置,-y代表Overwrite output files without asking.直接覆蓋已存在文件而不必詢問,-t代表截取時長(圖片的話0.001即可),-f代表
-f fmt (input/output)
Force input or output file format. The format is normally auto detected for input files and guessed from the file extension for output files, so this option is not needed in most cases.

強制輸出文件格式,基本上用不到……最后cmdthumb代表輸出文件名。nodejs的exec執行完成之后,會通知回調函數。此時返回生成的縮略圖即可,將此過程寫成rest服務,直接將url填充在img標簽的src屬性中即可!

nodejs寫這種服務端程序非常簡單,方便,輕量。比java要簡潔得多,并且不需要像tomcat那么麻煩。唯一的缺點可能就是調試比較麻煩了……

另外,上圖中所示的視頻服務我也是用nodejs實現的,效率還不錯~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门峡市| 贵港市| 米林县| 乌兰察布市| 鄂伦春自治旗| 独山县| 尖扎县| 盐边县| 钟山县| 清流县| 贺兰县| 怀化市| 鞍山市| 大关县| 察隅县| 嘉禾县| 常州市| 重庆市| 桑植县| 奎屯市| 浦城县| 桂林市| 沙湾县| 黄龙县| 建水县| 黄大仙区| 绥化市| 惠安县| 虎林市| 大埔县| 中牟县| 师宗县| 永顺县| 威海市| 南平市| 滦平县| 陕西省| 东阿县| 安国市| 洛隆县| 滁州市|