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与javascript中的aes加密
May 22 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php牛逼的面试题分享
2013/01/18 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
javascript eval函数深入认识
2009/02/21 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
详解Python的Django框架中的中间件
2015/07/24 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
python flask框架实现重定向功能示例
2019/07/02 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python实现FLV视频拼接功能
2020/01/21 Python
Python中常见的数制转换有哪些
2020/05/27 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
函授毕业生自我鉴定
2013/11/06 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
超越自我演讲稿
2014/05/21 职场文书
个人综合鉴定材料
2014/05/23 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
Python中基础数据类型 set集合知识点总结
2021/08/02 Python