NodeJs

Docker node 调用ffmpeg转换视频

在Docker node中通过使用ffmpeg-static来进行视频转换

package.json

{
  "name": "videoTransform",
  "version": "1.0.0",
  "description": "videoTransform",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.4",
    "express-handlebars": "^3.1.0",
    "ffmpeg": "0.0.4",
    "fluent-ffmpeg": "^2.1.2",
    "ibm-cos-sdk": "^1.7.0",
    "ibm_db": "^2.6.3",
    "node-schedule": "^1.3.2",
    "request": "^2.88.2",
    "ffmpeg-static": "^2.3.0"
  }
}

Dockerfile

#设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像

FROM node

#创建app目录,保存我们的代码
RUN mkdir -p /var/videoTransform
#设置工作目录
WORKDIR /var/videoTransform

#复制所有文件到 工作目录。
COPY . /var/videoTransform

RUN npm install

#暴露container的端口
EXPOSE 9000

#运行命令
CMD ["npm", "start"]

server.js

"use strict";
Object.defineProperty(exports, "__esModule", {
  value: true
});
var express = require("express");
var path = require("path");
var request = require('request');
var app = express();
const schedule = require('node-schedule');
const fs = require('fs');


var ffmpeg = require('fluent-ffmpeg');
const ffmpeg_static = require('ffmpeg-static');

function transformVideo(videoName) {
  console.log("ビデオ転换開始. ビデオ:" + videoName + " Time:" + Date());
  var p = new Promise((resolve, reject) => {
    ffmpeg('./' + videoName)
      .setFfmpegPath(ffmpeg_static.path)
      // set audio codec
      .videoCodec('libx264')
      .on('end', function () {
        console.log("ビデオ転换完了. ビデオ:" + videoName + " Time:" + Date());
        resolve(videoName);
      })
      .on('error', function (err) {
        console.log("ビデオ転换エラー:" + videoName + " Time:" + Date() + " エラー:" + err.message);
        reject(err.message);
      })
      // save to file
      .save('./H264_' + videoName);
  });
  return p;
}