ffmpeg-concat

ffmpeg-concat

拼接 一组视频.,通过使用 ffmpeg和 性感的 OpenGL 过渡 (动画效果)  

9个视频 与 独特过渡 连接在一起的示例

请注意,由于GIF预览,质量和fps很差;这个是源文件

介绍

FFmpeg是命令行视频编辑中的事实标准,但使用 非平凡过渡 将视频连接在一起真的很困难. 这里有一些错综复杂 的例子两个视频之间的简单交叉淡入淡出. FFmpeg过滤图非常强大,但是为了实现过渡动画,它们太复杂且容易出错.

另一方面,GL Transitions,是一个伟大的开源由Gaëtan Renaudeau倡议,旨在使用 GLSL 建立一个普遍的过渡集合,它非常简单的规范使得定制现有过渡或编写自己的过渡非常容易,而不是使用复杂的ffmpeg过滤图.

使用 gl-transitions 这个模块和CLI轻松地将视频连接在一起.

附github资源

https://github.com/chinanf-boy/ffmpeg-concat-zh#ffmpeg-concat ffmpeg-concat拼接一组视频。,通过使用ffmpeg和性感的OpenGL过渡(动画效果)

https://github.com/transitive-bullshit/ffmpeg-gl-transition FFmpeg过滤器,用于在视频流之间应用GLSL过渡。

https://github.com/transitive-bullshit/ffmpeg-concat/blob/master/readme.zh.md 使用带有性感OpenGL过渡的ffmpeg将视频列表汇总在一起。

NPM位置:https://www.npmjs.com/package/ffmpeg-concat

安装

先安装ffmpeg

可通过PPA进行安装
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

sudo apt-get update

sudo apt-get install ffmpeg

查看是否安装成功:

ffmpeg -version

这个模块需要ffmpeg要安装.

npm install --save ffmpeg-concat

# 或者 想使用 cli
npm install -g ffmpeg-concat

CLI

  Usage: ffmpeg-concat [options] 

  Options:

    -V, --version                         输出版本号
    -o, --output                  要写入的mp4文件的路径(默认值:out.mp4)
    -t, --transition-name           要使用的gl-transition名称(默认值:淡入淡出)
    -d, --transition-duration   转换持续时间以毫秒为单位(默认值:500)
    -T, --transitions               json文件加载转换
    -f, --frame-format            用于临时帧图像的格式(默认值:raw)
    -c, --concurrency             要并行处理的视频数量(默认值:4)
    -C, --no-cleanup-frames               禁用清除临时帧图像
    -O, --temp-dir                   用于存储帧数据的临时工作目录
    -h, --help                            输出使用信息

  Example:

    ffmpeg-concat -t circleopen -d 750 -o huzzah.mp4 0.mp4 1.mp4 2.mp4

注意使用过程中出错解决方案

ffmpeg-concat_第1张图片

解决地址如下:

https://github.com/transitive-bullshit/ffmpeg-concat/issues/37

https://github.com/transitive-bullshit/ffmpeg-concat/issues/36

https://www.npmjs.com/package/gl#how-can-headless-gl-be-used-on-a-headless-linux-machine

具体是:

 apt-get update

 apt install xvfb

 xvfb-run -s "-ac -screen 0 1280x1024x24" node p.txt  (p.txt 自己的node执行文件)

这样就可以了

用法

const concat = require('ffmpeg-concat')

// 拼接 3 个 mp4s 使用 2  个 500ms directionalWipe 过渡
await concat({
  output: 'test.mp4',
  videos: [
    'media/0.mp4',
    'media/1.mp4',
    'media/2.mp4'
  ],
  transition: {
    name: 'directionalWipe',
    duration: 500
  }
})
// 拼接 5 个 mp4 使用 4种不同的过渡
await concat({
  output: 'test.mp4',
  videos: [
    'media/0.mp4',
    'media/1.mp4',
    'media/2.mp4',
    'media/0.mp4',
    'media/1.mp4'
  ],
  transitions: [
    {
      name: 'circleOpen',
      duration: 1000
    },
    {
      name: 'crossWarp',
      duration: 800
    },
    {
      name: 'directionalWarp',
      duration: 500,
      // 将自定义参数传递给转换
      params: { direction: [ 1, -1 ] }
    },
    {
      name: 'squaresWire',
      duration: 2000
    }
  ]
})

更多动画取上面的名称就行地址如下:

https://gl-transitions.com/gallery?page=6

API

concat(options)

将 视频文件 与 OpenGL过渡 连接在一起. 返回一个Promise用于输出视频的时间.

请注意,您必须指定videos,output,或者transition要么transitions.

请注意,输出视频的大小 和 fps 由 第一个输入视频决定.

options

videos

类型: Array 必需

要连接的视频数组,其中每个 item 都是视频文件的路径或URL.

output

类型: String 必需

输出的mp4视频文件路径.

注意: 我们目前只支持输出到mp4;如果您希望获得更多格式的支持,请打开一个问题.

transition

类型: Object

指定在每个视频之间使用的默认过渡.

请注意,您必须指定其中一个transition要么transitions,取决于您对每次过渡的控制程度. 如果同时指定,transitions优先.

// 例
const transition = {
  duration: 1000, // ms
  name: 'directionalwipe', // 要使用的 gl-transition名称(小写匹配)
  params: { direction: [1, -1] } // 可选地覆盖默认参数
}

transitions

类型: Array

指定每个视频之间的 (可能唯一的) 过渡. 如果有N个视频,则应该有N-1个过渡.

请注意,您必须指定其中一个transition要么transitions,取决于您对每次过渡的控制程度. 如果同时指定,transitions优先.

// 例
const transitions = [
  {
    duration: 1000,
    name: 'fade'
  },
  {
    duration: 500,
    name: 'swap'
  }
]

audio

类型: String 必需

音频文件的路径或URL,用作 输出视频 的音轨.

frameFormat

类型: string默认: raw

临时帧图像的格式. 例如,您可以使用png要么jpg.

注意: 出于性能原因默认为raw,写入和读取 原始二进制像素数据 比 编码和解码png帧快得多. 原始格式很难预览和调试,在另一种情况下,您可能想要更改frameFormatpng.

concurrency

类型: Number默认: 4

要并行处理的最大视频数量.

log

类型: Function默认: noop

用于记录进度和底层ffmpeg命令的可选功能. 例如,您可以使用console.log

cleanupFrames

类型: boolean默认: true

默认情况下,我们清理临时帧图像. 如果你需要调试中间结果,将此设置为false.

tempDir

类型: string默认值: /tmp下的随机目录

用于存储中间帧数据的临时工作目录. 这是cleanupFrames时,帧被保存的位置.

过渡

这里有一些gl-transitions我发现对高质量的视频过渡 特别有用:

  • fade
  • fadegrayscale
  • circleopen
  • directionalwarp
  • directionalwipe
  • crosswarp
  • crosszoom
  • dreamy
  • squareswire
  • angular
  • radial
  • cube
  • swap

有关

  • ffmpeg-gl-transition- 用于在视频流之间 应用GLSL过渡 的 低级ffmpeg过滤器 (gl-transitions) . 它允许使用更高级和可自定义的过滤器图形,但它需要您构建自定义版本的ffmpeg.
  • gl-transitions- GLSL过渡的集合.
  • fluent-ffmpeg- 底层ffmpeg包装库.
  • awesome-ffmpeg- ffmpeg资源的精选列表,重点关注JavaScript.

你可能感兴趣的:(ffmpeg-concat,ffmpeg-concat,OpenGL)