首页 > 解决方案 > ffmpeg 仅将我的 41.25% 的图像转换为视频

问题描述

我正在使用 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% done 处理完成!但不制作视频

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

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

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

标签: javascriptnode.jsffmpegfluent-ffmpeg

解决方案


您仅转换 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


推荐阅读