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

发表评论

301 条评论

  1. nong

    redis这个在这里有什么作用?文中没有涉及到使用redis捏

    1. Rat's
      @nong

      缓存作用,运行程序的时候就会用到了

  2. nong

    额,安装好了,测试了转码也没有什么大问题,就是水印什么去除?按照官方的。“水印图片置于软件文件夹/wrok/watermark下面,文件名分别为1.png、2.png、3.png,不需要水印,则坐标设置为一个0即可。”
    文件夹下并没有看见有图片文件,而且后台管理转码设置也不可以修改水印设置标准!!!这个新建一个新的转码模板可以解决?我的想法就是去除水印

    1. Rat's
      @nong

      去除水印可以上传一个空白的png文件,就可以去除了。

      1. nong
        @Rat's

        图片的命名和大小呢?1.png,2.png?图片像素呢?

        1. Rat's
          @nong

          这种不好说,需要点修改能力了。

  3. Billyy

    博主想请教一下,防盗链key怎么用

    1. Rat's
      @Billyy

      这个你还是直接把key关掉再用吧。

  4. ki

    ../src/Image.h:19:21: 致命错误:gif_lib.h:没有那个文件或目录
    #include <gif_lib.h>

    ^

    编译中断。
    make: * [Release/obj.target/canvas/src/CanvasPattern.o] 错误 1
    make: 离开目录“/root/express-ffmpeg/node_modules/canvas/build”
    gyp ERR! build error
    gyp ERR! stack Error: make failed with exit code: 2
    gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
    gyp ERR! stack at emitTwo (events.js:126:13)
    gyp ERR! stack at ChildProcess.emit (events.js:214:7)
    gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
    gyp ERR! System Linux 3.10.0-957.el7.x86_64
    gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
    gyp ERR! cwd /root/express-ffmpeg/node_modules/canvas
    gyp ERR! node -v v8.15.1
    gyp ERR! node-gyp -v v3.8.0
    gyp ERR! not ok
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 (node_modules/canvas):
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 install: node-gyp rebuild
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

    up to date in 3.329s
    fixed 0 of 5 vulnerabilities in 831 scanned packages
    5 vulnerabilities required manual review and could not be updated
    [root@localhost express-ffmpeg]# npm audit fix

    canvas@1.3.12 install /root/express-ffmpeg/node_modules/canvas
    node-gyp rebuild

    make: 进入目录“/root/express-ffmpeg/node_modules/canvas/build”
    SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
    COPY Release/canvas-postbuild.node
    CXX(target) Release/obj.target/canvas/src/Canvas.o
    In file included from ../src/Canvas.cc:20:0:
    ../src/JPEGStream.h: 在函数‘boolean empty_closure_output_buffer(j_compress_ptr)’中:
    ../src/JPEGStream.h:42:108: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]
    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)dest->closure->fn, 2, argv);

    ^

    ../src/JPEGStream.h: 在函数‘void term_closure_destination(j_compress_ptr)’中:
    ../src/JPEGStream.h:63:113: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]
    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)dest->closure->fn, 2, data_argv);

    ^

    ../src/JPEGStream.h:71:112: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]
    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)dest->closure->fn, 2, end_argv);

    ^

    ../src/Canvas.cc: 在静态成员函数‘static void Canvas::ToBufferAsyncAfter(uv_work_t*)’中:
    ../src/Canvas.cc:211:31: 警告:不建议使用‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’(声明于 ../../nan/nan.h:1674) [-Wdeprecated-declarations]

    closure->pfn->Call(1, argv); ^

    ../src/Canvas.cc:216:31: 警告:不建议使用‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’(声明于 ../../nan/nan.h:1674) [-Wdeprecated-declarations]

    closure->pfn->Call(2, argv); ^

    ../src/Canvas.cc: 在静态成员函数‘static Nan::NAN_METHOD_RETURN_TYPE Canvas::ToBuffer(Nan::NAN_METHOD_ARGS_TYPE)’中:
    ../src/Canvas.cc:325:14: 警告:不建议使用‘v8::TryCatch::TryCatch()’(声明于 /root/.node-gyp/8.15.1/include/node/v8.h:8371):Use isolate version [-Wdeprecated-declarations]

    TryCatch try_catch; ^

    ../src/Canvas.cc: 在函数‘cairo_status_t streamPNG(void, const uint8_t, unsigned int)’中:
    ../src/Canvas.cc:357:102: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]
    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)closure->fn, 3, argv);

    ^

    ../src/Canvas.cc: 在静态成员函数‘static Nan::NAN_METHOD_RETURN_TYPE Canvas::StreamPNGSync(Nan::NAN_METHOD_ARGS_TYPE)’中:
    ../src/Canvas.cc:417:12: 警告:不建议使用‘v8::TryCatch::TryCatch()’(声明于 /root/.node-gyp/8.15.1/include/node/v8.h:8371):Use isolate version [-Wdeprecated-declarations]
    TryCatch try_catch;

    ^

    ../src/Canvas.cc:426:103: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]

    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)closure.fn, 1, argv); ^

    ../src/Canvas.cc:432:103: 警告:不建议使用‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’(声明于 ../../nan/nan.h:959) [-Wdeprecated-declarations]

    Nan::MakeCallback(Nan::GetCurrentContext()->Global(), (v8::Local<v8::Function>)closure.fn, 1, argv); ^

    ../src/Canvas.cc: 在静态成员函数‘static Nan::NAN_METHOD_RETURN_TYPE Canvas::StreamJPEGSync(Nan::NAN_METHOD_ARGS_TYPE)’中:
    ../src/Canvas.cc:458:12: 警告:不建议使用‘v8::TryCatch::TryCatch()’(声明于 /root/.node-gyp/8.15.1/include/node/v8.h:8371):Use isolate version [-Wdeprecated-declarations]
    TryCatch try_catch;

    ^

    CXX(target) Release/obj.target/canvas/src/CanvasGradient.o
    CXX(target) Release/obj.target/canvas/src/CanvasPattern.o
    In file included from ../src/CanvasPattern.cc:9:0:
    ../src/Image.h:19:21: 致命错误:gif_lib.h:没有那个文件或目录
    #include <gif_lib.h>

    ^

    编译中断。
    make: * [Release/obj.target/canvas/src/CanvasPattern.o] 错误 1
    make: 离开目录“/root/express-ffmpeg/node_modules/canvas/build”
    gyp ERR! build error
    gyp ERR! stack Error: make failed with exit code: 2
    gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
    gyp ERR! stack at emitTwo (events.js:126:13)
    gyp ERR! stack at ChildProcess.emit (events.js:214:7)
    gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
    gyp ERR! System Linux 3.10.0-957.el7.x86_64
    gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
    gyp ERR! cwd /root/express-ffmpeg/node_modules/canvas
    gyp ERR! node -v v8.15.1
    gyp ERR! node-gyp -v v3.8.0
    gyp ERR! not ok
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 (node_modules/canvas):
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 install: node-gyp rebuild
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

    up to date in 3.332s
    fixed 0 of 5 vulnerabilities in 831 scanned packages
    5 vulnerabilities required manual review and could not be updated
    [root@localhost express-ffmpeg]#

    1. Rat's
      @ki

      谷歌下错误

  5. adb

    这个只可以上传视频吗? 可以切指定文件夹的东西吗
    理想状态是切vps挂载的云盘
    或者大盘鸡已经下好的视频 貌似没这功能吧

    1. Rat's
      @adb

      可以将下载好的视频移到云转码目录的movies文件夹,然后在视频库点击导入,可以直接转码切片

      1. adb
        @Rat's

        32g内存 8HCPU 切一下午了 不是在waiting就是在trans&chunk
        是切得文件太大了? 4-6G单视频 mkv格式的
        博主可以看下我的站点 e.xiaohao.us

        1. Rat's
          @adb

          你这是VPS的配置吧,用独立服务器转码,而且快慢由cpu和分辨率大小决定,cpu性能越强越快,分辨率越小越快,而且要是单核cpu性能

          1. adb
            @Rat's

            今天换成了vultr Bare Metal
            Cpu E3-1270v6 8CPU 3.8GHZ 也是一样

            1. Rat's
              @adb

              建议你多了解下ffmpeg。

  6. qazwse11
    该评论仅登录用户及评论双方可见
    1. Rat's
      @qazwse11

      这个源码有点老,有空我看看,你看还能不能找点比较新的

      1. qazwse11
        @Rat's

        请问站长有没有速度好一点的动漫视频资源站。【现在网上的资源采集站太慢】

  7. 时间的历史

    不会安装的,可以看看我这个补充的教程,对常见问题的一个解决办法:http://www.feiji.work/?id=3

    1. Rat's
      @时间的历史

      其实更多的需要npm install这步如何能完美的安装成功,CPU 100%多半是npm install这步有问题,或者运行目录不对。

  8. kimi11

    在首页显示这个怎么回事?
    /root/express-ffmpeg/views/default/index.jade:18 16| .push-box 17| .push-img > 18| a(href="/movie/#{pushmovie.movieid._id}") 19| if pushmovie.movieid.poster 20| img(src="#{pushmovie.movieid.poster}") 21| else Cannot read property '_id' of null
    TypeError: /root/express-ffmpeg/views/default/index.jade:18

    16| .push-box 17| .push-img

    18| a(href="/movie/#{pushmovie.movieid._id}")

    19| if pushmovie.movieid.poster 20| img(src="#{pushmovie.movieid.poster}") 21| else

    Cannot read property '_id' of null

    at eval (eval at exports.compile (/root/express-ffmpeg/node_modules/jade/lib/index.js:218:8), <anonymous>:271:67) at eval (eval at exports.compile (/root/express-ffmpeg/node_modules/jade/lib/index.js:218:8), <anonymous>:388:4) at eval (eval at exports.compile (/root/express-ffmpeg/node_modules/jade/lib/index.js:218:8), <anonymous>:1033:22) at res (/root/express-ffmpeg/node_modules/jade/lib/index.js:219:38) at Object.exports.renderFile (/root/express-ffmpeg/node_modules/jade/lib/index.js:380:38) at Object.exports.renderFile (/root/express-ffmpeg/node_modules/jade/lib/index.js:370:21) at View.exports.__express [as engine] (/root/express-ffmpeg/node_modules/jade/lib/index.js:417:11) at View.render (/root/express-ffmpeg/node_modules/express/lib/view.js:135:8) at tryRender (/root/express-ffmpeg/node_modules/express/lib/application.js:640:10) at Function.render (/root/express-ffmpeg/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/root/express-ffmpeg/node_modules/express/lib/response.js:1008:7) at /root/express-ffmpeg/controller/cms.js:71:11 at /root/express-ffmpeg/node_modules/async/dist/async.js:3888:9 at /root/express-ffmpeg/node_modules/async/dist/async.js:473:16 at iterateeCallback (/root/express-ffmpeg/node_modules/async/dist/async.js:992:24) at /root/express-ffmpeg/node_modules/async/dist/async.js:969:16 at /root/express-ffmpeg/node_modules/async/dist/async.js:3885:13 at /root/express-ffmpeg/controller/cms.js:38:13 at /root/express-ffmpeg/node_modules/mongoose/lib/model.js:4698:16 at /root/express-ffmpeg/node_modules/mongoose/lib/utils.js:263:16 at _hooks.execPost (/root/express-ffmpeg/node_modules/mongoose/lib/query.js:4074:11) at /root/express-ffmpeg/node_modules/kareem/index.js:135:16
    1. Rat's
      @kimi11

      这个看起来好像是你之前推荐过视频,然后删除造成的?是的话就再推荐几个,把删掉的补起来就好了

    2. kimi11
      @kimi11

      ssh报这个
      [root@vultr ~]# pm2 log
      [TAILING] Tailing last 15 lines for [all] processes (change the value with --lines option)
      /root/.pm2/pm2.log last 15 lines:
      PM2 | 2019-03-02T08:27:32: PM2 log: PM2 home : /root/.pm2
      PM2 | 2019-03-02T08:27:32: PM2 log: PM2 PID file : /root/.pm2/pm2.pid
      PM2 | 2019-03-02T08:27:32: PM2 log: RPC socket file : /root/.pm2/rpc.sock
      PM2 | 2019-03-02T08:27:32: PM2 log: BUS socket file : /root/.pm2/pub.sock
      PM2 | 2019-03-02T08:27:32: PM2 log: Application log path : /root/.pm2/logs
      PM2 | 2019-03-02T08:27:32: PM2 log: Process dump file : /root/.pm2/dump.pm2
      PM2 | 2019-03-02T08:27:32: PM2 log: Concurrent actions : 2
      PM2 | 2019-03-02T08:27:32: PM2 log: SIGTERM timeout : 1600
      PM2 | 2019-03-02T08:27:32: PM2 log: ===============================================================================
      PM2 | 2019-03-02T08:27:32: PM2 log: App [www:0] starting in -cluster mode-
      PM2 | 2019-03-02T08:27:32: PM2 log: App [www:0] online
      PM2 | 2019-03-02T08:58:51: PM2 log: App name:www id:0 disconnected
      PM2 | 2019-03-02T08:58:51: PM2 log: App [www:0] exited with code [0] via signal [SIGINT]
      PM2 | 2019-03-02T08:58:51: PM2 log: App [www:0] starting in -cluster mode-
      PM2 | 2019-03-02T08:58:51: PM2 log: App [www:0] online

      /root/.pm2/logs/www-error.log last 15 lines:
      0|www | (node:12123) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
      0|www | (node:12123) DeprecationWarning: collection.count is deprecated, and will be removed in a future version. Use collection.countDocuments or collection.estimatedDocumentCount instead
      0|www | (node:12123) DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
      0|www | Error: Cannot take screenshots: neither a count nor a timemark list are specified
      0|www | at FfmpegCommand.proto.takeScreenshots.proto.thumbnail.proto.thumbnails.proto.screenshot.proto.screenshots (/root/express-ffmpeg/node_modules/fluent-ffmpeg/lib/recipes.js:132:15)
      0|www | at /root/express-ffmpeg/helper/newffmpeg.js:177:18
      0|www | at /root/express-ffmpeg/node_modules/mongoose/lib/model.js:4698:16
      0|www | at /root/express-ffmpeg/node_modules/mongoose/lib/utils.js:263:16
      0|www | at _hooks.execPost (/root/express-ffmpeg/node_modules/mongoose/lib/query.js:4074:11)
      0|www | at /root/express-ffmpeg/node_modules/kareem/index.js:135:16
      0|www | at process._tickCallback (internal/process/next_tick.js:61:11)
      0|www | (node:13126) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
      0|www | (node:13126) DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
      0|www | (node:13126) DeprecationWarning: collection.count is deprecated, and will be removed in a future version. Use collection.countDocuments or collection.estimatedDocumentCount instead

      1. Rat's
        @kimi11

        这个看起来没啥问题。

  9. jiany

    [root@dcyksb express-ffmpeg]# npm install

    ^

    make: * [Release/obj.target/canvas/src/Canvas.o] 错误 1
    make: 离开目录“/www/wwwroot/bbs.dcyksb.com/express-ffmpeg/node_modules/canvas/build”
    gyp ERR! build error
    gyp ERR! stack Error: make failed with exit code: 2
    gyp ERR! stack at ChildProcess.onExit (/root/git/nvm/versions/node/v10.15.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
    gyp ERR! stack at ChildProcess.emit (events.js:189:13)
    gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
    gyp ERR! System Linux 2.6.32-042stab134.3
    gyp ERR! command "/root/git/nvm/versions/node/v10.15.1/bin/node" "/root/git/nvm/versions/node/v10.15.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
    gyp ERR! cwd /www/wwwroot/bbs.dcyksb.com/express-ffmpeg/node_modules/canvas
    gyp ERR! node -v v10.15.1
    gyp ERR! node-gyp -v v3.8.0
    gyp ERR! not ok
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 (node_modules/canvas):
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: canvas@1.3.12 install: node-gyp rebuild
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

    audited 831 packages in 6.893s
    found 5 vulnerabilities (4 low, 1 high)
    run npm audit fix to fix them, or npm audit for details

    大佬这个是什么错误啊

    1. Rat's
      @jiany

      缺少依赖,不过运行完了就行,你先运行下程序,再使用pm2 log看下日志,然后再根据报错解决

  10. chanhey

    查看pm2日志显示

    Cannot process video: movies/舞蹈02《Sugar Free(无糖)》T-ara.movffmpeg exited with code 1: Conversion failed!
    0|www | (node:72581) DeprecationWarning: collection.count is deprecated, and will be removed in a future version. Use collection.countDocuments or collection.estimatedDocumentCount instead

    1. Rat's
      @chanhey

      这个不是问题,正常的报错。