在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; }