Rat's

云转码切片express-ffmpeg+CMS一体化系统安装教程
说明:云转码系统估计很多人知道,博主体验过七彩云、FFMpeg WebUI等云转码,感觉都不是很适合自己,而且好像...
扫描右侧二维码阅读全文
12
2018/09

云转码切片express-ffmpeg+CMS一体化系统安装教程

说明:云转码系统估计很多人知道,博主体验过七彩云、FFMpeg WebUI等云转码,感觉都不是很适合自己,而且好像都不更新了,特别是FFMpeg WebUI,貌似很久前就一直停留在0.9.6版本,恰好最近看到了个基于nodejs制作的开源免费的云转码切片系统,功能上基本可以满足个人日常需求了,而且博主感觉nodejs的转码切片速度比现有的很多php转码程序都快些,这里就分享下,给有需求的人用。

项目介绍

该云转码不再是简单的云转码系统,而是CMS系统+云转码系统一体化,自带整个完备的并且对移动端友好的,而且非常利于SEO优化的自适应CMS系统,根据后台的分类系统和门户CMS管理系统,直接在首页达成完备的在线视频播放系统,适用于在线教育、企业内部培训视频、在线视频自媒体门户等多种运用方向。

如果你不想使用CMS,也可以单独当它是一个可以在线视频转码的工具,对视频进行在线格式转换,很适合用来做一个视频转码的网站。

  • 实现大文件分块上传,批量上传。
  • 实现服务器端自动动态码率转码并且切片,完成后会自动删除原视频文件。
  • 实现批量添加水印和字幕,和同时处理。
  • 实现截图,默认自动生成四张截图。
  • 一键获取分享链接,设置防盗链,token防盗链或者仅允许指定域名iframe调用。
  • ts切片文件域名分发,负载均衡,支持无限多服务器同步分发。

开源版官网:https://ffmpeg.moejj.com/
开源版演示:https://www.moejj.com

收费加强版

目前开源版已停止更新,如果需要更强的功能,比如去水印/跑马灯,加跑马灯等众多功能,可直接选择更强的纯净版和高级版程序,完全不一样的界面和体验,超优的售后,任何系统问题均可以协助或帮你解决。

官方网站:https://www.moemv.com/
高级版官网:https://www.efvcms.com/

截图

请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

更新

【2019.1.17】
更新部分安装步骤,使出错率更小。

为什么要使用云转码

传统视频如果没有正确的压缩,一般来说尺寸非常大,动则3Gb4Gb的大小,再者因为视频需要在网站中进行播放,传统中如果放置常规的flv或者mp4格式,那么浏览器会一直进行缓存,并且在缓存在一定播放长度之后才会进行播放,这样会消耗更多的带宽和让用户等待更长的时间,所以转码之后再进行切片是非常必须的,一来无损的压缩视频文件使其占用磁盘尺寸更小,并且基于hls格式,也是M3u8格式中储存了所有ts切片列表,这种模式加载,只需要加载第一个ts切片视频就可以开始播放,这样就使用户等待的时间更少,减少服务器带宽使用,并且画质的损失很小。这也就是为什么现在大部分视频网站都是使用hls格式来播放的。

具体功能

  • 后台云转码加切片,运用最精简的代码,做成最快的转码+切片功能。
  • 秒切功能,切片速度领先所有市面收费云转码系统。
  • 视频分类、视频筛选、视频搜索,后台一应俱全。
  • 防盗链、token防盗链,多重防盗链,避免流量损失,可以设置指定域名只能iframe调用。
  • 字幕烧录,水印烧录,超级简单的操作,即可将字幕烧录进视频或者添加水印到视频中。
  • 支持vtt字幕,后台可以根据不同的视频上传不同的vtt字幕,前台播放自动加载字幕。
  • 视频截图,后台配置截图数,云转码切片的时候自动截图。
  • ts分发,多服务器同步内容,ts文件自动循环加域名前缀,负载均衡。
  • cms系统配置,站点名称设置、seo标题设置、seokeywords设置,seodescription设置,前台显示截图设置,前台自动生成cms系统,自适应布局,针对移动端优化,seo效果极佳。

新增功能

#增加会员系统
增加会员系统,可以不开启CMS,独立开启会员系统,双向验证,安全可靠,后台可以配合卡劵生成,前台用户使用卡劵进行升级。

