当前位置: 首页 > news >正文

ffmpeg 视频分辨率修改 质量压缩

随着手机像素的提高,拍摄视频也越来越大,10秒的视频动辄 二三十兆,这给视频传输和播放都带来了 诸多不变。一般都需要 前端或或者后端  对视频进行压缩。由于我这边前端是 H5,所以只能后端进行压缩,

采用主流压缩库采用 ffmpeg 进行,我这边是 nodejs 环境

先说下我这边遇到的坑:

按照之前压缩图片的思路(保持比例):先区分是横图还是竖图

  • 竖图 则 图片宽度 < 图片高度 :原图 1080*1920,限制高度256则:图片宽度 = 1080*256/1920 = 144  则压缩之后 144*256
  • 横图 则 图片宽度 > 图片高度:原图1920*1080, 限制宽度256则: 图片高度 = 1080*256/1920 = 144 则压缩之后  256*144

结果按照上面的思路发现不适用于 视频的(分辨率)压缩我不管从那个角度拍摄视频视的分辨率均为 1920*1080,只是旋转的方向数据有变化而且如果我按照之前处理 图片的思路 则视频压缩出来就会 有概率会 严重变形

:竖屏角度拍摄视频: 分辨率 1920*1080,朝向 -90

        

:颠倒角度拍摄视频: 分辨率 1920*1080,朝向 90

        

:左转角度拍摄视频: 分辨率 1920*1080,朝向 undefined

 :右转角度拍摄视频: 分辨率 1920*1080,朝向 -180

ffmpeg 压缩视频分辨率的正确姿势

视频编码中一般都会使用常用的几个分辨率:手机拍出来的也都是这几个,他的分辨率宽 > 高,衡量是横竖的就只有 方向这个属性,其他比较骚的方式就不考虑了

720P1080P2K4K
分辨率1280*7201920*10802560*14404096*2160
画质高清全高清四倍高清超高清
宽高比例16:916:916:9≈16:9(17:9)

所以我们在压缩视频时候拿到分辨率就看它的宽度就好了:

比如我们的目标分辨率为: 1280*720,源视频分辨率 1920*1080,如果视频宽度大于 1280,我们就按照宽度1280进行压缩,高度-1,他会自己计算,朝向我们不用干预,按照源朝向输出就好了:

 

// file.data 源文件路径
// outPath 为输出路径
const cmd = `ffmpeg -i  ${file.data} -c:v libx264  -vf scale=1280:-1 -crf 28 -c:a copy ${outPath}`;

 按照上面这样,原来30M 的视频可以压缩到2到3M, 而且肉眼看不出 太大差别!

相关文章:

  • mysql进阶-索引基础
  • 视频转为序列图的软件,让视频批量转为序列图
  • Linux Capabilities 进阶实战
  • 单因素方差分析--R
  • docker容器互通方式
  • k8s的node亲和性和pod亲和性和反亲和性 污点 cordon drain
  • prometheus常用exporter
  • [含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]
  • Unity URP下阴影锯齿
  • 数据结构:堆和堆排序
  • 基于elementUI的el-table组件实现按住某一行数据上下滑动选中/选择或取消选中/选择鼠标经过的行
  • cfa一级考生复习经验分享系列(十八)
  • 影响邮件打开率的因素有哪些?
  • C //练习 5-4 编写函数strend(s, t)。如果字符串t出现在字符串s的尾部,该函数返回1;否则返回0。
  • Java多线程并发篇----第十三篇
  • JsonPath
  • test-04-test case generate 测试用例生成 tcases 快速开始
  • 【进程调度】基于优先级的轮转调度C++实现算法
  • 人工智能_机器学习092_使用三维瑞士卷数据_利用分层聚类算法进行瑞士卷数据三维聚类---人工智能工作笔记0132
  • Bean作用域及生命周期
  • MSCI中国指数5月调整:新增5只A股、1只港股
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应
  • 微软宣布将裁员3%
  • 中国巴西民间推动建立经第三方验证的“森林友好型”牛肉供应链
  • 著名连环画家庞邦本逝世