美文网首页
3分钟提取10000个视频的第一帧图片,node执行ffmpeg

3分钟提取10000个视频的第一帧图片,node执行ffmpeg

作者: jalen2024 | 来源:发表于2022-10-23 23:03 被阅读0次

    先给电脑安装node环境

    node官网地址:https://nodejs.org/en/

    image.png

    安装完成之后可以将node配置到系统环境变量中,

    最后再检验自己node环境是否ok

    ➜  ~ node -v
    v12.18.2
    
    image.png

    下载ffmpeg的安装包

    官网地址:https://ffmpeg.org/

    mac下载地址:https://evermeet.cx/ffmpeg/

    windows下载地址:https://www.gyan.dev/ffmpeg/builds/

    准备好脚本 全部代码如下

    var fs = require('fs');
    var path = require('path'); //解析需要遍历的文件夹
    
    const ffmpeg = require('fluent-ffmpeg')
    let cp = require('child_process');
    
    
    console.log('准备开始处理')
    
    var filePath = path.resolve('./vlist');
    //调用文件遍历方法
    fileDisplay(filePath);
    
    
    //文件遍历方法
    function fileDisplay(filePath) {
       //根据文件路径读取文件,返回文件列表
       fs.readdir(filePath, function(err, files) {
           if (err) {
               console.warn(err)
           } else {
               //遍历读取到的文件列表
               files.forEach(function(filename) {
                   console.log('文件名:', filename);
                   //获取当前文件的绝对路径
                   var filedir = path.join(filePath, filename);
                   console.log('文件路径:', filename);
                   if (filename.indexOf('DS_Store') == -1) {
                       //这里预设的是 将转换的图片放在当前目录的images文件夹里 文件名是jpg后缀
                       execJpg(filedir, `${filePath}/images/${filename.split('.')[0]}.jpg`)
                   }
               });
           }
       });
    }
    
    //提取视频第一帧 保存为图片
    //pathFile:原文件地址
    //saveFilePath:需要保存的文件地址 
    const execJpg = (pathFile, saveFilePath) => {
       //这个指令也能转
       // const aa = `./ffmpeg -i ${pathFile} -y -f image2 -frames 1 ${saveFilePath}`
       // ./ffmpeg -ss 00:00:00 -t 00:00:01 -i f9.mp4 -an -f image2 -s 640:1136 a123.jpeg
       const bb = `./ffmpeg -ss 00:00:00 -t 00:00:01 -i ${pathFile} -an -f image2 -s 640:1136 ${saveFilePath}`
       console.log('当前指令:', bb)
       cp.exec(bb,
           function(res) {
               console.log('执行的结果:', JSON.stringify(res))
               console.log(`${saveFilePath} success...`)
           })
    }
    
    console.log('处理结束')
    
    
    

    准备需要转换的mp4文件列表

    将脚本文件、ffmpeg、 mp4文件夹放在同一个文件夹下

    image.png

    命令行切换到该目录 并配置运行环境

    ➜  ~ cd /Users/jalen/Desktop/inv/ffmpeg
    

    脚本中有用到fluent-ffmpeg,所以需要安装下

    npm install fluent-ffmpeg

    ➜  vlist npm install fluent-ffmpeg
    npm WARN saveError ENOENT: no such file or directory, open '/Users/jalen/package.json'
    npm WARN enoent ENOENT: no such file or directory, open '/Users/jalen/package.json'
    npm WARN svg-inline-react@1.0.3 requires a peer of react@^0.14.0 || ^15.0.0 but none is installed. You must install peer dependencies yourself.
    npm WARN uview@0.1.0 requires a peer of vue@^2.4.1 but none is installed. You must install peer dependencies yourself.
    npm WARN jalen No description
    npm WARN jalen No repository field.
    npm WARN jalen No README data
    npm WARN jalen No license field.
    
    + fluent-ffmpeg@2.1.2
    added 3 packages from 3 contributors in 3.668s
    
    6 packages are looking for funding
     run `npm fund` for details
    
    
    
      ╭────────────────────────────────────────────────────────────────╮
      │                                                                │
      │      New major version of npm available! 6.14.11 → 8.19.2      │
      │   Changelog: https://github.com/npm/cli/releases/tag/v8.19.2   │
      │               Run npm install -g npm to update!                │
      │                                                                │
      ╰────────────────────────────────────────────────────────────────╯
    
    ➜  vlist
    

    执行脚本命令

    ➜ ffmpeg node transVideo2Jpg.js

    准备开始处理
    处理结束
    文件名: .DS_Store
    文件路径: .DS_Store
    文件名: a1.mp4
    文件路径: a1.mp4
    当前指令: ./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a1.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a1.jpg
    文件名: a2.mp4
    文件路径: a2.mp4
    当前指令: ./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a2.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a2.jpg
    文件名: a3.mp4
    文件路径: a3.mp4
    当前指令: ./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a3.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a3.jpg
    文件名: a4.mp4
    文件路径: a4.mp4
    当前指令: ./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a4.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a4.jpg
    文件名: images
    文件路径: images
    当前指令: ./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/images -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/images.jpg
    执行的结果: {"killed":false,"code":1,"signal":null,"cmd":"./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/images -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/images.jpg"}
    /Users/jalen/Desktop/inv/ffmpeg/vlist/images/images.jpg success...
    执行的结果: {"killed":false,"code":234,"signal":null,"cmd":"./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a4.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a4.jpg"}
    /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a4.jpg success...
    执行的结果: {"killed":false,"code":234,"signal":null,"cmd":"./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a3.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a3.jpg"}
    /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a3.jpg success...
    执行的结果: {"killed":false,"code":234,"signal":null,"cmd":"./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a2.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a2.jpg"}
    /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a2.jpg success...
    执行的结果: {"killed":false,"code":234,"signal":null,"cmd":"./ffmpeg -ss 00:00:00 -t 00:00:01 -i /Users/jalen/Desktop/inv/ffmpeg/vlist/a1.mp4 -an -f image2 -s 640:1136 /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a1.jpg"}
    /Users/jalen/Desktop/inv/ffmpeg/vlist/images/a1.jpg success...
    
    image.png image.png

    完结撒花,欢迎老铁们点赞加关注呀~~~。

    相关文章

      网友评论

          本文标题:3分钟提取10000个视频的第一帧图片,node执行ffmpeg

          本文链接:https://www.haomeiwen.com/subject/bulizrtx.html