fluent-ffmpeg 依赖详解

fluent-ffmpeg 是一个用于在 Node.js 环境中与 FFmpeg 进行交互的强大库,它提供了流畅的 API 来执行各种音视频处理任务,如转码、剪辑、合并等。

一、安装

npm install fluent-ffmpeg

二、基本使用

要使用 fluent-ffmpeg,首先需要确保系统中已经安装了 FFmpeg,或者使用 ffmpeg-static 等库提供静态的 FFmpeg 二进制文件。如下,展示如何将视频文件转换为另一种格式

const ffmpeg = require("fluent-ffmpeg");
// 设置 FFmpeg 可执行文件的路径(如果需要)
// ffmpeg.setFfmpegPath('/path/to/ffmpeg');
// 创建一个 FFmpeg 命令
ffmpeg("input.mp4")
  .output("output.avi")
  .on("end", () => {
    console.log("转换完成");
  })
  .on("error", (err) => {
    console.error("转换出错:", err.message);
  })
  .run();

三、常见功能及用法

1. 转码

可以指定不同的编码器、分辨率、码率等参数进行转码

ffmpeg("input.mp4")
  .videoCodec("libx264") // 指定视频编码器
  .audioCodec("aac") // 指定音频编码器
  .size("640x480") // 指定视频分辨率
  .videoBitrate("1000k") // 指定视频码率
  .output("output.mp4")
  .run();

2. 剪辑

可以指定开始时间和持续时间来剪辑视频

ffmpeg("input.mp4")
  .setStartTime("00:01:00") // 从第 1 分钟开始
  .setDuration("00:00:30") // 剪辑 30 秒
  .output("output.mp4")
  .run();

3. 合并多个视频文件

可以将多个视频文件合并为一个

const command = ffmpeg();
// 添加多个输入文件
command.input("input1.mp4");
command.input("input2.mp4");
// 合并文件
command.mergeToFile("output.mp4", __dirname);

4. 生成缩略图

可以从视频中提取缩略图

ffmpeg("input.mp4").screenshots({
  count: 1, // 生成 1 张缩略图
  folder: "thumbnails", // 缩略图保存的文件夹
  size: "320x240", // 缩略图的尺寸
  filename: "thumbnail-%b.jpg", // 缩略图的文件名
});

5. 事件监听

fluent-ffmpeg 提供了多个事件,可以用于监控命令的执行状态

start:命令开始执行时触发。
progress:处理进度更新时触发,可以获取当前的处理进度信息。
end:命令执行完成时触发。
error:命令执行出错时触发。

ffmpeg("input.mp4")
  .output("output.mp4")
  .on("start", (commandLine) => {
    console.log("开始执行命令:", commandLine);
  })
  .on("progress", (progress) => {
    console.log("处理进度:", progress.percent + "%");
  })
  .on("end", () => {
    console.log("处理完成");
  })
  .on("error", (err) => {
    console.error("处理出错:", err.message);
  })
  .run();

四、注意事项

1. FFmpeg 依赖

fluent-ffmpeg 只是一个封装库,需要系统中安装有 FFmpeg 才能正常工作。可以使用 ffmpeg-static 来提供静态的 FFmpeg 二进制文件,避免手动安装的麻烦。

2. 错误处理

在实际应用中,要注意对 error 事件进行处理,以捕获和处理可能出现的错误,保证程序的健壮性。

3. 资源管理

音视频处理通常会消耗大量的系统资源,特别是在处理大文件或进行复杂操作时,要注意合理分配资源,避免程序崩溃。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性模型 - 支持向量机

支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin&#xff09…

利用STM32TIM自制延迟函数实验

一、实验目的 掌握STM32定时器(TIM)的工作原理及配置方法学习使用HAL库实现微秒级/毫秒级延时函数理解定时器中断服务程序的编写规范 二、实验原理 ​定时器基础: STM32定时器包含向上计数器、向下计数器、中心对齐模式通过预分频器&#x…

mac安装环境

minconda https://docs.anaconda.net.cn/miniconda/install/ 注意在下载下来应该有100多兆,太大了应该是完整版,我们不需要 jdk 镜像网站下载设置环境变量: 终端:sudo vim ~/.zshrc # JDK Config JAVA_HOME/Library/Java/Java…

视觉图像坐标转换

1. 透镜成像 相机的镜头系统将三维场景中的光线聚焦到一个平面(即传感器)。这个过程可以用小孔成像模型来近似描述,尽管实际相机使用复杂的透镜系统来减少畸变和提高成像质量。 小孔成像模型: 假设有一个理想的小孔,…

计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【LeetCode: SQL专题 : SQL132 每个题目和每份试卷被作答的人数和次数 + 合并查询】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

动态内容加载的解决方案:Selenium与Playwright对比故障排查实录

