JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1424
  • Score
    100M100P100Q110698F
  • License MIT

Simple command-line and programmatic interface to create slideshow videos from images using ffmpeg

Package Exports

  • videoshow

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (videoshow) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

videoshow Build Status Code Climate NPM Dependency Status

Simple utility for node/io.js to create straightforward slideshow videos based on images using ffmpeg

You can easily create videos with optional audio, subtitles and fade in/out transitions.

To getting started you can take a look to the examples, programmatic API and command-line interface usage

Requirements

  • ffmpeg with additional compilation flags --enable-libass --enable-libmp3lame

Install

npm install videoshow

For command-line usage, install it as global package:

npm install -g videoshow

Usage

var videoshow = require('videoshow')

var images = [
  'step1.jpg',
  'step2.jpg',
  'step3.jpg',
  'step4.jpg'
]

var videoOptions = {
  fps: 25,
  loop: 5, // seconds
  transition: true,
  transitionDuration: 1, // seconds
  videoBitrate: 1024,
  videoCodec: 'libx264',
  size: '640x?',
  audioBitrate: '128k',
  audioChannels: 2,
  format: 'mp4'
}

videoshow(images, videoOptions)
  .audio('song.mp3')
  .save('video.mp4')

Take a look to the programmatic API for more details

Command-line interface

$ videoshow --help
Create video slides easily from images
Usage: bin/videoshow [options]

Options:
  --help, -h    Show help
  --config, -c  File path to JSON config file [required]
  --audio, -a   Optional audio file path
  --input, -i   Add additional input to video
  --output, -o  Output video file path
  --debug, -d   Enable debug mode in error case

Examples:
  bin/videoshow -c config.json --audio song.mp3
  bin/videoshow -c config.json --audio song.mp3 video.mp4

Example config.json file:

{
  "output": "video.mp4",
  "options": {
    "fps": 25,
    "loop": 5,
    "transition": true,
    "transitionDuration": 1,
    "videoBitrate": 1024,
    "videoCodec": "libx264",
    "size": "640x?",
    "audioBitrate": "128k",
    "audioChannels": 2,
    "format": "mp4"
  },
  "images": [
    "./test/fixtures/step_1.png",
    "./test/fixtures/step_2.png",
    "./test/fixtures/step_3.png",
    "./test/fixtures/step_4.png",
    "./test/fixtures/step_5.png"
  ]
}

API

videoshow(images, [ options ])

Return: Videoshow

Videoshow constructor. You should pass an array<string> or array<object> or array<ReadableStream> with the desired images, and optionally passing the video render options object per each image.

Image formats supported are: jpg, png, gif, bmp

videoshow([ 'image1.jpg', 'image2.jpg', 'image3.jpg'])
  .save('video.mp4')
  .on('error', function () {})
  .on('end', function () {})

images param could be a collection as well:

videoshow([{
    path: 'image1.jpg',
    caption: 'Hello world as video subtitle'
  }, {
    path: 'image2.jpg',
    caption: 'This is a sample subtitle',
    loop: 10 // long caption
  }])
  .save('video.mp4')
  .on('error', function () {})
  .on('end', function () {})

Video options

You can define any of the methods allowed by fluent-ffmpeg

Default options are:

{
  fps: 25,
  loop: 5, // seconds
  transition: true,
  transitionDuration: 1,
  videoBitrate: 1024,
  videoCodec: 'libx264',
  size: '640x?',
  audioBitrate: '128k',
  audioChannels: 2,
  format: 'mp4'
}

Image options

  • path string - File path to image
  • loop number - Image slide duration in seconds. Default to 5
  • transition boolean - Enable fade in/out transition for the current image
  • transitionDuration number - Fade in/out transition duration in seconds. Default to 1
  • caption string - Caption text as subtitle. It allows a limited set of HTML tags. See Subrip
  • captionStart number - Miliseconds to start the caption. Default to 1000
  • captionEnd number - Miliseconds to remove the caption. Default to loop - 1000
  • logo string - Path to logo image. See logo() method

videoshow#image(image)

Push an image to the video. You can pass an string as path to the image, or a plain object with image options

videoshow#audio(path)

Define the audio file path to use. It supports multiple formats and codecs such as acc, mp3 or ogg

videoshow#logo(path [, params ])

Add a custom image as logo in the left-upper corner. It must be a png or jpeg image

Supported params:

  • start number - Video second to show the logo. Default 5 seconds
  • end number - Video second to remove the logo. Default totalLength - 5 seconds
  • xAxis number - Logo x axis position. Default 10
  • yAxis number - Logo y axis position. Default 10

videoshow#subtitles(path)

Define the SubRip subtitles file path to load. It should be a .srt file

If you want to use SubStation Alpha (SSA/ASS) subtitles, you should pass it as video input:

videoshow(images)
  .input('subtitles.ass')
  .on('end', end)
  .save('video.mp4')

videoshow#save(path)

Return: EventEmitter Alias: render

Render and write the final video in the given path

videoshow#input(input)

Add input file to video. By default you don't need to call this method

videoshow#filter(filter)

Add a custom video filter to the video. See the docs

videoshow#complexFilter(filter)

Add a custom complex filter to the video. See the docs

videoshow#loop(seconds)

Default image loop time in seconds. Default to 5

videoshow#size(resolution)

Video size resolution. Default to 640x?. See the docs

videoshow#aspect(aspect)

Video aspect ration. Default autocalculated from video size param. See the docs

videoshow#options(options)

Alias: flags

Add a set of video output options as command-line flag. options argument should be an array. See the docs

videoshow#option(argument)

Alias: flag

Add a custom output option as command-line flag to pass to ffmpeg

videoshow#options(arguments)

Alias: flags

Add multiple output options as command-line flags to pass to ffmpeg. The argument must be an array

videoshow.VERSION

Type: string

Current package semantic version

videoshow.ffmpeg

Type: function

fluent-ffmpeg API constructor

License

MIT © Tomas Aparicio