基于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
  3. 安装 fluent-ffmpegchokidar(用于监控文件系统变化的库):

    复制代码
    npm install fluent-ffmpeg chokidar

编写转码脚本

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

javascript 复制代码
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 目录。
  • 在转码过程中,通过事件监听器输出转码进度和结果。

运行脚本

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

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

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

结语

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

相关推荐
weixin_468466859 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理
U盘失踪了9 小时前
claude code 用 Playwright + “webapp-testing” 技能包,编写前端自动化
自动化
weixin_4684668510 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
志栋智能13 小时前
小步快跑:从单一场景开启超自动化巡检之旅
运维·网络·人工智能·自动化
Agent手记14 小时前
电信运营商如何用AI实现携号转网自动处理?基于实在Agent的业务自动化落地与TARS大模型解析方案
运维·人工智能·ai·自动化
志栋智能16 小时前
超越监控:超自动化巡检提供的主动价值
运维·网络·人工智能·自动化
搜狐技术产品小编202316 小时前
破局与重构:纯端侧 Android 自动化引擎的尝试与未来推演
android·运维·重构·自动化
乐于分享的阿乐17 小时前
最新长期支持版本nodejs安装及环境配置(保姆级图文+安装包)
node.js
m0_5358175518 小时前
macOS上Claude Code安装配置保姆级教程:国内直连API,从0到1跑通(附避坑指南)
gpt·macos·ai·node.js·claude·claudecode·88api
五月君_20 小时前
放弃 Python,Kimi 用 TS + Node.js 重写了一个 Kimi Code
开发语言·python·node.js