当前位置:网站首页>视频文件太大?使用FFmpeg来无损压缩它
视频文件太大?使用FFmpeg来无损压缩它
2022-06-27 08:55:00 【灯珑】
咱们平时如果经常拍视频的话,都会遇到一个困境:视频文件太大了,存储的时候需要占用很多的空间。如果直接使用视频压缩工具来压缩码率的话,又会担心损失了视频的画质,这该怎么办呢?
这个时候,我们就可以使用ffmpeg的hevc编码功能来实现无损的压缩!
什么是FFmpeg?

FFmpeg是业内有名的开源图像视频处理程序。它被广泛的使用,在许多视频剪辑软件、图像处理软件中,都使用的FFmpeg,还有比如OBS这样的导播软件里面也使用了FFmpeg
啥是HEVC编码?
咱们常用的MP4格式中,一般使用的都是H.264编码格式,它于2003年被正式发布并广泛使用于各种场合。
十年后,也就是2013年,HEVC编码正式发布。HEVC是High Efficiency Video Coding(高效视频编码)的缩写,又被称为H.265.相较于H.264,它拥有更高的压缩率。在画质相同时,HEVC编码格式能节省25%~50%的存储空间占用。因此,对于动辄几个GB的视频文件,使用HEVC编码进行归档存储,再也合适不过了。
HEVC编码格式有什么缺点?
相较于H.264,HEVC编码格式在编解码的过程中,需要占用更多的硬件资源。大白话就是,速度更慢。因此,如果你的电脑没有很好的显卡来支持HEVC格式的硬件加速,那么将会以很慢的速度压缩你的视频,播放的时候也可能会发生卡顿。
并且,由于HEVC格式的普及程度不如已有近20年历史的H.264,因此,有些播放软件无法播放它。但是在不远的将来,这个问题也不再是问题。
那就开始动手吧!
安装FFmpeg
首先,我们打开FFmpeg的官网https://ffmpeg.org 然后点击“Download”按钮,进入下载页面,下载对应的版本即可。然后在电脑上安装。Windows还需要将安装目录添加到环境变量。
使用FFmpeg
FFmpeg是一个只有命令行界面的程序,因此需要在电脑的控制台里面运行它。
Windows小提示
Windows下,按键盘的win+R,然后输入cmd,即可打开命令行界面
查看FFmpeg的帮助界面
让我们在控制台输入以下命令:
ffmpeg -h然后ffmpeg就会输出它的帮助信息。由于信息是英文的,因此需要一点耐心去阅读它。下面是与我们的目标相关联的两个帮助信息:

这是关于编码器和解码器的信息,然后我们可以输入以下代码,分别查看编码器和解码器的可选项:
ffmpeg -decodersffmpeg -encodersffmpeg -codecs我们会发现输出了一堆信息,让我们眼花缭乱。是的,FFmpeg就是这么强大,支持很多的编解码器.
开始压缩吧!
我们使用FFmpeg的libx265库进行压缩,只需要这样的几个简单步骤:
为了安全起见,我们先将待压缩的视频复制到一个新的文件夹下面,防止误操作丢失了数据。然后在新的这个文件夹中打开控制台(windows下需要使用cd命令进去对应的文件夹)。
接着,我们在文件夹下面新建一个新的文件夹,叫做output,待会我们输出的视频就存在这个文件夹里面。
这时候文件夹下面应该长这样:

接着,我们来研究一下怎么使用ffmpeg压缩视频。
一个最简单的例子
我们可以使用以下的命令格式来输出一个视觉无损的视频:
ffmpeg -i 输入文件名 -c:v libx265 -x265-params crf=18 output/输出文件名.mp4对于上图的文件,命令就是下面这样:
ffmpeg -i demo.mp4 -c:v libx265 -x265-params crf=18 output/demo_1.mp4然后,经过一段时间的等待,我们就可以看到结果了!

