ffmpeg 仅将 41.25% 的图像转换为视频

ffmpeg only converting 41.25% of my images to video

我正在使用 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.`);
});

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

我的图片是这样命名的 image1.jpg、image2.jpg、image3.jpg 等

当我直接在我的 cli 中 运行 命令时,它非常混乱。

有人 运行 之前遇到过这个问题,还是我只是用错了库?

您仅转换了 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 时,您必须有一系列图像,例如:

  • 图片-1.png
  • 图片-2.png
  • 图片-3.png
  • 图片-4.png

在图像-9.png之后图像-4.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