首頁  >  文章  >  web前端  >  用NodeJS讓影片轉碼

用NodeJS讓影片轉碼

php中世界最好的语言
php中世界最好的语言原創
2018-04-14 15:03:551990瀏覽

這次帶給大家用NodeJS讓影片轉碼,用NodeJS讓影片轉碼的注意事項有哪些,下面就是實戰案例,一起來看一下。

影片轉碼就是一個先解碼,再編碼的過程,從而將原來的影片轉換成我們需要的影片。這種轉換可能包括各式(mp4/avi/flv等)、解析度、碼率、幀率等。

傳統的視訊轉碼中,很常用的工具是FFmpeg。 FFmpeg是一套可以用來錄製、轉換數位音頻、視頻,並能將其轉換為串流的開源電腦程式。

在nodejs中,也有FFmpeg,叫做node-fluent-ffmpeg。 node-fluent-ffmpeg是一個node上可用的ffmpeg,使用前必須先安裝了ffmpeg。

ffmpeg

# FFmpeg是一套可以用來錄製、轉換數位音頻、視頻,並能將其轉換為串流的開源電腦程式。採用LGPL或GPL授權。它提供了錄製、轉換以及串流影音的完整解決方案。它包含了非常先進的音訊/視訊編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec裡很多code都是從頭開始開發的

以下就來為大家介紹一下NodeJS實作影片轉碼的方法。

一、安裝FFmpeg(MAC下)

# 在MAC下,可以直接使用brew指令進行安裝:brew install ffmpeg。

安裝成功後,我們就可以在命令列進行,利用ffmpeg的指令進行視訊轉碼了。例如將input.avi轉碼成output.ts並設定視訊碼率640kbps,需要執行的指令如下:

ffmpeg -i input.avi -b:v 640k output.ts

二、node-fluent-ffmpeg模組基本上使用方法

# node-fluent-ffmpeg其實本質上就是透過nodejs在終端機中執行FFmpeg的指令。 node-fluent-ffmpeg的安裝和基本引入和其他npm模組相同。通過npm安裝後(npm install fluent-ffmpeg),使用require在js檔案中引用即可。基本使用如下:

var ffmpeg = require(‘fluent-ffmpeg'); 
var command = new ffmpeg(这里可以传入视频文件路径,或者流);

這樣就實例化了一個命令行,需要傳入要轉碼的視訊文件,也支援資料流的形式。

三、使用實例

# 以下是使用node-fluent-ffmpeg進行視訊轉碼的一個實例:

var ffmpeg = require('../index'); 
var command = ffmpeg('testvideo-5m.mpg') 
 // set video bitrate 
 .videoBitrate(1024) 
 // set aspect ratio 
 .aspect('16:9') 
 // set size in percent 
 .size('50%') 
 // set fps 
 .fps(24) 
 // set audio bitrate 
 .audioBitrate('128k') 
 // set audio codec 
 .audioCodec('libmp3lame') 
 // set number of audio channels 
 .audioChannels(2) 
 // set custom option 
 .addOption('-vtag', 'pX') 
 // set output format to force 
 .format('avi') 
 // setup event handlers 
 .on('end', function() { 
  console.log('file has been converted succesfully'); 
 }) 
 .on('error', function(err) { 
  console.log('an error happened: ' + err.message); 
 }) 
 // save to file 
 .save('outtest.avi');

node-fluent-ffmpeg可以進行鍊式調用,上面就在實例化後,鍊式設定了一系列的視訊屬性,最後監聽end事件,表示影片已經轉碼完成。完成後可呼叫save()方法將視訊檔案儲存到對應的目錄。

四、node-fluent-ffmpeg可以做什麼

# node-fluent-ffmpeg可以做ffmpeg能做的任何事情,對影片進行任何的處理。此外,配合nodejs,node-fluent-ffmpeg還可以做許多其他事情,例如讀取並動態返回影片長度、根據需求將影片轉碼成任意格式等。具體的各種方法可以到github上查看,上面有對方法的使用介紹。在使用時只要自取所需就可以很輕鬆的完成影片轉碼了。

五、影片轉碼的一些要素

上面的各個函數設定了影片的各個屬性,以下簡單為大家介紹影片轉碼中比較重要的一些屬性,以及它們對應的node-fluent-ffmpeg中的方法。

1.fps:即影片的幀率,表示1s中畫面刷新多少次。玩遊戲的時候都清楚如果fps低的話遊戲會很卡,這就是fps的作用。 fps在一定範圍內越高,則影片1s刷新的次數越高,在人眼中展現的就越流暢。這個屬性對應的方法是fps(),傳入想設定的幀率值即可。

2.解析度:用來設定視訊的大小,對應的方法是size(),傳入寬度x高度。

3.碼率:在影片領域中,一般而言碼率指的就是比特率。他表示資料傳輸時單位時間傳送的資料位數,單位kbps。這個數值影響的就是影片品質了,數值越大,影片的品質越高,但同時影片檔案的大小就會越大。因此我們在轉碼時要合理設定碼率,確保檔案大小不超過限制的情況下品質盡可能高。

4.格式:這個就不用多說了,透過format方法可以設定格式。                                         

「「本文時」」》案例中閱讀更多內容,更多精彩文章了!

推薦閱讀:

原生JS有哪些實作Ajax異步的方法

操作modal單次載入資料

在IE11下方使用canvas.toDataURL相容性問題的解決想法

以上是用NodeJS讓影片轉碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn