Nodejs 第十六章(ffmpeg)

2023-09-16 23:11:08

FFmpeg 是一个开源的跨平台多媒体处理工具,可以用于处理音频、视频和多媒体流。它提供了一组强大的命令行工具和库,可以进行视频转码、视频剪辑、音频提取、音视频合并、流媒体传输等操作。

FFmpeg 的主要功能和特性:
  1. 格式转换:FFmpeg 可以将一个媒体文件从一种格式转换为另一种格式,支持几乎所有常见的音频和视频格式,包括 MP4、AVI、MKV、MOV、FLV、MP3、AAC 等。
  2. 视频处理:FFmpeg 可以进行视频编码、解码、裁剪、旋转、缩放、调整帧率、添加水印等操作。你可以使用它来调整视频的分辨率、剪辑和拼接视频片段,以及对视频进行各种效果处理。
  3. 音频处理:FFmpeg 可以进行音频编码、解码、剪辑、混音、音量调节等操作。你可以用它来提取音频轨道、剪辑和拼接音频片段,以及对音频进行降噪、均衡器等处理。
  4. 流媒体传输:FFmpeg 支持将音视频流实时传输到网络上,可以用于实时流媒体服务、直播和视频会议等应用场景。
  5. 视频处理效率高:FFmpeg 是一个高效的工具,针对处理大型视频文件和高分辨率视频进行了优化,可以在保持良好质量的同时提供较快的处理速度。
  6. 跨平台支持:FFmpeg 可以在多个操作系统上运行,包括 Windows、MacOS、Linux 等,同时支持多种硬件加速技术,如 NVIDIA CUDA 和 Intel Quick Sync Video。
安装

http://ffmpeg.p2hp.com/download.html

image.png

选择对应的操作系统进行下载就可以了,下载完成配置一下环境变量就ok了

输入 ffmpage -version 不报错即可

image.png

子进程配合ffmpeg

  1. 简单的demo 视频转gif -i 表示输入的意思
const {execSync} = require('child_process')
execSync(`ffmpeg -i test.mp4 test.gif`,{stdio:'inherit'})

image.png

  1. 添加水印

-vf 就是video filter

drawtext 添加文字 fontsize 大小 xy垂直水平方向 fontcolor 颜色 text 水印文案 全部小写

const {execSync} = require('child_process')

execSync(`ffmpeg -i test.mp4 -vf drawtext=text="XMZS":fontsize=30:fontcolor=white:x=10:y=10 test2.mp4`,{stdio:'inherit'})

image.png

  1. 视频裁剪 + 控制大小

-ss 起始时间

-to 结束事件

ss写在 -i的前面可能会导致精度问题,因为视频还没解析就跳转到了相关位置,但是解析速度快

ss写在 -i后面精度没问题,但是解析速度会变慢

const {execSync} = require('child_process')

execSync(`ffmpeg -ss 10 -to 20 -i test.mp4  test3.mp4`,{stdio:'inherit'})
  1. 提取视频的音频
const {execSync} = require('child_process')
execSync(`ffmpeg -i test.mp4 test.mp3`,{stdio:'inherit'})

image.png

  1. 去掉水印

w h 宽高
xy 垂直 水平坐标
delogo使用的过滤参数删除水印

const {execSync} = require('child_process')

execSync(`ffmpeg -i  test2.mp4 -vf delogo=w=120:h=30:x=10:y=10 test3.mp4`,{stdio:'inherit'})

image.png

更多推荐

Android:获取MAC < 安卓系统11 <= 获取UUID

1.核心代码主要的UseMac.javaimportandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.net.ConnectivityManager;importandroid.net.NetworkInfo;impo

【PickerView案例08-国旗搭建界面加载数据 Objective-C预言】

一、来看我们第三个案例1.来看我们第三个关于PickerView的一个案例,首先呢,我要问大家一下,咱们这个是几组数据呢,这是一个pickerView,只不过,它显示的是什么,一个界面,前面两个案例,都是文字这个案例,开始有图片了,总结一下这三个案例:1)第一个案例:组与组之间,没有任何关系,2)第二个案例:组与组之间

Java学习day03:方法、break和continue关键字

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)Java学习day03:方法、break和continue关键字一、方法1.什么是方法程序中最小的执行单元2.为什么要有方法开发中出现大量重复代码或功能,循

油猴Safari浏览器辅助插件:Tampermonkey for Mac中文版

油猴脚本Tampermonkey是一款油猴Safari浏览器辅助插件,是一款适用于Safari用户的脚本管理,能够方便管理不同的脚本。虽然有些受支持的浏览器拥有原生的用户脚本支持,但tampermonkey油猴插件将在您的用户脚本管理方面提供更多的便利,它可以提供了诸如便捷脚本安装、自动更新检查、标签中的脚本运行状况速

公众环境关注如何提升企业ESG表现(2011-2022年)

参照陶云清(2023)的做法,本团队对来自“科学学与科学技术管理”《公众环境关注如何提升企业ESG表现?—基于外部压力与内部关注的双重视角》一文中的基准回归部分进行复刻。如何驱动企业在逐利过程中兼顾环境、社会和治理表现(ESG)成为高质量发展过程中不可回避的重大现实问题。基于此,利用2011-2022年A股上市公司ES

华为云Stack的学习(六)

七、华为云Stack计算服务介绍1.计算服务整体介绍2.弹性云服务器ECSECS(ElasticCloudServer),即弹性云服务器,是由vCPU、内存、磁盘等组成的,获取方便、弹性可扩展、按需使用的、虚拟的计算服务器。ECS只需要花费较低的成本,就可以像使用本地PC或物理服务器一样,在云上使用弹性服务器,在大大降

计算机网络之物理层

目录一、物理层概述二、数据通信的基础知识2.1数据通信系统的模型2.2关于信道的几个基本概念2.3信道的极限容量三、物理层下面的传输媒体3.1导引型传输媒体3.2非导引型传输媒体四、信道复用技术五、数字传输系统六、宽带接入技术一、物理层概述物理层规程:用于物理层的协议。物理层的主要任务:确定与传输媒体的接口有关的一下特

【计算机网络】网络编程接口 Socket API 解读(7)

Socket是网络协议栈暴露给编程人员的API,相比复杂的计算机网络协议,API对关键操作和配置数据进行了抽象,简化了程序编程。本文讲述的socket内容源自Linuxman。本文主要对各API进行详细介绍,从而更好的理解socket编程。sendsend()遵循POSIX.1-2008MSG_CONFIRM是Linu

400电话-400电话申请-400电话办理开通服务中心

随着企业竞争的日益激烈,提供优质的客户服务成为企业成功的关键。而在客户服务中,电话联系是最常用的方式之一。为了满足企业的需求,400电话应运而生。本文将介绍400电话的申请、办理和开通服务中心,帮助企业了解如何获得高效的客户服务。首先,申请400电话是非常简单的。企业只需联系当地的电信运营商或400电话服务提供商,提供

短剧解说小程序搭建,短剧解说小程序源码

短剧解说小程序搭建,短剧解说小程序源码可定制开发小程序,H5,APP等系统有需要可定制可出源码,这个是啥你懂的(VVVVVVVVVVV):二五四九七八九零五九需要源码或搭建可看上面的数字信息短剧解说小程序搭建小程序使用uniapp开发服务端技术Java开发SpringBoot,mysql,redis,mybatis,T

MySQL与Oracle的分页

MySQL与Oracle的分页当我们通过SQL去查询一个结果集的时候,并不需要查看所有行,可能只是查看前几行,或者中间的几行。则需要像MySQL的limit或Oracle的ROWNUM与FETCHNEXT来实现。MySQL语法SELECT*FROMtable_nameLIMIT[offset,]row_count;LI

热文推荐