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开始裁剪到20sexecSync('ffmpeg -ss 10 -to 20 -i test.mp4 test.gif',{stdio:'inherit'})需求4 加水印  -vfexecSync('ffmpeg -i test.mp4 -vf drawtext=text="haotaotao":fontsize=30:x=10:y=10test.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

读取文件:异步  同步  promiseimport fs = require('fs')import fs1 = require('fs/promise')读取文件:异步 写法 fs.readFile(./index,txt,{encoding:'utf-8',flag:'r'},(err,data)=>{if(err) throw errconsole.log(data)})同步方法 阻塞下面的代码 返回的二级制Bufferlet 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'})追加内容的的apifs.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 相同的ivconst 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 压缩文件

压缩文件 ---GZIPconst zlib = require('zlib')const fs = require('fs')const readStream = fs.createReadStream('index.txt') // 可读流const wirteStream = fs.createWriteStream('index.txt.gz') //写入流  后缀是gzreadStream.pipe(zlib.createGzip()).pipe(writeStream) 将可读流的内容压缩写到写入流中//  解压  与上面压缩正好相反const readStream = fs.createReadStream('index.txt.gz')const wirteStream = fs.createWriteStream('index.txt')readStream.pipe(zlib.createGunzip()).pipe(writeStream)--------------------------------------------------------------------------------------压缩文件 --- deflateconst readStream = fs.createReadStream('index.txt') // 可读流const wirteStream = fs.createWriteStream('index.txt.deflate') //写入流  后缀是deflatereadStream.pipe(zlib.createDeflate()).pipe(writeStream) 将可读流的内容压缩写到写入流中解压文件 --- deflateconst 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 反向代理

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

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

相关文章

经典的目标检测算法有哪些?

一、经典的目标检测算法有哪些? 目标检测算法根据其处理流程可以分为两大类:One-Stage(单阶段)算法和Two-Stage(两阶段)算法。以下是一些经典的目标检测算法: 单阶段算法: YOLO (You Only Loo…

Mudem,打造私密安全、高效稳定的私人空间

Mudem 是 Codigger 平台中的一个关键组件,它提供基础通讯服务,确保不同类型的机器之间可以进行安全和高效的连接。它其设计理念在于将本地机器、公有云以及私有云上的设备无缝地整合为一个可远程在线访问的工作站(Workstation)。这…

2024深圳杯(东三省)数学建模挑战赛D题:音板的振动模态分析与参数识别思路代码成品论文分析

​ 更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯(东三省)数学建模挑战赛2024D题:音板的振动模态分析与…

代码解析 Textual_inversion

代码解析 Textual_inversion 一 Embedding部分 一 Embedding部分

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中, 英语是源语言(source language), 法语是目标语言(target language)。…

网络安全之CSRFSSRF漏洞(上篇)(技术进阶)

目录 一,CSRF篇 二,认识什么是CSRF 三,实现CSRF攻击的前提 四,实战演练 【1】案例1 【2】案例2 【3】案例3 【4】案例4(metinfo) 一,CSRF篇 二,认识什么是CSRF CSRF&#x…

【Java Spring MVC项目异常解决】HTTP 500

HTTP 500状态码表示“内部服务器错误”(Internal Server Error)。这是一个通用的错误响应,表明服务器在处理请求时遇到了预料之外的情况,导致无法完成请求。500错误是服务器端错误的一种,与客户端无关。在Web开发中&am…

牛客社区所有的表和SQL语句

文章目录 1 帖子表 discuss_post1.1 字段描述1.2 相关功能描述1.2.1 分页查询帖子1.2.2 查询帖子总数量1.2.3 插入一条帖子记录1.2.4 根据帖子ID查询某条帖子1.2.5 更新帖子评论数量1.2.6 更新帖子类型1.2.6 更新帖子状态1.2.7 更新帖子分数 2 用户表 user2.1 字段描述2.2 相关…

XiaodiSec day017 Learn Note 小迪安全学习笔记

XiaodiSec day017 Learn Note 小迪安全学习笔记 记录得比较凌乱,不尽详细 day 17 主要内容: php 框架 thinkPHPyiilaravel 使用 fofa 搜索 thinkphp 市面上 thinkphp5 版本较多 url 结构 域名/.php(文件名)/index(目录)/index(函数名)模块名-控…

【目标检测】FPN特征金字塔完整流程详解

学习视频:1.1.2 FPN结构详解 对比 可以看到FPN是自上而下、自下而上并且可以进行多尺度特征融合的的层级结构。 具体结构 1x1 conv: 对通道数进行调整,不同大小的特征图通道数不同,越高层次的特征图通道数越大,论文中使用256个1…

利用大模型与AI Agent,实现企业数据智能分析

导语:大模型爆火之后,很多企业也用大模型做了相关探索和实践,我们发现大模型解决单点问题时效果更好。但同时会产生安全、幻想等相关问题。今天从传统数据分析的痛点,到大模型智能分析的建设方式,并结合相关实践案例&a…

appium相关的知识

>adb shell dumpsys window | findstr mCurrentFocus adb devices # 实例化字典 desired_caps = dict() desired_caps[platformName] = Android desired_caps[platformVersion] = 9 # devices desired_caps[deviceName] = emulator-5554 # 包名 desired_caps[appPackage] …