【问题标题】:ffmpeg only converting 41.25% of my images to videoffmpeg 仅将我 41.25% 的图像转换为视频
【发布时间】:2020-03-20 22:55:53
【问题描述】:

我正在使用 ffmpeg 将图像列表转换为延时视频。当我从命令行运行命令时,它的效果很好。

ffmpeg -r 3 -i /var/folders/qj/n910kwdj4gvbmy_z2ffc5lcc0000gp/T/tmp-22129yvIsrbso4TEu/image%03d.jpg -s hd1080 -vcodec libx264 timelapse.mp4

当我使用 nodejs 库 fluent-ffmpeg 时出现此问题。

app.get('/api/get', function (req, res) {// return new Promise((resolve, reject) => {
    ffmpeg('/var/folders/qj/n910kwdj4gvbmy_z2ffc5lcc0000gp/T/tmp-22129yvIsrbso4TEu/image%03d.jpg')
      .noAudio()
      .inputOption('-r 3')
      .outputOptions([
        '-r', '3',
        '-s', 'hd1080'
      ]).  
      .videoCodec('libx264')
      .on('progress', (progress) => {
        console.log('Processing: ' + progress.percent + '% done');
      })
      .on('error', (err) => {
        console.error('Error during processing', err);
        // reject(err)
      })
      .on('end', () => {
        console.log('Processing finished !');
        // resolve()
      })
      .save('test.mp4', {end: true});
    }
    res.send(`I received your GET request.`);
});

编辑:现在在 Processing: 207.49999999999997% done 处给我一个处理过的视频 处理完毕!但不制作视频

我的图像被命名为 image1.jpg、image2.jpg、image3.jpg 等

当我直接在我的 cli 中运行命令时,它非常令人困惑。

之前有人遇到过这个问题还是我只是使用了错误的库?

【问题讨论】:

  • -r 3 应该是一个输入选项。
  • 现在改成Processing: 207.49999999999997% done Processing finished !
  • 分享完整的 ffmpeg 日志。在 ffmpeg cmd 中添加 -report 以生成日志。

标签: javascript node.js ffmpeg fluent-ffmpeg


【解决方案1】:

您只转换了 41.25% 的事实可能是由此处使用的模式类型 image%d.jpg 造成的。使用ffmpeg -r 3 -i /var/folders/qj/n910kwdj4gvbmy_z2ffc5lcc0000gp/T/tmp-22129yvIsrbso4TEu/image%d.jpg -s hd1080 -vcodec libx264 timelapse.mp4时,您必须有一系列图像,例如:

  • image-1.png
  • image-2.png
  • image-3.png
  • image-4.png

在 image-4.png 之后有 image-9.png。视频以 image-4.png 结尾。所以你在这里有2个选择。确保您在所有文件名中都有正确的数字序列或使用 glob 模式。

如果您正在寻找 glob 模式:

app.get('/api/get', function (req, res) {// return new Promise((resolve, reject) => {
    ffmpeg('/var/folders/qj/n910kwdj4gvbmy_z2ffc5lcc0000gp/T/tmp-22129yvIsrbso4TEu/image*.jpg')
      .noAudio()
      .outputOptions([
        '-r', '3',
        '-s', 'hd1080'
      ]).  
      .videoCodec('libx264')
      .on('progress', (progress) => {
        console.log('Processing: ' + progress.percent + '% done');
      })
      .on('error', (err) => {
        console.error('Error during processing', err);
        // reject(err)
      })
      .on('end', () => {
        console.log('Processing finished !');
        // resolve()
      })
      .save('test.mp4', {end: true});
    }
    res.send(`I received your GET request.`);
});

参考这里:http://trac.ffmpeg.org/wiki/Slideshow#Globpattern

【讨论】:

  • 感谢您的意见。我现在使用 %03d 编号序列,它可以帮助并将 -r 3 更改为 inputOptions,如 Gyan 上面所建议的那样。但现在它似乎给了我这个......Processing: 207.49999999999997% done Processing finished !一些进步,但不是我想要的哈哈
猜你喜欢
  • 2017-02-26
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多