node基础 第二篇

01 ffmpeg开源跨平台多媒体处理工具,处理音视频,剪辑,合并,转码等

FFmpeg 的主要功能和特性:

1.格式转换:FFmpeg 可以将一个媒体文件从一种格式转换为另一种格式,支持几乎所有常见的音频和视频格式,包括 MP4、AVI、MKV、MOV、FLV、MP3、AAC 等。

视频处理:FFmpeg 可以进行视频编码、解码、裁剪、旋转、缩放、调整帧率、添加水印等操作。你2可以使用它来调整视频的分辨率、剪辑和拼接视频片段,以及对视频进行各种效果处理。

3.音频处理:FFmpeg 可以进行音频编码、解码、剪辑、混音、音量调节等操作。你可以用它来提取音频轨道、剪辑和拼接音频片段,以及对音频进行降噪、均衡器等处理。

4.流媒体传输:FFmpeg 支持将音视频流实时传输到网络上,可以用于实时流媒体服务、直播和视频会议等应用场景。

5视频处理效率高:FFmpeg 是一个高效的工具,针对处理大型视频文件和高分辨率视频进行了优化可以在保持良好质量的同时提供较快的处理速度。

6.跨平台支持:FFmpeg可以在多个操作系统上运行,包括 Windows、MacOs、Linux 等,同时支持多种硬件加速技术,如 NVIDIA CUDA 和 InteLQuick Sync Video。

02 ffmpeg的使用

第一步 下载的地址:ffmpeg.p2hp.com/download.html

下载完需要配置环境变量

第二步 准备一个mp4的文件


创建一个案例

const {execSync} = requie('child_process')

需求1 基本格式转化avi mp4 gif等

execSync('ffmpeg -i test.mp4 test.gif',{stdio:'inherit'})

test.mp4是文件素材  test.gif是输出的什么格式的文件 {stdio:'inherit'}打印输出的流程

需求2 提取视频中的音频, 将后缀改为mp3就可以了
 
execSync('ffmpeg -i test.mp4 test.mp3',{stdio:'inherit'})

需求3 裁剪视频 -ss -to 从10s开始裁剪到20s

execSync('ffmpeg -ss 10 -to 20 -i test.mp4 test.gif',{stdio:'inherit'})

需求4 加水印  -vf

