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

Posted

技术标签:

【中文标题】如何在 node.js 中生成视频缩略图?【英文标题】:how to generate video thumbnail in node.js? 【发布时间】:2012-10-16 07:04:52 【问题描述】:

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

【问题讨论】:

【参考方案1】:

Reference to GitHub fluent-ffmpeg project.

来自original *** answer的重复示例:

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')
  );

【讨论】:

这里的count:1 是什么?? 引用文档:“count:指定要生成多少个缩略图。使用此选项时,会在视频中定期生成缩略图(例如,请求 3 个缩略图时,25%、50 % 和 75% 的视频长度)。指定时间标记或时间戳时忽略计数。" /path/to/your_movie.avi 可以是 URL 吗?【参考方案2】:

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

【讨论】:

很好用,但这是唯一的方法吗,我的意思是我真的必须使用 exec,是否有节点模块来处理这个问题【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

使用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)) 

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

【讨论】:

【参考方案6】:

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

npm install --save thumbsupply

模块安装完成后,可以如下方式使用。

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

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

【讨论】:

请留意安装命令,因为 thumbsupply 有 3 个“p”【参考方案7】:
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")
            
        
    );
)

【讨论】:

以上是关于如何在 node.js 中生成视频缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin Forms 中生成 PDF 第一页的缩略图

使用ffmpeg从视频制作多个缩略图

在 Android 中生成 Pdf 的缩略图

为啥我使用 AVAssetImageGenerator 的视频缩略图没有显示?

通过切割(不破坏纵横比)在Java中生成方形缩略图?

从视频生成的 AWS mediaconvert 缩略图被旋转?