NodeJS实现视频转码的示例代码


Posted in NodeJs onNovember 18, 2017

视频转码就是一个先解码,再编码的过程,从而将原来的视频转换成我们需要的视频。这种转换可能包括各式(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', '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可以进行链式调用,上面就在实例化后,链式设置了一系列的视频属性,最后监听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方法可以设置格式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 #NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 #NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 #NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 #NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 #NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 #NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 #NodeJs
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
YII框架http缓存操作示例
2019/04/29 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
查看django版本的方法分享
2018/05/14 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
专升本自我鉴定
2013/10/10 职场文书
自荐信的两点禁忌
2013/10/30 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
大学同学会活动方案
2014/08/20 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
高三英语复习计划
2015/01/19 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL