• 基于Node.js 和 FFmpeg构建自动化脚本用来转码视频


    这个脚本将监控一个特定的目录,自动转码新添加的视频文件,并将转码后的视频保存到指定目录。

    准备环境

    1. 安装 Node.js:

      • 访问 Node.js 官网,下载并安装适合你操作系统的 Node.js 版本。
    2. 安装 FFmpeg(不清楚的可以看我的上篇博客里有详细的安装步骤):

      • 对于 Windows 用户,可以从 FFmpeg 官方网站下载预编译的二进制文件,解压,并将 bin 目录添加到系统的环境变量中。
      • macOS 用户可以使用 Homebrew 安装:brew install ffmpeg
      • Linux 用户(以 Ubuntu 为例)可以使用:sudo apt install ffmpeg

    设置项目

    1. 在你的开发目录中,创建一个新的目录作为项目文件夹,如 video-transcoder

    2. 打开终端或命令提示符,进入该目录,并初始化一个新的 Node.js 项目:

      cd path/to/video-transcoder
      npm init -y
      
      • 1
      • 2
    3. 安装 fluent-ffmpegchokidar(用于监控文件系统变化的库):

      npm install fluent-ffmpeg chokidar
      
      • 1

    编写转码脚本

    在项目目录中创建一个名为 transcode.js 的文件,并添加以下内容:

    const fs = require('fs');
    const path = require('path');
    const ffmpeg = require('fluent-ffmpeg');
    const chokidar = require('chokidar');
    
    // 设置监控的目录和输出目录
    const watchDir = path.join(__dirname, 'watch');
    const outputDir = path.join(__dirname, 'output');
    
    // 确保输出目录存在
    if (!fs.existsSync(outputDir)) {
        fs.mkdirSync(outputDir, { recursive: true });
    }
    
    // 监控目录中的新文件
    chokidar.watch(watchDir).on('add', (filePath) => {
        // 确保文件是视频(这里简单以文件扩展名为准,可根据需要调整)
        if (path.extname(filePath).match(/\.(mp4|mov|avi)$/)) {
            console.log(`Detected new video for transcoding: ${filePath}`);
            
            // 设置输出文件路径
            const outputFilePath = path.join(outputDir, path.basename(filePath, path.extname(filePath)) + '_converted.mp4');
            
            // 使用 FFmpeg 进行转码
            ffmpeg(filePath)
                .output(outputFilePath)
                .videoCodec('libx264') // 使用 x264 编码
                .audioCodec('aac') // 使用 AAC 音频编码
                .on('end', () => console.log(`Transcoding finished: ${outputFilePath}`))
                .on('error', (err) => console.error(`Transcoding error: ${err.message}`))
                .run();
        }
    });
    
    console.log(`Watching for videos to transcode in: ${watchDir}`);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    这段脚本做了几件事:

    • 使用 chokidar 库监控 watchDir 目录下的新添加文件。
    • 当检测到新文件时,判断是否为视频文件(通过文件扩展名)。
    • 如果是视频文件,使用 fluent-ffmpeg 将其转码为使用 H.264 编码的 MP4 文件,并保存到 outputDir 目录。
    • 在转码过程中,通过事件监听器输出转码进度和结果。

    运行脚本

    1. video-transcoder 目录中,确保有 watchoutput 两个子目录。将你想要自动转码的视频文件放入 watch 目录。

    2. 在命令行中运行你的脚本:

      node transcode.js
      
      • 1
    3. 脚本会自动检测 watch 目录中的新视频文件,并开始转码过程,转码后的视频将保存在 output 目录。

    结语

    通过上述步骤,你已经创建了一个可以自动监控目录并转码视频的Node.js脚本。这个脚本可以根据你的特定需求进一步定制和扩展,例如添加更多的转码选项、处理更多视频格式、或者在转码完成后发送通知等。这只是展示了FFmpeg和Node.js在视频处理自动化方面强大功能的冰山一角。随着你对这些工具的深入了解,你将能够解锁更多的可能性,以适应日益增长的多媒体处理需求。

  • 相关阅读:
    408 | 【2020年】计算机统考真题 自用回顾知识点整理
    【springboot系列】springboot启动过程源码分析,【最全源码源码,手把手教】
    Leetcode 313: Super Ugly Number (超级丑数)
    Cyanine5-N3细胞成像和显微镜CY5-N3/azide星戈瑞
    Python灰帽编程——错误异常处理与面向对象
    Springboot中使用kafka
    XML配置文件
    【PyTorch入门教程】1. 基础知识
    Qt扫盲-QImage 理论总结
    时间复杂度(补充)和 空间复杂度
  • 原文地址:https://blog.csdn.net/wanghaoyingand/article/details/136573710