这几天有朋友经常问我:“自己制作的视频太大了,自己的图片太大了如何高效的压缩而且尽量保证视觉损失不大呢?网上的各类压缩软件,网站都不太好使,或者不太灵活,肿么回事?”

我一看,哦,确实目前市面上的软件要不就收费,要不不太灵活可选择的配置的参数不多,要不就是网站打开后太卡或者满屏广告,而且不能批处理确实会给大家带来不方便。

所以今天我就手把手带大家来制作一个视频、图片压缩的小工具吧。

首先介绍一下我们今天主要用到的工具:ffmpeg。

FFmpeg: 是多媒体视频处理工具,具有非常强大的功能包括视频采集、视频格式转换、视频抓图、给视频加水印等。---解释来源:百度百科

实际上,做编解码,直播,推流等工作的同学们应该会对ffmpeg非常熟悉,这是一套完全开元的工具。

那今天我们就用这款专业强大而又免费开源的工具来实现高效视频压缩和图片压缩的功能吧~ (撸羊毛很开心)

首先就是大家首先要下载安装一个FFmpeg。

首先对于mac或者ubuntu系统:

ubuntu系统直接 sudo apt update

sudo apt install ffmpeg

mac系统稍显复杂推荐以下安装方式(测试有效)。

使用HomeBrew安装,HomeBrew是什么呢?为了防止套娃,我简单解释一下就是mac用来进行软件包管理的一个工具,用这个安装软件不用关心各种依赖和文件路径情况,直接命令行就可以调用。大家可以简单理解为ubuntu里面的apt。

那HomeBrew如何安装呢?

一种最简单的方式是,打开mac的terminal,然后输入:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) 即可

如果你问我ruby是什么?简单解释就是一款面向对象语言,mac上自带。。

如果上面安装的方式你发现安装速度奇慢无比,那么请参考下面这一套详细的安装方案:

金牛肖马:Homebrew国内如何自动安装(国内地址)​zhuanlan.zhihu.com

好,现在装好HomeBrew了就可以一句话直接安装ffmpeg了:

brew install ffmpeg

Windows系统:

建议大家直接参考这篇帖子的安装方式

心悟:Windows下下载安装ffmpeg​zhuanlan.zhihu.com

好,只要咱们顺利安装好ffmpeg,那么基本就已经成功了,剩下的就是要输入ffmpeg指令来完成视频、图像的压缩。

我们先介绍视频

先给出指令,还是打开命令行terminal:

命令格式如下:

ffmpeg -i 你要处理的视频路径 -r 帧率 -b:v 码率 -s 分辨率 输出文件路径

这里控制咱们压缩的主要是-r 帧率,-b:v 码率的设置 和-s 分辨率的控制和这三项。当然那ffmpeg还有更多可以设置的参数,但本次先暂时不做分享,会在之后更新更多的用法,比如设置是用什么编码方式264还是265等等。

这里咱们理解一下帧率,码率和分辨率这三个参数。

在理解这三个概念之前,我们先要有一个概念,视频其实是由一帧一帧的图片构成的,比如咱们老式的那种放映电影,都是靠片子胶片来播放视频的,具体可参考最近影院电影《一秒钟》,里面生动刻画了原来影片放映的全过程。

影片1秒钟冲洗片子的情景

那此时帧率:我们就可以理解成1s中我们要放映多少个那种小长方形的片子。帧率越高我们观看的感受就越流畅,像以前大概16帧便达到了观看标准,那现在视频以22帧,30帧较多,而一些性能较高的摄像机排出的片子,帧率可达到60帧。

同样,帧率越高,我们视频就会越大,如果想要压缩视频,不如可以适当降帧率,比如如果将视频由30帧降到24帧,其实观赏主观看区别不是很明显,但视频大小将会降低。

第二个就是码率,码率这个概念我们可以先大概理解成每一帧用了多少信息(码字)来进行编码。码率设置越低,则主观上画面质量将会下降越多,视频就会越小。这个也很好理解对吧,我们每一帧存储的信息都变少了,画面细节丢失了,变得没那么高清了,自然大小就下来了。

