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. 资源管理

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

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

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

相关文章

Linux常见基本指令(二)

目录 1、Linux基础指令 文本查看 cat指令 more指令 less指令 head指令&tail指令 时间相关指令 查找、搜索相关指令 find指令 which指令 whereis指令 alias指令 grep指令 打包压缩和解压缩 zip指令(压缩) unzip(解压&…

HarmonyOS学习第12天:解锁表格布局的奥秘

表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…

动态规划刷题

文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示:dp[i],表示dp表中i下标位置的值 2. 状态转移方程:以i位置位置的状态,最近的一步来划分问题,比如可以将状态拆分成前状态来表示现状态,dp[i] …

大语言模型微调的基本概念介绍

大型语言模型(LLMs)正在以惊人的速度发展,LLM微调的潜力更是如此。大型语言模型的生命周期有几个关键步骤,今天我们将要介绍这个周期中最丰富、最耗时的一部分——LLM微调过程。 大语言模型的生命周期 在深入了解大型语言模型&a…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek,实现了AI编程,体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI(CodeGPT) 首先了解不同版本的deepsee…

Spring MVC 程序开发(1)

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…

Notepad++下载地址【亲测好用】

网上下载链接五花八门,最终找到了一个官方下载链接。 本文章就用来记录Notepad下载网址 https://github.com/notepad-plus-plus/notepad-plus-plus/tags

LeetCode 873. Length of Longest Fibonacci Subsequence(2025/2/27每日一题)

昨天工作耽搁了,没来得及打卡每日一题,今日补上: 标题:Length of Longest Fibonacci Subsequence 题目: 例子: Example 1: Input: arr [1,2,3,4,5,6,7,8] Output: 5 Explanation: The longest subsequ…

【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt

在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数…

【小羊肖恩】小羊杯 Round 2 C+K

题目链接:https://ac.nowcoder.com/acm/contest/100672#question C.是毛毛虫吗? 思路: 其实很简单,假设我们要满足题目所给条件,那么这个毛毛虫最坏情况下肯定是一条如下图所示的无向图 右端省略号为对称图形 &…

【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录,并且配置了一个.sh的启动脚本文件 文件内容: #!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名) JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

17、什么是智能指针,C++有哪几种智能指针【高频】

智能指针其实不是指针,而是一个(模板)类,用来存储指向某块资源的指针,并自动释放这块资源,从而解决内存泄漏问题。主要有以下四种: auto_ptr 它的思想就是当当一个指针对象赋值给另一个指针对…

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

Git学习

Git命令 1、管理文件夹,创建版本仓库 创建文件夹 mkdir repos初始化命令 git init2、查看工作区的文件状态 注:新增和修改过后的文件都是红色 git status3、提交缓存区 注:加入缓存区后的文件变成绿色 git add . git add 文件名4、生…

数据库拓展操作

目录 一、截断表: 操作目的: 操作内容: 性能影响: 基本语法: 例子: 二、插入查询结果: 基本语法: 例子: 三、聚合函数: 常用函数: 基…

【Java分布式】Nacos注册中心

Nacos注册中心 SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心,相比 Eureka 功能更加丰富,在国内受欢迎程度较高。 官网:https://nacos.io/zh-cn/ 集群 Nacos就将同一机房内的实例划分为一个集群,一个服务可以包含多个集…

鸿蒙兼容Mapbox地图应用测试

鸿蒙Next已经发布一段时间了,很多之前的移动端地图应用,纷纷都要求适配鸿蒙Next。作为开发者都清楚,所谓的适配其实都是重新开发,鸿蒙的开发语言和纯前端的Javascript不同,也可以Android原始开发的语言不同。鸿蒙自带的…

老牌工具,16年依然抗打!

在电脑还没普及、操作系统为Windows XP/7的时代,多媒体文件的转换操作常常面临格式不兼容的问题。这时一款名为格式工厂的软件成为了众多用户的首选工具。格式工厂以其简洁易用的界面和强大的功能,轻松地进行各种文件格式的转换。成为很多修小伙伴的喜爱…

前缀和算法 算法4

算法题中帮助复习的知识 vector<int > dp( n ,k); n为数组大小 ,k为初始化 哈希表unordered_map<int ,int > hash; hash.find(k)返回值是迭代器 ,找到k返回其迭代器 没找到返回hash.end() hash.count(k)返回值是数字 ,找到k返回1 ,没找到返回0. C和java中 负数…

如何使用Spring Boot框架整合Redis:超详细案例教程

目录 # 为什么选择Spring Boot与Redis整合&#xff1f; 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合&#xff1f; 将Spring Boot与Redis整合可以充分利…