#真正意义上的权限系统
路由层面的权限系统,非网上的播放器假权限,根据权限不同,相同的M3U8播放文件返回不同的内容,比如普通会员只能播放3分钟,就只会返回3分钟的切片内容,升级之后才会返回完整的切片内容。

#卡劵系统
后台设定卡劵生成,可以设置开通会员时间,用户前台使用即可升级到对应的会员,到期之后权限失效,需要重新开通,如果连续使用则是累加会员时间。

安装

如果你觉得安装很困难,想很快安装好,可以使用博主写的Docker镜像,安装教程:点击访问

安装教程官网其实有,不过仅有Ubuntu的手动教程,其它系统都没有,博主发现该程序所需的大部分环境宝塔面板均可以直接安装,鉴于为小白着想,这里就用宝塔面板安装该程序,支持的系统也多。

所需环境:nodejsexpressjsmongoDbffmpegRedis

1、安装宝塔

#Centos系统
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh
#Ubuntu系统
wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && sudo bash install.sh
#Debian系统
wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && bash install.sh

安装完成后,进入面板,点击左侧软件管理,然后安装MongoDbRedisNginx(使用域名访问才需要安装,反之不用)。注意Debian安装MongoDb之前还需要使用命令apt install sudo,不然可能存在MongoDb启动不了的情况。

2、安装ffmpeg

wget https://www.moerats.com/usr/down/ffmpeg/ffmpeg-git-$(getconf LONG_BIT)bit-static.tar.xz
tar xvf ffmpeg-git-*-static.tar.xz
mv ffmpeg-git-*/ffmpeg  ffmpeg-git-*/ffprobe /usr/bin/
rm -rf ffmpeg-git-*

3、安装Nodejs

#Debian/Ubuntu系统
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt install -y nodejs git

#Centos系统
curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum install nodejs git -y

安装PM2express

npm install -g pm2 express

4、创建数据库
创建之前建议去面板软件管理那里找到MongoDb数据库重启一下。

#这里数据库名,用户和密码都是ffmpeg
mongo
use ffmpeg
db.createUser({user:"ffmpeg",pwd:"ffmpeg",roles:[{role:"readWrite",db:"ffmpeg"}]})
db.auth("ffmpeg","ffmpeg")

如果显示1则增加用户正确,再使用Ctrl+D退出。这里如果有No such file or directory报错,请检查下数据库运行状态。

5、配置云转码

git clone https://gitee.com/quazero/express-ffmpeg.git
cd express-ffmpeg
#创建config文件夹
mkdir config
cd config

创建并编辑auth.js配置文件:

nano auth.js

将以下代码复制进去:

#该配置比很早的版本多了三个设置项,很多人出错就在这里,secret是session需要的秘钥,login是后台登陆地址,loginmsg 是后台未登录显示的内容,默认是404。
module.exports = {
    user: "admin",
    password: "admin",
    db: "ffmpeg",
    dbuser: "ffmpeg",
    dbpassword: "ffmpeg",
    secret: "yoursecret",
    login: "/adminlogin",
    loginmsg: "404 Not Found"
};

再使用Ctrl+XY确认退出编辑模式,参数从上往下依次是登陆云转码平台的账号,密码,数据库,数据库用户名,数据库密码。本教程安装的mongodb数据库为ffmpeg,用户名和密码都是ffmpeg,可以自行进行修改。

6、安装并运行云转码

cd /root/express-ffmpeg
npm install
#如果服务器重启,则必须在express-ffmpeg源码文件里重新运行命令启动
pm2 start bin/www -i 0

7、反向代理
点击左侧网站,添加站点,然后再点击添加好了的域名名称,这时候就进入了站点配置,点击反向代理,目标URL填入http://127.0.0.1:3000,再启用反向代理即可。

8、站点配置
最后打开xx.com/adminlogin,输入设定的账号密码,本教程设置的是adminadmin,进入之后点击设置,转码设置需要绑定域名,截图数需大于0,然后域名分发可以不设置,但需要提交下、CMS设置也需要绑定域名,播放器设置需要关闭强制QQ浏览器播放,当然其它设置需要自行修改,不然视频很可能因为某个设置的问题放不了。

