視頻轉(zhuǎn)碼就是一個(gè)先解碼,再編碼的過程,從而將原來的視頻轉(zhuǎn)換成我們需要的視頻。這種轉(zhuǎn)換可能包括各式(mp4/avi/flv等)、分辨率、碼率、幀率等。
為甕安等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及甕安網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、甕安網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
傳統(tǒng)的視頻轉(zhuǎn)碼中,很常用的工具是FFmpeg。FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。
在nodejs中,也有FFmpeg,叫做node-fluent-ffmpeg。node-fluent-ffmpeg是一個(gè)node上可用的ffmpeg,使用前必須先安裝了ffmpeg。
ffmpeg
FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開發(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ì)上就是通過nodejs在終端中執(zhí)行FFmpeg的命令。node-fluent-ffmpeg的安裝和基本引入和其他npm模塊相同。通過npm安裝后(npm install fluent-ffmpeg),使用require在js文件中引用即可?;臼褂萌缦拢?/p>
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)聽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中畫面刷新多少次。玩游戲的時(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è)置碼率,保證文件大小不超過限制的情況下質(zhì)量盡可能高。
4.格式:這個(gè)就不用多說了,通過format方法可以設(shè)置格式。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站名稱:NodeJS實(shí)現(xiàn)視頻轉(zhuǎn)碼的示例代碼
本文URL:http://www.rwnh.cn/article18/jsdggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)