欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的示例代碼

 更新時(shí)間:2017年11月18日 14:18:50   作者:fareise  
本篇文章主要介紹了NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

視頻轉(zhuǎn)碼就是一個(gè)先解碼,再編碼的過(guò)程,從而將原來(lái)的視頻轉(zhuǎn)換成我們需要的視頻。這種轉(zhuǎn)換可能包括各式(mp4/avi/flv等)、分辨率、碼率、幀率等。

傳統(tǒng)的視頻轉(zhuǎn)碼中,很常用的工具是FFmpeg。FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。

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

ffmpeg

FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開(kāi)發(fā)的

下面就為大家介紹一下NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的方法。

一、安裝FFmpeg(MAC下)

在MAC下,可以直接使用brew命令進(jìn)行安裝:brew install ffmpeg。

安裝成功后,我們就可以在命令行進(jìn)行,利用ffmpeg的命令進(jìn)行視頻轉(zhuǎn)碼了。比如將input.avi轉(zhuǎn)碼成output.ts并設(shè)置視頻碼率640kbps,需要執(zhí)行的命令如下:

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

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

node-fluent-ffmpeg其實(shí)本質(zhì)上就是通過(guò)nodejs在終端中執(zhí)行FFmpeg的命令。node-fluent-ffmpeg的安裝和基本引入和其他npm模塊相同。通過(guò)npm安裝后(npm install fluent-ffmpeg),使用require在js文件中引用即可。基本使用如下:

var ffmpeg = require(‘fluent-ffmpeg'); 
var command = new ffmpeg(這里可以傳入視頻文件路徑,或者流); 

這樣就實(shí)例化了一個(gè)命令行,需要傳入要轉(zhuǎn)碼的視頻文件,也支持?jǐn)?shù)據(jù)流的形式。

三、使用實(shí)例

下面是使用node-fluent-ffmpeg進(jìn)行視頻轉(zhuǎn)碼的一個(gè)實(shí)例:

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', 'DIVX') 
 // 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可以進(jìn)行鏈?zhǔn)秸{(diào)用,上面就在實(shí)例化后,鏈?zhǔn)皆O(shè)置了一系列的視頻屬性,最后監(jiān)聽(tīng)end事件,表示視頻已經(jīng)轉(zhuǎn)碼完成。完成后可調(diào)用save()方法將視頻文件存儲(chǔ)到相應(yīng)的目錄。

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

node-fluent-ffmpeg可以做ffmpeg能做的任何事情,對(duì)視頻進(jìn)行任何的處理。此外,配合nodejs,node-fluent-ffmpeg還可以做許多其他事情,比如讀取并動(dòng)態(tài)返回視頻長(zhǎng)度、按照需求將視頻轉(zhuǎn)碼成任意格式等。具體的各種方法可以到github上查看,上面有對(duì)方法的使用介紹。在使用時(shí)只要自取所需就可以很輕松的完成視頻轉(zhuǎn)碼了。

五、視頻轉(zhuǎn)碼的一些要素

上面的各個(gè)函數(shù)設(shè)定了視頻的各個(gè)屬性,下面簡(jiǎn)單為大家介紹一下視頻轉(zhuǎn)碼中比較重要的一些屬性,以及它們對(duì)應(yīng)的node-fluent-ffmpeg中的方法。

1.fps:即視頻的幀率,表示1s中畫(huà)面刷新多少次。玩游戲的時(shí)候都清楚如果fps低的話游戲會(huì)很卡,這就是fps的作用。fps在一定范圍內(nèi)越高,則視頻1s刷新的次數(shù)就越高,在人眼中展現(xiàn)的就越流暢。這個(gè)屬性對(duì)應(yīng)的方法是fps(),傳入想設(shè)定的幀率值即可。

2.分辨率:用于設(shè)定視頻的大小,對(duì)應(yīng)的方法是size(),傳入寬度x高度。

3.碼率:在視頻領(lǐng)域中,一般而言碼率指的就是比特率。他表示數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),單位kbps。這個(gè)值影響的就是視頻質(zhì)量了,該值越大,視頻的質(zhì)量越高,但與此同時(shí)視頻文件的大小就會(huì)越大。因此我們?cè)谵D(zhuǎn)碼時(shí)要合理設(shè)置碼率,保證文件大小不超過(guò)限制的情況下質(zhì)量盡可能高。

4.格式:這個(gè)就不用多說(shuō)了,通過(guò)format方法可以設(shè)置格式。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js API詳解之 repl模塊用法實(shí)例分析

    Node.js API詳解之 repl模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 repl模塊用法,結(jié)合實(shí)例形式分析了Node.js API中repl模塊基本功能、函數(shù)、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • node.js中的fs.fchmod方法使用說(shuō)明

    node.js中的fs.fchmod方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.fchmod方法使用說(shuō)明,本文介紹了fs.fchmod的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js中g(shù)et和post接口教程

    node.js中g(shù)et和post接口教程

    這篇文章主要介紹了node.js中g(shù)et和post接口學(xué)習(xí),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • nodejs腳本centos開(kāi)機(jī)啟動(dòng)實(shí)操方法

    nodejs腳本centos開(kāi)機(jī)啟動(dòng)實(shí)操方法

    在本篇文章里小編給大家整理的是關(guān)于nodejs腳本centos開(kāi)機(jī)啟動(dòng)實(shí)操方法,有興趣的朋友們參考下。
    2020-03-03
  • linux 下以二進(jìn)制的方式安裝 nodejs

    linux 下以二進(jìn)制的方式安裝 nodejs

    這篇文章主要介紹了linux 下以二進(jìn)制的方式安裝 nodejs,文中給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Node.js模塊化的使用詳細(xì)介紹

    Node.js模塊化的使用詳細(xì)介紹

    nodejs中的模塊化是指將每個(gè)js文件會(huì)被認(rèn)為單獨(dú)一個(gè)的模塊。模塊之間是互相不可見(jiàn)的。如果一個(gè)模塊需要使用另一個(gè)模塊,那么需要通過(guò)指定語(yǔ)法來(lái)引入要使用的模塊,而且只能使用引入模塊所暴露的內(nèi)容
    2022-08-08
  • Egret引擎開(kāi)發(fā)指南之發(fā)布項(xiàng)目

    Egret引擎開(kāi)發(fā)指南之發(fā)布項(xiàng)目

    當(dāng)我們制作完成一個(gè)項(xiàng)目后,我們需要把項(xiàng)目發(fā)布為正式版本,并放到網(wǎng)上提供給玩家。那么在egret中簡(jiǎn)單的使用build命令并非打包最終的正式版文件。你還需要進(jìn)行最終的發(fā)布操作。
    2014-09-09
  • 詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM

    詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM

    這篇文章主要為大家介紹了詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 前端Electron新手入門教程詳解

    前端Electron新手入門教程詳解

    這篇文章主要介紹了Electron新手入門教程詳解,首先圍繞Electron框架的關(guān)鍵知識(shí)點(diǎn)進(jìn)行詳細(xì)講解,然后對(duì)DEMO程序進(jìn)行分析,讓前端開(kāi)發(fā)人員對(duì)使用Electron開(kāi)發(fā)桌面應(yīng)用程序有一個(gè)初步的了解。,需要的朋友可以參考下
    2019-06-06
  • 從零開(kāi)始學(xué)習(xí)Node.js系列教程四:多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端示例

    從零開(kāi)始學(xué)習(xí)Node.js系列教程四:多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端示例

    這篇文章主要介紹了Node.js多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端,結(jié)合具體實(shí)例形式分析了nodejs客戶端提交與服務(wù)端處理實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04

最新評(píng)論