(这里说句题外话:编解码本身比我上面说的要复杂很多,里面会有定位关键帧I帧、P帧、B帧的概念,然后利用视频前后帧之间的相关性来进行残差编码等等,这涉及到具体编码算法了,如果有同学感兴趣我之后专门开一篇文章细聊)

第三个是分辨率,我们可以理解成画面的大小,分辨越高,画面越大,空间占用越大。分辨率越小,画面越小,空间占用越少。这个很好理解对吧。

好那现在为了方便大家理解,我们实战一下,首先我用华为手机录了一段12s多的视频,信息如下:

我们可以看到视频大小4.1M,分辨率540x960为手机竖版摄像,帧率30,采用264编码,码率2354k

那么首先,我们保证帧率不变,分辨率不变,码率降为原先一半1277k会发生什么呢?

输入指令:ffmpeg -i test.mp4 -qscale 0 -r 30 -b:v 1277k output.mp4

(这里-qscale是指不改变视频播放速度,可不加)

我们得到output.mp4文件,我们看一下文件属性:

可以看到视频大小压缩了不到一半,视频播放观看体验基本和原版无区别。

当然我们可以设置码率更小,比如500k:

ffmpeg -i test.mp4 -qscale 0 -r 30 -b:v 500k output.mp4

此时视频大小变为1M

与原先相比压缩近四倍,但是此时打开视频可以看到在视频边缘会出现块效应,也就是帧间信息压缩过狠导致图像块马赛克的现象。

当然视频还可以选择更低的码率,但质量会进一步下降,所以具体我们想要压缩到多大,咱们可以自由控制选择到我们需要的层度。

下面我们试验一下帧率

这里我们不选择对码率控制,那么直接设置帧率的时候,算法会自动帮我们选好合适的码率。命令如下:

ffmpeg -i test.mp4 -qscale 0 -r 24 output.mp4

观察输出结果:

可以看到文件大小从4M压缩到了1.4M,帧率降到24,码率随之也降低到适配程度。

打开视频观察,发现视频观看几乎没有受到影响。

很神奇对不对。

分辨率的实验就不做了,因为其实本质是一样的,将图像变下必然存储空间会下降,这个就不需要验证啦。

其实给予ffmpeg会有很多好玩的功能,比如加水印、变速播放什么的,今天我先讲到这里。

今天写的有点多,我先歇歇,内核现在已经有了,我下次会更新如何把ffmpeg包装做成一个更易用的软件,以及如何压缩图片。

希望看到这里的同学点个赞,给我一些鼓励,也同样mark下,下次更新不迷路~

先写到这里,咱们明天见~

