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
- ffmpeg with additional compilation flags
--enable-libass --enable-libmp3lame
npm install videoshow
For command-line usage, install it as global package:
npm install -g videoshow
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
$ 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"
]
}
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 () {})
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'
}
- path
string
- File path to image - loop
number
- Image slide duration in seconds. Default to5
- transition
boolean
- Enable fade in/out transition for the current image - transitionDuration
number
- Fade in/out transition duration in seconds. Default to1
- caption
string
- Caption text as subtitle. It allows a limited set of HTML tags. See Subrip - captionStart
number
- Miliseconds to start the caption. Default to1000
- captionEnd
number
- Miliseconds to remove the caption. Default toloop - 1000
- logo
string
- Path to logo image. Seelogo()
method
Push an image to the video. You can pass an string
as path to the image,
or a plain object
with image options
Define the audio file path to use.
It supports multiple formats and codecs such as acc
, mp3
or ogg
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. Default5
seconds - end
number
- Video second to remove the logo. DefaulttotalLength - 5
seconds - xAxis
number
- Logox
axis position. Default10
- yAxis
number
- Logoy
axis position. Default10
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')
Return: EventEmitter
Alias: render
Render and write the final video in the given path
Add input file to video. By default you don't need to call this method
Add a custom video filter to the video. See the docs
Add a custom complex filter to the video. See the docs
Default image loop time in seconds. Default to 5
Video size resolution. Default to 640x?
.
See the docs
Video aspect ration. Default autocalculated from video size
param.
See the docs
Alias: flags
Add a set of video output options as command-line flag.
options
argument should be an array.
See the docs
Alias: flag
Add a custom output option as command-line flag to pass to ffmpeg
Alias: flags
Add multiple output options as command-line flags to pass to ffmpeg
.
The argument must be an array
Type: string
Current package semantic version
Type: function
fluent-ffmpeg API constructor
MIT © Tomas Aparicio