LoginSignup
62

More than 5 years have passed since last update.

ffmpegでエンコードした動画をそのまま垂れ流すサーバー

Last updated at Posted at 2014-10-17
var express = require('express'),
  spawn = require('child_process').spawn,
  app = express();

app.get('/', function(req, res, next) {
    ffmpeg = spawn('ffmpeg', [
      '-i', 'input.mp4',
      '-vf','scale=320:240',
      '-f', 'mp4', '-movflags', 'frag_keyframe+empty_moov', 'pipe:1'
    ]);

  res.set('Content-Type', 'video/mp4');
  ffmpeg.stdout.pipe(res);
});

app.listen(3000);

これで http://localhost:3000 にアクセスすると、この.jsファイルの同階層にあるinput.mp4ファイルを320x240にサイズ変更した動画が再生されます。

ポイントはffmpegの出力ファイル名にpipe:1を指定すると標準出力にエンコードした結果を書き出すということです。
その出力結果をNode.jsのStream#pipeでそのままHTTPレスポンスとして返しています。

-movflags frag_keyframe+empty_moov についてはよくわかりませんが、mp4形式で出力をパイプするのに必要なオプションです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62