Project Icon

videoshow

Node.js图片幻灯片视频生成工具

videoshow是一个基于ffmpeg的Node.js库,用于生成图片幻灯片视频。该工具支持添加音频、字幕和过渡效果,提供编程API和命令行接口。用户可自定义视频参数,如帧率、循环时间和分辨率等。videoshow适用于批量视频制作,并支持添加logo和自定义字幕样式。

videoshow 代码气候 NPM

一个简单的 node.js 工具,用于基于图像创建直观的视频幻灯片,使用 ffmpeg,并具有额外功能,如音频字幕和幻灯片之间的淡入淡出过渡

入门可以查看示例编程 API命令行界面。

videoshow 在生产环境中使用,每月渲染数千个视频。

点击图片查看由 videoshow 生成的示例视频:

要求

  • ffmpeg 带有额外的编译标志 --enable-libass --enable-libmp3lame

您可以从这里下载 ffmpeg 的静态构建版本。

如果您想在 Heroku 上使用 videoshow,可以使用 ffmpeg2 buildpack。

安装

npm install videoshow

对于命令行使用,将其作为全局包安装:

npm install -g videoshow

使用

注意:所有图像必须具有相同的尺寸。

以下是一个基于图像和音频生成视频的示例脚本。

查看编程 API示例以获取更多使用详情。

var videoshow = require('videoshow')

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

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

videoshow(images, videoOptions)
  .audio('song.mp3')
  .save('video.mp4')
  .on('start', function (command) {
    console.log('ffmpeg 进程已启动:', command)
  })
  .on('error', function (err, stdout, stderr) {
    console.error('错误:', err)
    console.error('ffmpeg stderr:', stderr)
  })
  .on('end', function (output) {
    console.error('视频已创建于:', output)
  })

命令行界面

$ videoshow --help
轻松从图像创建视频幻灯片
用法: bin/videoshow [选项]

选项:
  --help, -h       显示帮助
  --config, -c     JSON 配置文件路径 [必需]
  --audio, -a      可选音频文件路径
  --subtitles, -s  .srt 字幕文件路径
  --input, -i      向视频添加额外输入
  --output, -o     输出视频文件路径
  --size, -x       视频尺寸分辨率
  --logo, -l       logo 图像路径
  --debug, -d      在错误情况下启用调试模式

示例:
  bin/videoshow -c config.json video.mp4
  bin/videoshow -c config.json --audio song.mp3 video.mp4
  bin/videoshow -c config.json --audio song.mp3 --logo logo.png video.mp4

示例 config.json 文件:

