基于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 的文件,并添加以下内容:

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在视频处理自动化方面强大功能的冰山一角。随着你对这些工具的深入了解,你将能够解锁更多的可能性,以适应日益增长的多媒体处理需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Memcached 数据库介绍

一 Memcached 介绍 (一)Memcached 简单介绍 弊端 不能持久化 (不支持存在硬盘里) Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统 memcached 虽然没有像redis所具备的…

【Golang星辰图】图像和多媒体处理的创新之路:Go语言的无限潜能

图像处理、音视频编辑,Go语言不再局限:揭秘opencv和goav的威力 前言: 在当今的数字时代,图像处理和多媒体技术在各个领域中的应用越来越广泛。无论是计算机视觉、图像处理还是音视频处理,选择合适的库和工具至关重要。本文将介绍…

宏任务及微任务

js有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件,以及执行队列中的子任务。js是单线程的(某一刻只能执行一行代码),为了让耗时带啊不阻塞其他代码运行,设计了事件循环模型。 事件循环…

【Golang星辰图】 编织自动化魔法:使用 Go 语言中的自动化和部署工具构建可靠的基础设施

Go 语言中的自动化和部署:使用 Ansible、Docker、Kubernetes、Terraform、Jenkins、GitLab 和 Vault 的详细指南 前言: 自动化和部署是当今软件开发生命周期中不可或缺的环节。使用自动化工具可以提高效率、降低成本、减少人为错误,并使软件…

学生时期学习资源同步-1 第一学期结业考试题1

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

D-Star 寻路算法

D-Star 寻路算法 下面简写 D-Star 为 D* D算法:D 算法”的名称源自 Dynamic A Star,最初由Anthony Stentz于“Optimal and Efficient Path Planning for Partially-Known Environments”中介绍。它是一种启发式的路径搜索算法, 适合面对周围环境未知或者…

把 Windows 装进 Docker 容器里

本篇文章聊聊如何在 Docker 里运行 Windows 操作系统, Windows in Docker Container(WinD)。 写在前面 我日常使用 macOS 和 Ubuntu 来学习和工作,但是时不时会有 Windows 使用的场景,不论是运行某个指定的软件&…

业务交付-SIT案例模板

XXXX系统 SIT案例 承建单位:XXXX公司 编制时间:XXXX年XX月 1、引言 ​​​​​​​1.1编写目的 本测试计划目的,为测试XXXX系统功能正常可用,是否符合需求设计,业务逻辑是否符合需求设计具体包括以下方面&#xff1…

QThread常用相关函数、线程启动方式

一、常用相关函数 可以将常用的函数按照功能进行以下分类: 线程启动 void start() 调用后会执行run()函数,但在run()函数执行前会发射信号started(),操作系统将根据优先级参数调度线程。如果线程已经在运行,那么这个函数什么也不…

杂谈-关于如何在博客或者技术站上提问才能获得作者更高的回复意愿和交流热情

如何提问一个有效的问题 😆 首先为什么写这篇文章,由于在研究生的学习和工作过程中由于个人技术知识稍微丰富一点点也比较好学,经常会被提问或者自己提问-在博客,GitHub上,Stakflow上等等-也在和学弟学妹交流的过程中听…

Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题

Java面试深度剖析:设计模式、内存优化与并发处理 在Java技术栈中,设计模式、内存优化和并发处理是构建健壮、高效应用程序的关键。本文将通过三道精心设计的面试题,深入探讨这些知识点,旨在帮助读者在面试中展现深厚的技术功底&a…

C#调用Halcon出现尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException

一、现象 在C#中调用Halcon,出现异常提示:尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException 二、原因 多个线程同时访问Halcon中的某个公共变量,导致程序报错 三、测试 3.1 Halcon代码 其中tsp_width…

ELF-DISCOVER:大型语言模型自我构建推理结构

论文地址:https://arxiv.org/pdf/2402.03620.pdf Abstract 我们引入了SELF-DISCOVER,这是一个通用框架,用于让LLMs自我发现任务内在的推理结构,以解决对典型提示方法具有挑战性的复杂推理问题。该框架的核心是一个自我发现过程&…

测试交付类项目-文档规范

目的:为了确保项目的顺利进行和成功完成,并且为项目交付物提供准确的说明和指导。 文档提供时间:一般为产品验收完成,需求方初步确认完成后,需进行相关文档的提供,供需求方进行验收。 交付文档模板&#…

Python pip 换成国内镜像源

用 easy_install 和 pip 来安装第三方库很方便,它们的原理其实就是从Python的官方源pypi.python.org/pypi 下载到本地,然后解包安装。不过因为某些原因,访问官方的pypi不稳定,很慢甚至有些还时不时的访问不了。 跟 ubuntu 的 apt …

代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

题目&#xff1a;454.四数相加II 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:454.四数相加|| 题目链接&#xff1a;力扣题目链接 图释&#xff1a; // 四数相加|| int fourSumCount(vector<int>& nums1, vector<int>& nums2, vect…

jeesite集成redis,redis工具类

一、 application.yml 配置文件新增 redis:host: 127.0.0.1port: 6379ssl: falsedatabase: 0password: timeout: 20000lettuce:pool:# 最大空闲连接数maxIdle: 3# 最大活动连接数maxActive: 20二、 pom.xml 配置文件新增 <!--redis--><dependency><groupId>r…

开窍后的9大表现 别害怕,开窍了你就是黑马

1. 对周围人&#xff0c;只筛选不改变。 不再试图改变任何人&#xff0c;比起之前替别人操心、提各种建议。现在不再执着改变对方&#xff0c;因为人在意识到问题&#xff0c;和解决问题之间有巨大的鸿沟。 2. 眼神特别。 开窍后最明显的一个特征就是眼神&#xff0c;无论是面…

项目经理到底要不要考PMP?有啥好处?

很多新手项目经理或者想要转行做项目经理的人&#xff0c;都会很快的注意到”PMP”这个证书。并且开始认真思考自己要不要考这个证书&#xff1f;以及想知道这个证书考试的具体难度、流程和内容。 先说结论&#xff1a; 值得考&#xff0c; 很容易考。 我在备考的过程中惊异…

excel批量数据导入时用poi将数据转化成指定实体工具类

1.实现目标 excel进行批量数据导入时&#xff0c;将批量数据转化成指定的实体集合用于数据操作&#xff0c;实现思路&#xff1a;使用注解将属性与表格中的标题进行同名绑定来赋值。 2.代码实现 2.1 目录截图如下 2.2 代码实现 package poi.constants;/*** description: 用…