最新要闻
- 世界热讯:简历上写QQ邮箱会掉分吗引热议 网友:邮箱也分三六九等?
- 全焦段光学覆盖!小米13 Ultra影像参数公布:1+3黄金组合
- 环球消息!4999元起 荣耀MagicBook 14 2023笔记本发布:5项世界第一
- 天天即时:优酷回应非会员遇3000多秒广告:bug已修复 是文案显示问题
- iPhone 15 Pro固态按键设计临时改了!只因难度太大
- 快看:本周最火AutoGPT!GitHub3.6万+标星:解决复杂任务全程无需人类插手
- 环球微速讯:性能升级 13代酷睿来了? 华为MateBook笔记本新品即将发布
- 曾力推每天睡4小时 张朝阳建议年轻人别睡懒觉不要熬夜
- 每日动态!李书福抢跑马斯克发小钢炮!冰箱彩电大沙发全标配:理想直呼内行
- 【环球热闻】售价高达15000元!宾得专为黑白摄影推出K-3 Mark III Monochrome
- 金色的草地课文朗读音频_金色的草地课文
- Intel突然杀死服务器整机业务!新CEO连砍十余刀挽救亏损
- 马保国直播带货现演“闪电五连鞭”:销量惨淡 网友只看不买
- 克里克森_克里克拉克
- 每日速递:日本部分地区出现大量黄沙:能见度不足10公里
- 环球热点!高颜值!关晓彤晒华为nova 11:本月发
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日动态!图片压缩&视频截取
背景
在我们开发网站的过程中,避免不了要对视频和图片进行一些处理。
(资料图)
场景一:用户上传的视频,我们需要将视频的某一帧截取出来作为视频的封面,便于在视频列表页显示为视频的预览,当然也可以截取某几帧生成一个gif动图。
场景二:用户上传的照片体积很大,我们在展示照片列表的时候,如果想要加载快,除了懒加载的方式(限制每次加载图片的数量,然后上滑继续加载),还可以在列表上只加载缩略图,然后进入详细页面后进行高清显示。
想要实现以上两个场景,如果你是用的是阿里云OSS存储,有提供的处理方式(收费),可以自行去查看:
这里介绍的处理方式是利用插件 ffmpeg 来处理。
实现前准备
FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。这里我们只关注上面的两个场景。
打开https://ffmpeg.org/download.html下载对应系统的工具包,这里我们介绍windows和linux下的使用。
使用
一、Windows环境
1.下载
根据自己已安装的压缩工具,选择对应的稳定版
下载完成后,解压到非C盘的目录下,比如我解压到D:\tools\ffmpeg文件夹下,这时我们可以看到D:\tools\ffmpeg\bin下有3个exe执行文件,我们需要将该路径配置到path,就可以在任意命令窗口进行调用。
2.配置
打开系统设置-->点击环境变量-->点击用户变量中的Path-->添加D:\tools\ffmpeg\bin路径,点击确定和应用
打开命令行,运行ffmpeg -version
,看到如下提示,就表示成功了
3.图片压缩
有一张图片D:\tools\ffmpeg-sta\avatar.jpg,将命令窗口切换至该目录,执行ffmpeg -i ./avatar.jpg -vf scale=-1:100 ./after.png
使用的就是命令ffmpeg -i image_source -vf scale=width:height out_source
,该命令中 image_source表示输入文件,out_source是输出文件,width和height分别是压缩后图片的宽和高,当某一项为-1时,表示图片保持原来的比例进行压缩。
下图是压缩并改变格式后的:
4.视频截帧
执行命令ffmpeg -i SampleVideo.mp4 -ss 1 -vframes 1 output.png
获取视频1s时的帧。
获取到以下图片为视频1s时的帧:
在windows上的简单使用,只是演示以下功能,我们实际开发更多是在linux环境下实现开头说的图片和视频的处理场景,下面一起来看看。
二、linux环境
1.环境搭建
如果你购买了云服务器,可以在自己的服务器进行部署,如果只是想验证功能是否满足预期,可以搭建一个简单的服务器,可以参考我的上一篇文章
Multipass一款更轻量级的虚拟机
2.编写脚本
这里实现一个上传页面,上传图片后保存原图片和压缩后的图片,上传视频后保存视频和1s时截取的视频帧生成的图片,因为同涉及前后端实现,所以选择nuxt框架(https://nuxt.com.cn/)进行简单实现。
初始化一个项目,并安装依赖
npx nuxi init ffmpeg-testcd ffmpeg-test yarn install
前端
将app.vue文件中的
替换为Welcome to the homepage
,根目录下新建pages文件夹,并在该目录下新建index.vue文件,在这个文件中实现前端页面。
<script setup lang="ts"> function getFile(e:any) { const file = e.target.files[0]; let formData = new FormData(); formData.append("file",file); $fetch("/api/upload", {method: "POST", body: formData}).then(res => { console.log("res=>",res) }) }</script>
服务端
在package.json中增加如下配置,运行yarn install安装插件
"dependencies": { "axios": "^0.27.2", "express": "^4.18.2", "formidable": "^2.1.1" },
根目录下新建server文件夹,该文件夹下新建api文件夹,然后在api文件夹下新建upload.js文件,在该文件中实现服务端的逻辑
// server/api/upload.jsimport path from "path"import formdata from "formidable"import cp from "child_process"import fs from "fs"const __dirname = path.resolve();export default defineEventHandler(async (event) => { const request = event.node.req const filePath = path.join(__dirname, "./", "uploads"); var form = new formdata.IncomingForm(); form.maxFileSize = 50 * 1024 * 1024; form.multiples = true form.uploadDir = filePath; //指定保存文件的路径,formidable会自动保存文件 request.files = {}; request.data = {}; await form.parse(request); await form.on("file", function (name, file) { console.log("file"); request.files[name] = file;//这里提取上传的文件 }); await form.on("end", async function () { // 默认保存的文件名是随机串 for (var k in request.files) { var f = request.files[k]; var n = "origin_" + f.originalFilename; // 自己重新指定文件名和后缀 if (f.mimetype.indexOf("image/") == 0) { await fs.renameSync(f.filepath, filePath + "/" + n); // 图片压缩 await cp.execSync(`ffmpeg -i ${filePath}/origin_${f.originalFilename} -vf scale=-1:100 ${filePath}/after_${f.originalFilename}`) } else if (f.mimetype.indexOf("video/") == 0) { await fs.rename(f.filepath, filePath + "/" + n, async function (err) { if (err) throw err; // 视频抽帧 await cp.execSync(`ffmpeg -i ${filePath}/origin_${f.originalFilename} -ss 1 -vframes 1 ${filePath}/after_pic.png`) }); } } }); return { api: "works" }})
pm2的方式启动,新增了ecosystem.config.js文件
module.exports = { apps: [ { name: "NuxtAppName", port: "3300", exec_mode: "cluster", instances: "2", script: "./.output/server/index.mjs" } ]}
package.json文件中scripts的build命令改为nuxt build & pm2 restart all
3.部署
命令行工具连接服务器,执行命令sudo apt-get install ffmpeg
安装ffmpeg,安装完成后执行 ffmpeg -version
,看到如下提示表示安装成功。
遇到问题先执行下面的命令
sudo add-apt-repository mainsudo add-apt-repository universesudo add-apt-repository restrictedsudo add-apt-repository multiverse
将自己的代码下载到该服务器,或者使用我已经上传的示例 https://github.com/guduqiucai/ffmpeg-test.git,下载后切换到项目根目录,创建一个uploads目录,作为我们存储上传的文件的地方。
服务器安装插件
sudo apt install yarnsudo apt install nodejs npmsudo npm install pm2 -g
nuxt3运行需要node16.x及以上版本(可以使用nvm管理node版本)
git clone https://gitee.com/mirrors/nvmbash install.sh # 注意:进入nvm目录内执行nvm -version # 查看版本nvm install v16.16.0
切换到项目根目录,执行yarn install
安装依赖,如果报错,先执行下面的命令
sudo apt remove cmdtestsudo apt remove yarncurl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.listsudo apt updatesudo apt install yarn
安装完成后执行yarn build
编译并启动项目,如下图所示服务就正常启动了
这里我的multipass 地址是 172.17.166.77, 而且我们设置的pm2监听端口是3000,所以打开浏览器,访问http://172.17.166.77:3000/可以正常看到如下图所示页面:
上传一个图片,查看服务器存储结果,如下图所示出现了原图片origin_avatar.jpg和压缩后的图片after_avatar.jpg:
上传一个视频,查看服务器存储结果,如下图所示出现了原视频文件origin_SampleVideo.mp4和抽帧的图片after_pic.png:
到这里就简单实现了我们开始说的场景,Over~。
关键词:
-
天天速读:MegEngine 使用小技巧:使用 Optimizer 优化参数
MegEngine的optimizer模块中实现了大量的优化算法,其中Optimizer是所有优化器的抽象基类,规定了必须提...
来源: -
全球观速讯丨Mac | iOS | Windows:安装Stable diffusion教程
热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个...
来源: -
世界短讯!科创板收盘播报:科创50指数低开低走跌2.59% 软件服务及半导体股跌幅居前
科创50指数13日低开低走,至收盘时报1100 13点,跌幅2 59%,指数振幅为2 35%,总成交额约1046亿元。...
来源: 天天速读:MegEngine 使用小技巧:使用 Optimizer 优化参数
每日动态!图片压缩&视频截取
全球观速讯丨Mac | iOS | Windows:安装Stable diffusion教程
世界短讯!科创板收盘播报:科创50指数低开低走跌2.59% 软件服务及半导体股跌幅居前
世界热讯:简历上写QQ邮箱会掉分吗引热议 网友:邮箱也分三六九等?
全焦段光学覆盖!小米13 Ultra影像参数公布:1+3黄金组合
环球消息!4999元起 荣耀MagicBook 14 2023笔记本发布:5项世界第一
天天即时:优酷回应非会员遇3000多秒广告:bug已修复 是文案显示问题
iPhone 15 Pro固态按键设计临时改了!只因难度太大
天天最资讯丨动态代理与Spring AOP
在LINQPad中使用FreeSql查询数据库
minio分片上传
12函数进阶
环球快看点丨[Docker]Namespace与Cgroups
快看:本周最火AutoGPT!GitHub3.6万+标星:解决复杂任务全程无需人类插手
环球微速讯:性能升级 13代酷睿来了? 华为MateBook笔记本新品即将发布
曾力推每天睡4小时 张朝阳建议年轻人别睡懒觉不要熬夜
每日动态!李书福抢跑马斯克发小钢炮!冰箱彩电大沙发全标配:理想直呼内行
【环球热闻】售价高达15000元!宾得专为黑白摄影推出K-3 Mark III Monochrome
金色的草地课文朗读音频_金色的草地课文
焦点精选!论结构化、系统性的学习
【天天热闻】RocketMQ是是如何管理消费进度的?又是如何保证消息成功消费的?
【天天聚看点】C# 根据前台传入实体名称,动态查询数据
每日关注!电商流量分析怎么做?试试这款数据工具 DataLeap!
Intel突然杀死服务器整机业务!新CEO连砍十余刀挽救亏损
马保国直播带货现演“闪电五连鞭”:销量惨淡 网友只看不买
手把手教你如何免费Midjourney Adobe FireFly AI绘图—Window本地快速部署stable diffusion AI绘图及使用指南(小白
克里克森_克里克拉克
每日速递:日本部分地区出现大量黄沙:能见度不足10公里
环球热点!高颜值!关晓彤晒华为nova 11:本月发
每日资讯:开启影像光学新时代!小米13 Ultra搭载全焦段5000万像素徕卡四摄
真反向虚标!实测比亚迪秦PLUS EV冠军版:标610开出646.5
5.98万起真不贵!五菱缤果上市两周狂卖10000台:再成爆款
【3D建模工具】上海道宁与McNeel为您提供强大的专业3D造型软件
环球快资讯丨学系统集成项目管理工程师(中项)系列04c_项目管理一般知识(下)
【大兴调查研究】临夏税务:“把脉问诊”助企纾困
今日热闻!新款特斯拉Model 3实车首曝:大灯更精神、颜值再提升
焦点短讯!张艺谋:《满江红》票房让我很意外 20亿就是伟大胜利
观热点:美曾通报生物实验室感染病毒的小白鼠逃了:去年还发生实验猴逃窜
世界快看:5.58万起 五菱荣光新卡上市:2.0L动力、3.3米货厢
当前看点!微信推送8.0.35测试版:和Android 5.0说再见
华硕A52J笔记本最大存储空间是多少?华硕a52j笔记本参数
金立GN105手机怎么换屏幕?金立gn105手机参数配置
ATI HD4500是集成显卡吗?ATI HD4500参数配置
华硕y581c是什么系列?华硕y581c笔记本电脑配置
苹果iPhone7有几种颜色?苹果iphone7怎么截长图?
环球速递!《梦西游》4月14日合服维护公告
环球快消息!C#--TextBox的四种禁止编辑方法
热点评!4月22日,云数据库技术沙龙【杭州站】来了
用java做一个并发10W的网站,需要用到的技术有这些!
释放1英寸全部实力!小米13 Ultra支持可变光圈:重金打造
埃安Hyper GT摊牌了:比特斯拉贵 但你会选我
广东惠东发现“世界最神秘的鸟”:中国特产、比大熊猫还稀少
世界通讯!《名侦探柯南》优衣库联名T恤引争议 柯哀党PK新兰党
观焦点:小米平板6系列正式官宣:5000万摄像头 超强生产力工具
环球微速讯:093期杨光福彩3D预测奖号:定位直选参考
天天时讯:百度文心大模型API测试
世界通讯!浅析DNS Rebinding
Linux运维进阶之路
环球观点:美国通胀降温 油价随宽松预期下上行
天天日报丨男子要求抹零被拒与店员起争执 就为10元打女服务员:网友吐槽没必要
世界快资讯:打车去拉萨的超远订单显著增加 车费超1.3万 滴滴:希望大家理性下单
每日动态!曾是第一大股东 软银抛售阿里巴巴股份:快清空了
世界热资讯!剧版《哈利·波特》官宣 先导预告发布:JK罗琳监制 忠于原著的十年大剧
每日速递:和iPhone一样四边等宽!华为nova 11正面照泄露
天天报道:1、内网渗透基础知识
4月13日生意社二氯甲烷基准价为2607.50元/吨
【国际大宗商品早报】国际油价显著上涨超2% 基本金属全线走高
喊话北京打车太便宜应涨价!乘联会秘书长:燃油车用户纳税但未享受权益
世界速看:中老铁路首趟国际旅客列车发车:昆明当日通达万象 二等座470元
白玉兰奖《狂飙》张颂文呼声最高:国产电视剧质量、口碑爆发
有7/14nm光刻机国产芯片就能赶上来?全球半导体设备、材料核心已被全垄断
【读财报】房企3月融资:境内信用债发行规模环比翻倍 美元债发行回落
焦点滚动:银河证券:继续看好银行板块投资机会
每日动态!四大证券报精华摘要:4月13日
微头条丨高校围捕1.26米40斤“鳄雀鳝”:人为放生 长嘴如鳄鱼
兰博基尼推出插电混动超级跑车 60万美元迅速卖光
比亚迪汉、唐车主狂喜!今年内可OTA升级云辇系统 车型一览
焦点滚动:小米13 Ultra跑分出炉:第二代骁龙8 顶配16GB内存
天天时讯:俄罗斯国家空间站计划2027年开建:最新构型图正式公布
每日播报!信贷投放靠前发力为经济发展注入活力
比亚迪又放大招 直接对标奔驰
今日最新!403秒!我国人造太阳创造新的世界纪录:可控核聚变又近一步
世界滚动:校园内最美的舞蹈
四则运算练习&竞赛系统(结对编程)
世界滚动:[GIT]GIT之删除远程仓库中的目录或文件
神谷英树发文怒喷Switch:想把这垃圾砸碎!
世界快讯:10nm以下最强候选 中国半导体性单壁碳纳米管获突破
快看点丨被吐槽像绿皮火车!空姐飞机上推销商品吆喝40分钟 业内人士:不违规
【天天新视野】世界上最孤独的鲸鱼死了:圈养44年 5个孩子全部夭折
世界观焦点:技嘉发布韩国特供版RTX 4070:真花哨
穗是哪个城市的简称_广州的简称
全球看点:美国3月消费者价格指数环比增长0.1%
最新:面试题百日百刷-kafka篇(二)
全球看热讯:融创达成复牌指引 明起正式复牌
柯纳米员工袭击老板
每日快讯!是兄弟就来找ChatGPT漏洞 最高赏金2万刀:你敢来吗
当前头条:AMD 3D缓存大杀四方!Intel 14代酷睿上四级缓存
我国首颗太阳专用卫星 夸父一号观测数据将向国内外试开放
Vulnhub Mercy Walkthrough