Node.js结合FFmpeg构建自动化脚本实现转码视频

作者:后端茶话

时间:2026-10-31

浏览:434

本文介绍如何使用Node.js结合FFmpeg、fluent-ffmpeg和chokidar库,构建一个自动监控目录并转码视频的脚本。通过监听指定文件夹的新增视频文件,自动调用FFmpeg将其转换为H.264编码的MP4格式,实现多媒体处理自动化。

文章目录

该脚本用于持续监控指定目录,一旦发现新视频文件便自动执行转码操作,并将处理后的视频保存至预设的目标文件夹。

环境准备

Node.js安装

  • 前往Node.js官方网站,下载并安装与你操作系统相匹配的Node.js版本。

FFmpeg安装(若不确定安装步骤,可参考之前的博客文章获取详细指南):

  • Windows用户需从FFmpeg官网下载预编译二进制文件,解压后将 bin 目录路径添加至系统环境变量。
  • macOS用户可通过Homebrew执行安装命令:brew install ffmpeg。
  • Linux用户(以Ubuntu为例)可执行以下命令安装:sudo apt install ffmpeg。

项目初始化

在开发目录下新建一个文件夹作为项目根目录,例如命名为 video-transcoder。

打开终端或命令行工具,进入该目录并初始化Node.js项目:

cd path/to/video-transcoder
npm init -y

安装依赖包 fluent-ffmpeg 以及用于监听文件系统变化的库 chokidar:

npm install fluent-ffmpeg chokidar

编写转码逻辑

在项目根目录下创建文件 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}`);

该脚本主要执行以下功能:

  • 利用 chokidar 库实时监控 watchDir 目录,捕获新添加的文件事件。
  • 获取新文件后,检查其扩展名以判断是否为视频文件。
  • 确认为视频文件后,调用 fluent-ffmpeg 将其转码为采用H.264编码的MP4格式,并输出至 outputDir 目录。
  • 在转码执行期间,通过事件监听器实时输出处理进度及最终结果。

脚本运行

在 video-transcoder 目录下,确认存在 watch 和 output 两个子文件夹。将待自动转码的视频文件放入 watch 目录中。

在命令行界面执行以下命令启动脚本:

node transcode.js

脚本将自动扫描 watch 目录内的新视频文件并启动转码流程,处理完成的视频文件将存储于 output 目录。

总结

经过上述步骤,你已成功构建了一个基于Node.js的自动视频转码脚本,它能够监控目录并自动处理视频。该脚本可根据实际需求进行扩展,例如增加更多转码参数、支持更多视频格式,或在转码完成后触发通知机制。这仅是展示FFmpeg与Node.js在多媒体自动化处理领域强大能力的初步尝试。随着对工具理解的深入,你将能解锁更多可能性,以满足日益复杂的多媒体处理需求。

关于Node.js结合FFmpeg构建自动化脚本实现视频转码的介绍至此结束。如需了解更多相关Node.js与FFmpeg视频处理内容,请查阅本站历史文章或浏览后续相关文章,感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章