14

我正在用 node.js 构建一个应用程序,我成功上传了视频,但我需要为它生成一个视频缩略图。目前我使用 node exec 执行 ffmpeg 的系统命令来制作缩略图。

   exec("C:/ffmpeg/bin/ffmpeg -i Video/" + Name  + " -ss 00:01:00.00 -r 1 -an -vframes 1 -f mjpeg Video/" + Name  + ".jpg")

此代码来自http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-resumable-video-uploade-in-node-js/的教程

上面的代码确实生成了一个 jpg 文件,但它不是缩略图而是视频屏幕截图,我想知道是否有任何其他方法可以生成视频缩略图,或者如何执行 ffmpeg 命令来制作真正的缩略图(调整大小),我更喜欢.png 文件。

4

7 回答 7

18

参考 GitHub fluent-ffmpeg 项目

重复原始 StackOverflow 答案的示例:

var proc = new ffmpeg('/path/to/your_movie.avi')
  .takeScreenshots({
      count: 1,
      timemarks: [ '600' ] // number of seconds
    }, '/path/to/thumbnail/folder', function(err) {
    console.log('screenshots were saved')
  });
于 2014-06-18T13:20:29.030 回答
2

通过在命令中添加 -s widthxheight 选项来调整大小。

于 2012-10-26T03:36:15.293 回答
2

为此有一个节点模块: video-thumb

它基本上只是包装了对 exec ffmpeg 的调用

于 2013-01-15T22:34:47.247 回答
1

我建议使用https://www.npmjs.com/package/fluent-ffmpeg从 Node.js 调用 ffmpeg

于 2015-06-26T07:30:09.980 回答
0

相反,我建议使用thumbsupply。除了为您提供缩略图之外,它还会缓存它们以显着提高性能。

npm install --save thumbsupply

安装模块后,您可以通过以下方式使用它。

const thumbsupply = require('thumbsupply')("com.example.application");

thumbsupply.generateThumbnail('some-video.mp4')
.then(thumb => {
    // serve thumbnail
})
于 2017-09-18T08:48:53.013 回答
0

使用media-thumbnail,您可以轻松地从视频中生成缩略图。该模块基本上包装了 ffmpeg 缩略图功能。

const mt = require('media-thumbnail')

mt.forVideo(
  './path/to/video.mp4',
  './path/to/thumbnail.png', {
    width: 200
  })
  .then(() => console.log('Success'), err => console.error(err)) 

您还可以使用此包从图像创建缩略图。

于 2019-05-27T18:56:17.510 回答
0
app.post('/convert', upload.any(), (req, res) => {
    console.log("calling", req.files)
    let thumbNailName = req.files[0].filename.split('.')
    var gm = require('gm');

    gm('./src/Upload/'+req.files[0].filename)// get pdf file from storage folder
    .thumb(
        50, // Width
        50, // Height
        './src/thumbnail/'+thumbNailName[0]+'.png', // Output file name
        80, // Quality from 0 to 100
        function (error, stdout, stderr, command) {
            if (!error) {
                console.log("processing");
            } else {
                console.log("error")
            }
        }
    );
})
于 2021-06-09T04:13:15.027 回答