Electron(节点)中的Fluent-ffmpeg和复杂滤波器

时间:2016-07-09 04:51:11

标签: node.js ffmpeg electron fluent-ffmpeg

我想使用fluent-ffmpeg模块使用Electron的复杂过滤器调用ffmpeg,但没有成功。错误'[AVFilterGraph @ 0xb8 .......]没有这样的过滤器“错误初始化复杂过滤器。无效参数'与此问题Error : Running FFmpeg command in Android ,splitting command in array not working中的相同,但上下文不同。

需要什么? 使用fluent-ffmpeg:

运行此ffmpeg命令
  

ffmpeg -i safework-background-0.mp4 -i image1.png -i image2.png -i   image3.png -filter_complex“[0:v] [1:v]   overlay = 1:1:enable ='between(t,5,8.5)'[tmp]; [TMP] [2:V]   overlay = 1:1:enable ='between(t,8.5,12)'[tmp]; [TMP] [3:V]   overlay = 1:1:enable ='between(t,12,15)'“test-video-safework3.mp4

它使用复杂的滤镜按顺序叠加视频上的三个图像并导出新视频。

哪些不起作用? 显然流畅的ffmpeg扼流圈带有复杂滤波器的必要引号,这是我的结论(和上面的Android变体问题相同)。

Electron中没有fluent-ffmpeg的方法有效吗? 你可以猜到我不得不直接打电话给ffmpeg。为帮助他人,以下命令(输入和输出视频文件名已参数化)转换为Electron:

  var spawn = require('child_process').spawn
  var fargs = ['-y', '-i', sourceDir.path() + '/' + inVideoName, '-i', tempDir.path() + '/' + 'image1.png',
  '-i', tempDir.path() + '/' + 'image2.png', '-i', tempDir.path() + '/' + 'image3.png',
  '-filter_complex', '[0:v][1:v]overlay=1:1:enable=\'between(t,5,8.5)\'[tmp];' +
  '[tmp][2:v]overlay=1:1:enable=\'between(t,8.5,12)\'[tmp];[tmp][3:v]' +
  'overlay=1:1:enable=\'between(t,12,15)\'', targetDir.path() + '/' + outVideoName]
  var ffmpeg = spawn(ffmpegc, fargs, { cwd:jetpack.cwd(app.getPath('home')).path() })
// some code ommitted
  ffmpeg.on('close', (code) => {
    console.log(`child process exited with code ${code}`)
    webContents.send('notify-user-reply', 'Video processing done.')
  })

上面的命令已经删除了每个图像的各种过滤器(在复杂过滤器中)之间的空格,否则它也会窒息。

我真的很想在Electron中使用fluent-ffmpeg,不仅仅是为了方便更优雅地调用ffmpeg而且还有一些额外的功能,比如简单的进度报告。

0 个答案:

没有答案