ubuntu安装ffmpeg_手把手教你利用ffmpeg制作一个好用灵活的图片、视频压缩工具(再不需要去别的网站和用别的软件啦)...相关推荐

  1. 手把手教你用ESP32 制作一个游戏机,小白可上手

    MAKER: JuanF92/译:趣无尽 相逢已是初识 MicroByte 是一款微型主机,能够运行 NES.GameBoy.GameBoy Color.Game Gear 和 Sega Master ...

  2. 【游戏开发创新】手把手教你使用Unity制作一个高仿酷狗音乐播放器,滨崎步,旋律起,爷青回(声音可视化 | 频谱 | Audio)

    文章目录 一.前言 二.获取UI素材 三.使用UGUI制作界面 1.界面布局 2.账号圆形头像 3.搜索框 4.调节UI层 5.黑色按钮悬浮高亮效果 6.纯文字按钮 7.滚动列表自适应 8.歌名与视频 ...

  3. html插入flash时钟,教你利用Flash制作一个会走动的时钟(时针,分针,秒针)

    其实制作时钟的方法很多,在此小编利用Flash也制作一个时钟,就当是学习CS3语言的编程技巧吧.下面是具体的实现步骤. 工具/原料 Adobe Flash CS3 方法/步骤 1.新建一Flash文档 ...

  4. C++实战手把手教您用ffmpeg和QT开发播放器--01音视频基础知识

    笔记:https://blog.csdn.net/tainjau/article/category/9272757 音视频基础知识 封装.解码.重采样.像素格式 1.MPEG-4 MPEG-4标准将众 ...

  5. 手把手教你利用Word制作成绩表(超详细)

    在Office办公软件中,Excel无疑是最适合拿来做表格的,但如果表格不大,或者因为上司的硬性规定等原因,我们有些时候也是要拿Word来做表格的.其实在Word中做表格也并不是一件非常困难的事,而且 ...

  6. 手把手教你用ESP32制作一个游戏机

    要学嵌入式,关注@我要学嵌入式,嵌入式猛男的加油站. 01  前言 MicroByte 是一款微型主机,能够运行 NES.GameBoy.GameBoy Color.Game Gear 和 Sega ...

  7. 独家 | 手把手教你用scrapy制作一个小程序 !(附代码)

    目录 一.前言 二.原理 2.1 爬取流程 2.2 各部块的解释 2.3 scrapy数据流的分析 三.理解 四.实战 4.1 首先是安装scrapy 4.2 建立项目和下载pycharm以及pych ...

  8. 元旦到了,手把手教你用 Python 制作一个炫酷烟花秀

    大家好,我是小张, 今天是2021 的最后一天,到了这个时间点,部分小伙伴已经开始复盘这一年的得与失.比如今年增加了多少技能点,看了多少本书,写了多少篇文章或者年前的小目标实现进度大概多少等等:做一个 ...

  9. 手把手教你使用Unity制作一个飞机喷射火焰尾气的粒子效果

    文章目录 零.最终效果 一.飞机模型 二.飞机喷射火焰尾气制作 1.贴图 2.材质球 3.创建粒子 3.设置粒子的Renderer,将材质球赋值给粒子 4.设置粒子的Shape,调整喷射区域和角度 5 ...

  10. 篮球图片html页面代码,教你用PS制作一个非常逼真的篮球图片

    篮球大致分为三个大的部分:主体.纹理及条纹.主体部分可以用渐变快速做出立体效果,局部需要渲染一下高光和暗部:纹理需要自己制作一些规律排列的小点,并用图层样式做出浮雕效果:条纹制作稍微简单一点,用钢笔勾 ...

最新文章

  1. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...
  2. python多进程模板
  3. php后台图片压缩_php实现等比例压缩图片
  4. 四、jquery中的事件与应用
  5. CTFshow 反序列化 web275
  6. 大大提高你的工作效率的Linux 技巧
  7. 演示: GTS流量×××和CAR流量监管的效果及相关实践计划
  8. 套套原来是这样装袋的,40个机械动图看懂好像并不容易。。。
  9. 阿里如何做到百万量级硬件故障自愈?
  10. 冒烟的意思_冒烟测试是什么?
  11. Python中如何设置函数的默认值
  12. mysql 数据块_数据库中数据块是什么
  13. bios 微星click_微星主板CLICK BIOS II BIOS设置软件下载_微星主板CLICK BIOS II BIOS设置软件官方下载-太平洋下载中心...
  14. android 开机优化(类和资源预加载优化)
  15. 从羽泉演唱会大数据看在线演出前景
  16. python抓取网站访客手机号_网站获取访客QQ系统
  17. mysql-DTL语言
  18. Easy Connect连接网络请求异常
  19. 百度啊,你是新年第一惨
  20. eNSP模拟简单网络环境

热门文章

  1. html基础之 input:type
  2. 图说:Windows 8 Copy的呈现变化
  3. Revit二次开发之ISelectionFilter 接口的用法
  4. J2EE项目架构最佳实践
  5. 9.docker commit
  6. 16.卷2(进程间通信)---Sun RPC
  7. 60.Linux 启动过程
  8. 66. 编写高效的 JavaScript
  9. 5.自定义MAGENTO主题
  10. 9. PHP 字符串