execSync('ffmpeg -i test.mp4 -vf drawtext=text="haotaotao":fontsize=30:x=10:y=10

 test.gif',{stdio:'inherit'})


需求5 删除水印

execSync('ffmpeg -i test.mp4 -vf delogo=w=120:h=30:x=10:y=10 test.gif',

{stdio:'inherit'})

03 events 发布订阅模式

const eventEmitter = require('events')

// 发布订阅模式 off on emit once   once只触发一次
 

const bus = new enventEmitter() 

// 默认只能监听10个事件 

// bus.setMaxListeners(20) //设置监听的个数

// 订阅一个事件 事件名称随便起

bus.on('test',(ags)=>{

    console.log(ags)

})


// 发布 

bus.emit('test','熊猫')





04 util

import util from 'util'

import {exec} from 'child_procee'

const execPromise = util.promisify(exec)

execPromise('node -v').then(res=>{console.log(res)})


console.log(util.format('%d---$s','xm','xs')) // xm---xs

05 fs

读取文件:异步  同步  promise

import fs = require('fs')

import fs1 = require('fs/promise')

读取文件:异步 写法 

fs.readFile(./index,txt,{

  encoding:'utf-8',

  flag:'r'

},(err,data)=>{

  if(err) throw err

  console.log(data)

})

同步方法 阻塞下面的代码 返回的二级制Buffer

let result = fs.readFileSync('./index.txt')

console.log(result.toString())

console.log('test') // 上面的先读取完了之后 才回执行这行代码

promise读取文件

fs1.readFile('./index.txt').then(res=>{console.log(res.toString())})

-------------------------------------------------------------------------------------


可读流:主要用来处理大文件

const readStream = fs.createReadStream('./index.txt')

readStram.on('data',(chunk)=>{

    console.log(chunk.toString())

})

readStram.on('end',()=>{console.log('读取失败')})


------------------------------------------------------------------------------------------

创建文件夹

fs.mkdirSync('./xiaoming')

创建多层文件夹

fs.mkdirSync('./src/imgae',{recursive:true})

删除文件

fs.rmSync('./xiaoming')

重命名

fs.renameSync('./index.txt','index2.txt')


监听文件的变化

fs.watch('./index.txt',(event.filename)=>{

console.log(event,filename)

---------------------------------------------------------------------------------

写入文件

fs.writeFileSync('./index.txt','hello')

追加内容

fs.writeFileSync('./index.txt','node',{flag:'a'})


追加内容的的api

fs.appendFileSync('./index.txt','haotaotao')


-------------------------------------------------------------------------------------

可写流

let writestream = fs.createWriteStream('./index.txt')

let verse = [1,2,3,4,5,6,7]

verse.forEach(item=>{
  
    writestream.write(item+'\n')

})

writestream.end()

writestream.on('finish',()=>{console.log('写入完成')})


-------------------------------------------------------------------------------

硬连接

fs.linkSync('./index.js','./index2.js')  共享文件 备份文件 互相影响

软连接

fs.symlinkSync('./index.js','./index1.js') 如果删除前面的文件 后面的文件无法编辑



06 crypto密码学 提供加密解密 对称加密  非对称加密  哈希函数

哈希函数

// 不能被解密 因为是单向的 不可逆  不是特别安全 具有唯一性 不会变

const crypto = require('crypto')

let hash = crypto.createHash('sha256') // md5 加密的算法

hash.update('小曼zs')

const res = hash.digest('dex') //加密的十六进制

哈希函数加密的结果都是一致的不可变


//md5出现的场景 : 

存储到数据库中的密码进行加密

const crypto = require('crypto')

// 对称加密算法 : 双方协商定义一个秘钥以及iv

// 第一个参数 algorithm 接受一个算法  aes-256-cbc 

// 第二个参数 key 也就是秘钥32

// 第三个参数 iv  初始化向量 支持16位 保障每次生成的秘钥串每次是不一样的

let ley = crypto.randomBytes(32)

let  iv = Buffer.from(cryto.randomBytes(16))

let cipher = crtpto.createCipheriv('aes-256-cbc',key,iv)


cipher.update('小曼zs','utf-8','hex') // 加密的文字 加密的格式 hex表示输出十六进制


const result = cipher.final('hex') // 输出密文十六进制

console.log(result) // 加密的用法 



对接解密: 相同的算法 相同的key 相同的iv

const de = crypto.createDecipherive('aes-256-cbc',key,iv)

de.update(result,'hex','utf-8')

const res = de.final('utf-8')

console.log(res) // 小曼zs

const crypto = require('crypto')

// 非对称加密

// 生成公钥和私钥

// 私钥只能管理员有 不能对外公开

// 公钥可以对外公开


// 采用 rsa加密 

const {provatekey,publickey} = crypto.generatekeyPaorSync('rsa',{

    modulusLength:2048,//加密的长度 长度越长越安全 但是越慢 
})


// 使用公钥进行加密 

const encrypted = crypto.publicEncrypt(publickey,Buffer.from('小曼zs'))

console.log(encrypted.toString('hex')) //加密之后 16进制的结果

// 使用私钥进行解密

const decrypted = crypto.privateDecrypt(privatekey,encrypted)

console.log(decrypted.toString())


07 编写脚手架

编写脚手架

1 自定义的命令 而不是node去执行我们的脚本

2 -v 查看版本 --heip帮助 create命令行交互

3 去下载模板 isTs 下载ts版本 不要就下载js版本

### 仓库

https://gitee.com/chinafaker/vue-template.git


第一步 创建项目 

npm init 创建package.json文件 

创建src/index.js文件  创建src/utils.js文件


第二步 安装依赖

npm i commander  inquirer ora download-git-repo


第三步 index.js代码如下

#!/usr/bin/env node

// 上面这行代码的意思 告诉操作系统执行自定义命令的时候 帮我用node去执行这个文件

console.log('test')


第四步 进行挂载:package.json

{

    "bin":{

        "test-cli":"src/index.js"

    }
}


第五步 控制台 执行npm link


第六步 就可以直接使用 test-cli 了


-----------------------------------------------------------------------------------




08 zlib 压缩文件

压缩文件 ---GZIP

const zlib = require('zlib')

const fs = require('fs')


const readStream = fs.createReadStream('index.txt') // 可读流


const wirteStream = fs.createWriteStream('index.txt.gz') //写入流  后缀是gz


readStream.pipe(zlib.createGzip()).pipe(writeStream) 将可读流的内容压缩写到写入流中



//  解压  与上面压缩正好相反
 
const readStream = fs.createReadStream('index.txt.gz')

const wirteStream = fs.createWriteStream('index.txt')

readStream.pipe(zlib.createGunzip()).pipe(writeStream)


--------------------------------------------------------------------------------------


压缩文件 --- deflate

const readStream = fs.createReadStream('index.txt') // 可读流

const wirteStream = fs.createWriteStream('index.txt.deflate') //写入流  后缀是deflate

readStream.pipe(zlib.createDeflate()).pipe(writeStream) 将可读流的内容压缩写到写入流中
 

解压文件 --- deflate

const readStream = fs.createReadStream('index.txt.deflate') // 可读流

const wirteStream = fs.createWriteStream('index.txt') //写入流  


readStream.pipe(zlib.createInflate()).pipe(writeStream) 将可读流的内容压缩写到写入流中


------------------------------------------------------------------------------------

GZIP与deflate之间的区别:

压缩的算法不同:GZIP适用于文件压缩 压缩的速度慢 体积大

deflate使用用http的压缩 压缩的体积小 速度快



HTTP的压缩:


const http = require('http')

const zlib = require('zlib')

const server = http.createServer((req,res)=>{

  const txt = '小曼zs'.repeat(1000) // 重复了1000次 

  res.setHeader('content-type','text/plan;charset=utf-8') // 设置响应头 解析中文

  res.end(txt) // 这时候前端拿到的数据的大小8.2kB


})


-------------------------------------开启压缩 

gzip压缩

const http = require('http')

const zlib = require('zlib')

const server = http.createServer((req,res)=>{

  const txt = '小曼zs'.repeat(1000) // 重复了1000次 

  res.setHeader('Content-Encoding','gzip') // 开启压缩头

  res.setHeader('content-type','text/plan;charset=utf-8') // 设置响应头 解析中文

  let result = zlib.gzipSync(txt)

  res.end(result) // 这时候前端拿到的数据的大小245B


})


deflate压缩

const http = require('http')

const zlib = require('zlib')

const server = http.createServer((req,res)=>{

  const txt = '小曼zs'.repeat(1000) // 重复了1000次 

  res.setHeader('Content-Encoding','deflate') // 开启压缩头

  res.setHeader('content-type','text/plan;charset=utf-8') // 设置响应头 解析中文

  let result = zlib.deflateSync(txt)

  res.end(result) // 这时候前端拿到的数据的大小236B


})

09 http 反向代理

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

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

相关文章

Node Version Manager(nvm):轻松管理 Node.js 版本的利器

文章目录 前言一、名词解释1、node.js是什么?2、nvm是什么? 二、安装1.在 Linux/macOS 上安装2.在 Windows 上安装 二、使用1.查看可安装的node版本2.安装node3. 查看已安装node4.切换node版本5.其它 总结 前言 Node.js 是现代 Web 开发中不可或缺的一部…

docker-compose 安装MongoDB续创建用户及赋权

文章目录 1. 问题描述2. 分析2.1 admin2.2 config2.3 local 3. 如何连接3.解决 1. 问题描述 在这一篇使用docker-compose创建MongoDB环境的笔记里,我们创建了数据库,但是似乎没有办法使用如Robo 3T这样的工具去连接数据库。连接的时候会返回这样的错误&…

c语言,单链表的实现----------有全代码!!!!

1.单链表的定义和结构 单链表是一种链式的数据结构,它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的,节点和节点之间相互连接 一般来说节点有两部分组成 1.数据域 :数据域用来存储各种类型的数据&…

基于SpringBoot+Vue的疾病防控系统设计与实现(源码+文档+包运行)

一.系统概述 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对疾病防控信息管理的提升&a…

windows 如何安装 perl ?

链接:https://strawberryperl.com/ 我们选择安装 “草莓 perl” 下载后根据引导安装就行了

node.jd版本降级/升级

第一步.先清空本地安装的node.js版本 按健winR弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出,输入cmd再点击回车键) 进入命令控制行窗口,输入where node,查看本地…

双指针的引入和深入思考(持续更新中)

目录 1.引入双指针 2.使用场景 3.例题引入 1.引入双指针 当我们需要维护某个区间性质的或者是求满足某些性质的区间的长度时,对于一个区间是由左右端点的,我们有简单的枚举左右端点的O()的时间的做法,当时在大多数题目中是不可行的&#…

DataX案例,MongoDB数据导入HDFS与MySQL

【尚硅谷】Alibaba开源数据同步工具DataX技术教程_哔哩哔哩_bilibili 目录 1、MongoDB 1.1、MongoDB介绍 1.2、MongoDB基本概念解析 1.3、MongoDB中的数据存储结构 1.4、MongoDB启动服务 1.5、MongoDB小案例 2、DataX导入导出案例 2.1、读取MongoDB的数据导入到HDFS 2…

论文笔记:Does Writing with Language Models Reduce Content Diversity?

iclr 2024 reviewer评分 566 1 intro 大模型正在迅速改变人们创造内容的方式 虽然基于LLM的写作助手有可能提高写作质量并增加作者的生产力,但它们也引入了算法单一文化——>论文旨在评估与LLM一起写作是否无意中降低了内容的多样性论文设计了一个控制实验&…

Kubernetes部署应用利器Helm详解

文章目录 一、helm概述&安装1.为什么需要Helm2.Helm介绍3.Helm架构4.部署Helm客户端5.Helm基本使用5.1 创建Chart示例 二、Helm 应用部署、升级1.创建项目(chat所需目录、文件)2.创建/拷贝项目的yaml文件到templates目录下3.使用Helm进行部署项目4.H…

第十五届蓝桥杯复盘python大学A组——试题B 召唤数学精灵

按照正常思路解决,由于累乘消耗大量时间,因此这不是一个明智的解决方案。 这段代码执行速度非常慢的原因在于它试图计算非常大的数的阶乘(累乘),并且对于每一个i的值都执行这个计算。阶乘的增长是极其迅速的&#xff…

49.HarmonyOS鸿蒙系统 App(ArkUI)Tab导航组件的使用

HarmonyOS鸿蒙系统 App(ArkUI)Tab导航组件的使用 图片显示 Row() {Image($r(app.media.leaf)).height(100).width(100)Image($r(app.media.icon)).height(100).width(100) } 左侧导航 import prompt from ohos.prompt; import promptAction from ohos.promptAction; Entry C…

vue2知识点1 ———— (vue指令,vue的响应式基础)

vue2的知识点,更多前端知识在主页,还有其他知识会持续更新 Vue 指令 Vue指令是Vue.js中的一个重要概念,用于向DOM元素添加特定行为或功能。Vue指令以v-开头,例如v-bind、v-if、v-for等。 v-bind 动态绑定属性 用法&#xff1a…

windows ubuntu 子系统:肿瘤全外篇,2. fq 数据质控,比对。

首先我们先下载一组全外显子测序数据。nabi sra库,随机找了一个。 来自受试者“16177_CCPM_1300019”(SRR28391647, SRR28398576)的样本“16177_CCPM_1300019_BB5”的基因组DNA配对端文库“0369547849_Illumina_P5-Popal_P7-Hefel”的Illumina随机外显子测序 下载下…

SGI_STL空间配置器源码剖析(一)总览

SGI 全称为 Silicon Graphics [Computer System] Inc. 硅图[计算机系统] 公司,SGI_STL是SGI实现的C的标准模板库。 SGI STL的空间配置器包括一级和二级两种。 一级空间配置器allocator采用malloc和free来管理内存,这与C标准库中提供的allocator是相似的…

VS集成vcpkg

VS集成vcpkg 下载vcpkg 下载vcpkg git clone https://github.com/Microsoft/vcpkg.git安装vcpgk,文件目录 .\bootstrap-vcpkg.bat集成到vs2022中 # 集成到项目 vcpkg integrate project vcpkg integrate installPS C:\Users\Administrator> vcpkg integrate…

大模型开发轻松入门——(1)从搭建自己的环境开始

pip install openai import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.getenv(OPENAI_API_KEY)

如何选择投资交易策略?很简单,只需回答fpmarkets6个问题

刚迈出交易的第一步的投资新手们,是不是还没有选择策略?外汇市场上的交易策略是一种算法,可以让投资者以最低的风险尽快实现目标。目标通常是获得一定比例的利润。 那么如何选择投资交易策略?很简单,只需回答fpmarkets…

计算机网络 2.2数据传输方式

第二节 数据传输方式 一、数据通信系统模型 添加图片注释,不超过 140 字(可选) 1.数据终端设备(DTE) 作用:用于处理用户数据的设备,是数据通信系统的信源和信宿。 设备:便携计算机…

酒店餐厅装水离子雾化壁炉前和装后对比

酒店餐厅装水离子雾化壁炉前和装后的对比可以体现出餐厅氛围和客户体验的显著改变: 装前: 普通的氛围:餐厅可能显得比较普通,缺乏特色或独特的装饰元素。 视觉上缺乏焦点:餐厅空间可能显得相对平淡,缺乏…