最后这里要说下的就是,如果你使用后,心理有个疑问,为什么转码速度这么慢,或者很慢?那么就意味着你需要换一个强一点的CPU独立服务器,切勿用VPSVPSCPU限制很多,如果你拿来转码,很有可能你的VPS会被暂停,CPU选择可参考跑分榜→传送门

当然你要是只用秒切功能的话,对CPU要求就不是那么大了,不是很耗资源。

最后如果你只是玩玩,那建议使用开源版,如果正式使用,或者想要功能多,那建议选择纯净版或者高级版。

Vultr新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2021 年 02 月 25 日 08 : 09 PM

发表评论 取消回复

311 条评论

  1. 爱看动漫的小梁

    对了,微信可否一加?

  2. 爱看动漫的小梁

    奇怪?腾讯云
    版本号:CentOS Linux 7.2.1511 (Core)
    远程ssh会显示:root@VM_8_20_centos ~
    耗时:38分钟完成云转码的全部安装,环境全部由宝塔完成安装。
    我靠!看来宝塔对腾讯云的主机兼容性真心好,云转码启动完全无任何问题!

  3. 爱看动漫的小梁

    如果npm命令到一半卡住不动怎么解决

    1. Rat's
      @爱看动漫的小梁

      断开重新运行,或者等。

      1. 爱看动漫的小梁
        @Rat's

        那个,腾讯云只需要38分钟就完全安装并运行

      2. 爱看动漫的小梁
        @Rat's

        duan kai重新运行是什么意思

      3. 爱看动漫的小梁
        @Rat's

        我等了几个小时

  4. 爱看动漫的小梁

    妈耶,不用宝塔安装PM2了,上次利用腾讯云实验室也就是体验1小时机器,都可以在一小时内完成安装环境与云转码,但我等了3小时还是卡在NOW Using node v10.14.1(npm v6.4.1)这就不动了,MongoDB我觉得勉强可以继续宝塔,但PM2老是卡住,已经耗了2天了

    1. Rat's
      @爱看动漫的小梁

      Mongodb用宝塔问题不大,Nodejs手动安装可以解决很多问题。

  5. 爱看动漫的小梁

    要想成功安装云转码,并且运行不占100%
    01.多尝试安装宝塔与环境,直到云转码启动正常不占用100%(CPU)。
    02.手动安装环境为最佳!

    友情说明:我那次上传了48个视频,完美运行(已重装宝塔与环境还有云转码n次)

    1. 落伍者
      @爱看动漫的小梁

      各种失败,docker成功。一直想手动弄环境,可是一直没成功

      1. 爱看动漫的小梁
        @落伍者

        相信我,手动比容器模式好多,但前提是,你经得起折磨,经不起就勉为其难的容器模式吧!

      2. Rat's
        @落伍者

        这个要是不容易出错的话,我也不会专门花时间做Docker镜像。

    2. Rat's
      @爱看动漫的小梁

      辛苦了,这个提示等后面的人看到吧。

  6. 爱看动漫的小梁

    前天由于存储硬盘分区扩容失败后,已经对虚拟机进行了重新安装云转码,结果,启动100%CPU,要么就是安装命令一直卡在一个地方,要么宝塔MongoDB数据库建立成功却不显示已创建的数据库要么PM2异常安装,看来是宝塔各种问题导致就算安装成功,启动云转码也是100%CPU!

    1. Rat's
      @爱看动漫的小梁

      是的,有时候宝塔对这些是有些问题,但对于会玩的来说,不算啥问题,手动方法我已经写在文章最后面了,你可以看下。

      1. 爱看动漫的小梁
        @Rat's

        会玩的,压根没问题,对于我们这些不熟悉的人来说,不太好搞!

        1. Rat's
          @爱看动漫的小梁

          所以我额外在下面补了部分手动教程,基本上坑都在那里。

  7. 阿远

    我的N遍错误。

    1. Rat's
      @阿远

      看来宝塔不是很适合装Nodejs和Mongodb,我加点手动教程吧。

      1. 小飞飞飞飞飞
        @Rat's

        是不是不需要用宝塔安装PM2管理器了呀
        secret: "yoursecret", 这个要替换吗。。。
        求指点 。。。。。。。。

        1. Rat's
          @小飞飞飞飞飞

          是的,不需要安装pm2了。

          1. 小飞飞飞飞飞
            @Rat's

            自动截图正常。。。视频也显示了 就是不能播放视频。点击播放没啥反应,,。。
            大佬这是那的姿势不对呀

            1. Rat's
              @小飞飞飞飞飞

              设置那里要设置下播放器。

  8. shaoye

    终于搭建成功了 但是404页面 又爆出at /root/express-ffmpeg/app.js:265:8

    at Layer.handle [as handle_request] (/root/express-ffmpeg/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/root/express-ffmpeg/node_modules/express/lib/router/index.js:317:13) at /root/express-ffmpeg/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/root/express-ffmpeg/node_modules/express/lib/router/index.js:335:12) at next (/root/express-ffmpeg/node_modules/express/lib/router/index.js:275:10) at /root/express-ffmpeg/node_modules/connect-flash/lib/flash.js:21:5 at Layer.handle [as handle_request] (/root/express-ffmpeg/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/root/express-ffmpeg/node_modules/express/lib/router/index.js:317:13) at /root/express-ffmpeg/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/root/express-ffmpeg/node_modules/express/lib/router/index.js:335:12) at next (/root/express-ffmpeg/node_modules/express/lib/router/index.js:275:10) at /root/express-ffmpeg/app.js:250:3 at Layer.handle [as handle_request] (/root/express-ffmpeg/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/root/express-ffmpeg/node_modules/express/lib/router/index.js:317:13) at /root/express-ffmpeg/node_modules/express/lib/router/index.js:284:7 at Function.process_params (/root/express-ffmpeg/node_modules/express/lib/router/index.js:335:12) at next (/root/express-ffmpeg/node_modules/express/lib/router/index.js:275:10) at SendStream.error (/root/express-ffmpeg/node_modules/serve-static/index.js:121:7) at emitOne (events.js:115:13) at SendStream.emit (events.js:210:7) at SendStream.error (/root/express-ffmpeg/node_modules/send/index.js:270:17
    1. Rat's
      @shaoye

      这个问题不是很清楚,多半还是安装有点小瑕疵。

  9. shaoye

    装了几遍全程无报错,依旧502 官方活了NG反代会报502 执行一段 代码 就可以 但是依旧包错502 ,泪奔啊

    1. Rat's
      @shaoye

      那就是姿势有点小问题了,我都一次成功。

  10. soradaisuki

    点击转码就报错
    at ChildProcess.<anonymous> (/root/express-ffmpeg/node_modules/fluent-ffmpeg/lib/ffprobe.js:233:22)

    at emitTwo (events.js:125:13) at ChildProcess.emit (events.js:213:7) at Process.ChildProcess._handle.onexit (internal/child_process.js:197:12)
    events.js:182

    throw er; // Unhandled 'error' event ^
    TypeError: Cannot read property 'format' of undefined

    at /root/express-ffmpeg/helper/listsffmpeg.js:48:35 at /root/express-ffmpeg/node_modules/mongoose/lib/model.js:4518:16 at (anonymous function).call (/root/express-ffmpeg/node_modules/mongoose/lib/query.js:3800:7) at process.nextTick (/root/express-ffmpeg/node_modules/mongoose/lib/helpers/query/completeMany.js:35:39) at _combinedTickCallback (internal/process/next_tick.js:95:7) at process._tickCallback (internal/process/next_tick.js:161:9)

    1. soradaisuki
      @soradaisuki

      懂了 原来是没有找到文件,应该是上传的时候出了问题吧

      1. soradaisuki
        @soradaisuki

        宝塔的pm2有点问题...

        1. Rat's
          @soradaisuki

          感觉pm2和mongodb都有点问题

      2. Rat's
        @soradaisuki

        你可以看下movie文件夹有不有上传的视频,然后检查下有不有可读权限。

        1. soradaisuki
          @Rat's

          之前问题是解决了,但是视频播放只有封面23333,声音倒是有的

          1. Rat's
            @soradaisuki

            这个倒不是很清楚,使用方面没深入研究。

        2. 爱看动漫的小梁
          @Rat's

          不正常,因为我都注意数据变化,转码时CPU多少,不转码时是多少