{
  "output": "video.mp4",
  "options": {
    "fps": 25,
    "loop": 5,
    "transition": true,
    "transitionDuration": 1,
    "videoBitrate": 1024,
    "videoCodec": "libx264",
    "size": "640x?",
    "audioBitrate": "128k",
    "audioChannels": 2,
    "format": "mp4",
    "subtitleStyles": {
      "Fontname": "Verdana",
      "Fontsize": "26",
      "PrimaryColour": "11861244",
      "SecondaryColour": "11861244",
      "TertiaryColour": "11861244",
      "BackColour": "-2147483640",
      "Bold": "2",
      "Italic": "0",
      "BorderStyle": "2",
      "Outline": "2",
      "Shadow": "3",
      "Alignment": "1",
      "MarginL": "40",
      "MarginR": "60",
      "MarginV": "40"
    }
  },
  "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 ])

返回:Videoshow

Videoshow 构造函数。您应该传入一个 array<string>array<object>array<ReadableStream> 包含所需的图像, 并可选地为每个图像传入视频渲染 options 对象。

支持的图像格式有:jpgpngbmp

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

images 参数也可以是一个集合:

videoshow([{
    path: 'image1.jpg',
    caption: '作为视频字幕的 Hello world'
  }, {
    path: 'image2.jpg',
    caption: '这是一个示例字幕',
    loop: 10 // 长字幕
  }])
  .save('video.mp4')
  .on('error', function () {})
  .on('end', function () {})

视频选项

您可以将任何 fluent-ffmpeg 允许的方法名称定义为选项

默认选项为:

{
  fps: 25,
  loop: 5, // 秒
  transition: true,
  transitionDuration: 1,
  captionDelay: 1000,
  useSubRipSubtitles: false,
  subtitleStyle: null,
  videoBitrate: 1024,
  videoCodec: 'libx264',
  size: '640x?',
  audioBitrate: '128k',
  audioChannels: 2,
  format: 'mp4'
}

选项详情:

  • captionDelay number - 显示/隐藏字幕的延迟毫秒数。默认为 1000
  • useSubRipSubtitles boolean - 使用 SubRip 字幕格式。默认使用 SSA/ASS。默认为 false
  • subtitleStyle object - SSA/ASS 字幕样式。查看 substation.jsfixture 文件 了解允许的参数

图像选项

  • path 字符串 - 图片文件路径
  • loop 数字 - 图片幻灯片持续时间,以为单位。默认为5
  • transition 布尔值 - 为当前图片启用淡入/淡出过渡效果
  • transitionDuration 数字 - 淡入/淡出过渡持续时间,以为单位。默认为1
  • transitionColor 字符串 - 淡入/淡出过渡背景颜色。默认为黑色。参见支持的颜色
  • filters 数组<字符串|对象> - 为图片幻灯片添加自定义ffmpeg视频滤镜
  • disableFadeOut 布尔值 - 如果启用过渡效果,禁用淡出效果。默认为false
  • disableFadeIn 布尔值 - 如果启用过渡效果,禁用淡入效果。默认为false
  • caption 字符串 - 作为字幕的说明文字。支持有限的HTML标签。参见Subrip
  • captionDelay 数字 - 显示/隐藏说明文字的延迟毫秒数。默认为1000
  • captionStart 数字 - 开始显示说明文字的毫秒数。默认为1000
  • captionEnd 数字 - 移除说明文字的毫秒数。默认为loop - 1000
  • logo 字符串 - Logo图片的路径。参见logo()方法

videoshow#image(image)

将一张图片添加到视频中。你可以传入一个字符串作为图片路径,或者一个包含图片选项的普通对象

videoshow#audio(path [, params ])

定义要使用的音频文件路径。 支持多种格式和编解码器,如accmp3ogg

支持的参数:

  • delay 数字 - 音频开始的延迟秒数。默认为0
  • fade 布尔值 - 启用音频淡入/淡出效果。默认为true

videoshow#logo(path [, params ])

在左上角添加一个自定义图片作为logo。你可以通过x/y轴自定义位置。 必须是pngjpeg格式的图片

支持的参数:

  • start 数字 - 显示logo的视频秒数。默认为5
  • end 数字 - 移除logo的视频秒数。默认为总长度 - 5
  • xAxis 数字 - Logo的x轴位置。默认为10
  • yAxis 数字 - Logo的y轴位置。默认为10

videoshow#subtitles(path)

定义要加载的SubRip字幕SubStation Alpha (SSA/ASS) 文件路径。应该是一个.str.ass文件

参见示例

videoshow#save(path)

返回:EventEmitter 别名:render

渲染并将生成的视频写入指定路径的磁盘

支持订阅的事件:

  • start cmd - 当ffmpeg进程启动时触发
  • error error, stdout, stderr - 当转码错误发生时触发
  • progress data - 带有转码进度信息时触发
  • codecData codec - 当输入编解码器数据可用时触发
  • end videoPath - 当进程成功完成时触发

更多信息,请参见ffmpeg文档

videoshow#input(input)

向视频添加输入文件。默认情况下你不需要调用此方法

videoshow#filter(filter)

向视频添加自定义视频滤镜。参见文档

videoshow#complexFilter(filter)

向视频添加自定义复杂滤镜。参见文档

videoshow#loop(seconds)

默认图片循环时间,以秒为单位。默认为5

videoshow#size(resolution)

视频尺寸分辨率。默认为640x?。 参见文档

videoshow#aspect(aspect)

视频宽高比。默认根据视频size参数自动计算。 参见文档

videoshow#options(options)

别名:flags

添加一组视频输出选项作为命令行标志。 options参数应该是一个数组。 参见文档

videoshow#option(argument)

别名:flag

添加一个自定义输出选项作为命令行标志传递给ffmpeg

videoshow#options(arguments)

别名:flags

添加多个输出选项作为命令行标志传递给ffmpeg。 参数必须是一个数组

videoshow.VERSION

类型:字符串

当前包的语义版本号

videoshow.ffmpeg

类型:函数

fluent-ffmpeg API构造函数

许可证

MIT © Tomas Aparicio

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号