左边是源视频,右边是压缩后的视频。我们可以看到,它节省了29.6%的空间!而且,经过我的测试,在视觉上,这两个视频的画质是差不多的。
进行更高级的压缩
在这里,我们讲解一下上面的参数设置的含义。crf是Constant Rate Factor的缩写,它的值越小,画质越高,占用的空间越大。它的可选项为0~51,默认为28.当crf在20以下的时候,就能实现视觉上的无损。
此外,FFmpeg还为我们提供了一些预设选项,我们可以通过preset选项,快速设置x265编码的时候使用到的参数。
preset的可选项按照编码速度从快到慢,排列如下:
ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslowplacebo
编码速度越慢,则压缩效果及画质越好。preset选项的默认参数为medium。
输出最高压缩效果的视觉无损视频
ffmpeg -i 输入文件名 -c:v libx265 -x265-params crf=18:preset=placebo output/输出文件名.mp4对于上面的视频,我们可以用下面这个压缩命令:
ffmpeg -i demo.mp4 -c:v libx265 -x265-params crf=18:preset=placebo output/demo_2.mp4压缩前后大小对比如下:

虽然这次的体积只减少了13.1%,但是肉眼看视频的时候,很明显感觉视频画质和原视频没啥区别。
这样算下来,1GB的视频,使用最高画质的无损压缩,可以节省下131MB的空间呢!还是很可观的!
批量的压缩视频
由于上面的方法压缩视频只能一个一个的压缩,为此我简单写了一个python脚本来完成自动压缩文件夹下的所有视频的功能。
在电脑上安装python和ffmpeg之后,即可运行这个脚本。然后,在脚本所在的文件夹下创建input文件夹及output文件夹。并把要压缩的视频放置在input文件夹下。运行python脚本之后,就会开始压缩视频,输出文件放置在output文件夹下。
结语
FFmpeg的功能十分强大,远不止视频压缩的功能。它的功能还有待我们去探索,有兴趣的同学,可以在FFmpeg官网查看官方的文档与教程,学习更多的知识哦~
转载请注明来源:视频文件太大?使用FFmpeg来无损压缩它! | | 龙进的博客
https://longjin666.cn/?p=1443欢迎关注我的公众号:灯珑
我们一起探索更多有趣的事物!

边栏推荐
- Persistence mechanism of redis
- About the problem that the El date picker Click to clear the parameter and make it null
- Semi supervised learning—— Π- Introduction to model, temporary assembling and mean teacher
- I'm almost addicted to it. I can't sleep! Let a bug fuck me twice!
- Redis master-slave replication and sentinel mode
- A classic interview question covering 4 hot topics
- 第十一章 信号(一)- 概念
- 内部类~锁~访问修饰符
- June 26, 2022 (LC 6100 counts the number of ways to place houses)
- Rman-08137 main library failed to delete archive file
猜你喜欢

Rough reading DS transunet: dual swing transformer u-net for medical image segmentation

高等数学第七章微分方程

100% understanding of 5 IO models

Improving efficiency or increasing costs, how should developers understand pair programming?

webrtc入门:12.Kurento下的RtpEndpoint和WebrtcEndpoint

One week's experience of using Obsidian (configuration, theme and plug-in)

E+h secondary meter repair pH transmitter secondary display repair cpm253-mr0005

1098 Insertion or Heap Sort(堆排序解释)(PAT甲级)

力扣84柱状图中最大的矩形

Correctly understand MySQL mvcc
随机推荐
使线程释放锁资源的操作/方法重载一点注意事项
MATLAB小技巧(19)矩阵分析--主成分分析
Introduction to websocket protocol
Correctly understand MySQL mvcc
Some considerations on operation / method overloading for thread to release lock resources
Matlab tips (19) matrix analysis -- principal component analysis
How much memory does the data type occupy? LongVsObject
Five basic types of redis
我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
Markem Imaje Marken IMAS printer maintenance 9450e printer maintenance
Getting started with webrtc: 12 Rtendpoint and webrtcendpoint under kurento
CLassLoader
2022.6.26-----leetcode. seven hundred and ten
【生动理解】深度学习中常用的各项评价指标含义TP、FP、TN、FN、IoU、Accuracy
Filter filter
Object contains copy method?
提高效率 Or 增加成本,开发人员应如何理解结对编程?
Several cases that do not initialize classes
C # solve the relative path problem using SQLite
枚举?构造器?面试Demo