方案进程 2024-09-01 09:00 | 接到亚航航班数据采集需求 2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证 2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制 2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略 2024-09-02 10:00 | 双方案完整实现并通过压力测试故…

不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比

本文深入探讨了最近国内外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技术细节、性能表现、应用场景及局限性,并从技术能力、功能需求、成本预算、数据安全和合规以及服务与支持五个关键维度,详细分析了不同规模企业在选择 AI 工具时的考量因素…

利用 Python 爬虫进行跨境电商数据采集

1 引言2 代理IP的优势3 获取代理IP账号4 爬取实战案例---(某电商网站爬取)4.1 网站分析4.2 编写代码4.3 优化代码 5 总结 1 引言 在数字化时代,数据作为核心资源蕴含重要价值,网络爬虫成为企业洞察市场趋势、学术研究探索未知领域…

【数据挖掘】Matplotlib

Matplotlib 是 Python 最常用的 数据可视化 库之一,在数据挖掘过程中,主要用于 数据探索 (EDA)、趋势分析、模式识别 和 结果展示。 📌 1. Matplotlib 基础 1.1 安装 & 导入 # 如果未安装 Matplotlib,请先安装 # pip instal…

使用Java构建高效的Web服务架构

使用Java构建高效的Web服务架构 随着互联网技术的飞速发展,Web服务在现代应用中扮演着至关重要的角色。尤其是在企业级应用中,如何构建一个高效、可扩展且易维护的Web服务架构,成为了开发者和架构师面临的一项重要挑战。Java作为一种成熟、稳…

数据库MySQL,在终端输入后,提示不是内部命令等

【解决问题】mysql提示不是内部或外部命令,也不是可运行的程序 一般这种问题是因为没有在系统变量里面添加MySQL的可执行路径 以下是添加可执行路径的方法: 第一步:winR输入services.msc 然后找到MySQL,右击属性并复制MySQL的可执…

LabVIEW正弦信号处理:FFT与最小二乘拟合的参数提取

问题一:LabVIEW能否对采集的正弦力信号进行快速傅里叶变换(FFT),并得到幅值和相位结果? 答案: 可以。LabVIEW通过内置信号处理工具包提供完整的FFT分析功能,具体实现如下: FFT分析流…

Hive-05之查询 分组、排序、case when、 什么情况下Hive可以避免进行MapReduce

一、目标 掌握hive中select查询语句中的基本语法掌握hive中select查询语句的分组掌握hive中select查询语句中的join掌握hive中select查询语句中的排序 二、要点 1. 基本查询 注意 SQL 语言大小写不敏感SQL 可以写在一行或者多行关键字不能被缩写也不能分行各子句一般要分行…

React:B站评论demo,实现列表渲染、删除按钮显示和功能实现、导航栏渲染切换及高亮显示、评论区的排序

功能要求: 1、渲染评论列表 2、删除评论功能:只显示自己评论的删除按钮;点击删除按钮,删除当前评论,列表中不再显示。 3、渲染导航Tab(最新 | 最热)和其 高亮实现 4、评论排序功能实现&…

ST表解决RMQ问题

引入 给定你一个长度为n的数组a,再给你q次询问,每次询问给定你一个区间[L,R],让你求a数组中L~R中的最大值/最小值 我们利用常规算法求时很显然会超时,以此我们需要一个数据结构——ST表来解决 ST表 ST表是一个类似于线段树的东…

[数据结构] - - - 链表

一、定义 链表:是一种常见的线性数据结构,它通过一组节点(Node)来存储数据,每个节点包含两部分:数据域和指针域。 1.1 链表的基本概念 节点(Node):链表的最小单元&#…

Linux的动态库与静态库

目录 动静态库的基本原理 认识动静态库 动静态库各自的特征 静态库 动态库 动静态库与内存 静态库的加载方式 动态库的加载方式 加载到物理内存的细节 静态库的打包与使用 打包 使用 动态库的打包与使用 打包 使用 我以前写的一篇文章中就用网吧与在宿舍自己组装电…

图漾PercipioIPTool软件使用

文章目录 前期准备1.PercipioIPTool软件1.1 更改网络适配器1.2 更改自动获取IP1.3设置静态IP 前期准备 1.一根超五类及其以上规格网线(cat5e、cat6…) 2.相机,配套网线和IO线 3.配套软件PercipioViewer或者PercipioIPTool软件(Windows环境使…

EasyRTC嵌入式WebRTC技术与AI大模型结合:从ICE框架优化到AI推理

实时通信技术在现代社会中扮演着越来越重要的角色,从视频会议到在线教育,再到远程医疗,其应用场景不断拓展。WebRTC作为一项开源项目,为浏览器和移动应用提供了便捷的实时通信能力。而EasyRTC作为基于WebRTC的嵌入式解决方案&…