如何在Node.js中生成视频缩略图?

16

我正在使用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格式的文件。

8个回答

20

2
这里的 count:1 是什么意思? - vineet
2
引用文档中的内容:“count:指定要生成多少个缩略图。使用此选项时,视频中会以固定间隔生成缩略图(例如,请求3个缩略图时,在视频长度的25%、50%和75%处生成)。当指定timemarks或timestamps时,将忽略计数。” - Risadinha
2
/path/to/your_movie.avi 可以是一个URL吗? - Andrey Solera

2
这里有一个与此相关的Node.js模块:video-thumb。它基本上只是对exec ffmpeg的调用进行了封装。

2

通过在命令中添加“-s 宽x高”选项来调整大小。


它能正常工作,但这是唯一的方法吗?我的意思是说,我真的必须使用exec吗?有没有Node模块可以处理这个问题? - paynestrike

1

0

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

npm install --save thumbsupply

安装模块后,您可以按照以下方式使用它。
const thumbsupply = require('thumbsupply')("com.example.application");

thumbsupply.generateThumbnail('some-video.mp4')
.then(thumb => {
    // serve thumbnail
})

1
注意安装命令,因为 thumbsupply 中有 3 个 'p'。 - jsgalarraga

0
使用媒体缩略图,您可以轻松地从视频中生成缩略图。该模块基本上包装了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)) 

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


0
import * as thumbsupply from 'thumbsupply'; 
     const thumbNail = await thumbsupply.default.generateThumbnail("video(720p).mp4", {
        size: thumbsupply.default.ThumbSize.LARGE,
        timestamp: '10%',
        forceCreate: true,
        mimetype: 'video/mp4',
      });

-1
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")
            }
        }
    );
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接