昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆;要求在确保质量的情况下把文件压缩到10M以内。

这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 49 = 1.6 Mbps。也就比VCD的质量略好一点(注:VCD的标准码率是1150 Kbps)。谈何“确保质量”?mission impossible啊!

咱还是现实一点吧。在不明显损失画质的前提下,看看使用FFmpeg能够帮到多少忙。用iPhone拍了一个1920 x 1080的视频,33秒,46.3 MB,编码格式是H.264。考虑到H.264目前尚是主流的视频格式,为了播放的兼容性,我们在使用FFmpeg转码时同样选择H.264。

命令行参数-crf

在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。

我们的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。

让我们先执行下面这条命令(关于FFmpeg运行环境的配置,请参阅这篇文章):

ffmpeg -i D:\src.mov -c:v libx264 -preset veryslow -crf 18 -c:a copy D:\dest1.mp4

意思是:将D盘的源文件src.mov,以“非常慢”的速度重新编码成H.264格式,保存为D:\dest1.mp4。其中,-preset指定的编码速度越慢,获得的压缩效率就越高。而-c:a copy又是什么意思呢?因为音频的码率一般都比较小,我们就不折腾它了,况且解码后重新编码也会损害音质,于是,就将音频数据从源文件中以原有编码格式直接拷入目标文件吧。

小提示:想知道-c:v 后面的参数值怎么填吗?或者说FFmpeg到底支持哪些音视频编码格式?执行ffmpeg –encoders看一下吧。另外,执行ffmpeg -i D:\src.mov -c:v libx264 -preset -tune D:\dummy.mp4可以看到-preset参数的取值范围,如下:

有个小疑问:既然不在乎等待时间,为什么不给-preset指定一个最慢的placebo呢?那是因为:与 veryslow相比,placebo以极高的编码时间为代价,只换取了大概1%的视频质量提升。这是一种收益递减准则:slow 与 medium相比提升了5%~10%;slower 与 slow相比提升了5%;veryslow 与 slower相比提升了3%。

另外,针对特定类型的源内容(比如电影、动画等),还可以使用-tune参数进行特别的优化。但如果你不确定该用哪个选项,还是忽略这个参数吧。

对比效果

执行完一条转码命令之后,调整-crf参数值,分别设为19、20、28、51,重新转码输出为不同的MP4文件。记录数据,对比如下:

 

crf = 18

crf = 19

crf = 20

crf = 28

crf = 51

文件大小(MB)

46.3

36.7

31.2

26.5

7.95

1.25

缩减比率

21%

33%

43%

83%

97%

尝试播放这些文件。发现crf取值为18~28的情况下生成的文件,其画质没有明显的差异,而以-crf 51生成的视频画质已经惨不忍睹了!在实际应用中,多试几个crf值,在画质和压缩比之间找到一个你能接受的平衡点即可。

参考文章:ffmpeg与x264编码指南

crf = Constant Rate Factor -preset取值范围:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo -tune取值范围:film,animation,grain,stillimage,psnr,ssim,fastdecode,zerolantency

https://blog.csdn.net/happydeer/article/details/52610060

FFmpeg视频转码技巧之-crf参数(H.264篇)相关推荐

  1. java用ffmpeg转码_java运用FFMPEG视频转码技术.doc

    java运用FFMPEG视频转码技术 基于windows系统安装FFMPEG转码技术 软件特点: 被转视频基本不失真(支持超清.高清.标清): 转码速度比较现成转码软件快非常多(不管文件有多大,此软件 ...

  2. Android FFmpeg视频转码并保存到本地

    本文讲述在Android中, 如何将FFmpeg视频转码为YUV格式并保存到本地. 首先,我们基于上一篇文章 基于Android Studio3.2实现ffmpeg最简单的例子 来进行配置. 配置好之 ...

  3. nodejs+ffmpeg视频转码

    nodejs+ffmpeg视频转码 const context = require("../core/node_core_ctx"); const {spawn,exec} =re ...

  4. 【音视频数据数据处理 12】【H.264篇】解析H.264原始码流中的I帧 / P帧 / B帧数据(暂未解决,本文先放着,来日更新)

    [音视频数据数据处理 12][H.264篇]解析H.264原始码流中的I帧 / P帧 / B帧数据 一.如何判断是 I帧 / P帧 / B帧 1.1 slice_type 1.2 slice_head ...

  5. 使用GPU硬件加速FFmpeg视频转码

    最近看了些视频处理相关的文章,这里有一篇是讲如何使用Nvidia显卡为视频的编解码进行加速的, 为了方便查阅就转载了: 本文内容包括: 在Linux环境下安装FFmpeg 通过命令行实现视频格式识别和 ...

  6. Linux使用shell定时任务实现ffmpeg视频转码和截图

    最近将.net core系统从windows 环境下迁移到linux中,使用docker容器部署.但是系统中使用了ffmpeg做视频转码和截图.在windows中只需要知道ffmpeg.exe的文件位 ...

  7. javaweb中ffmpeg视频转码h264出现卡住不执行的解决办法(看到最后面就是答案了)

    郑文亮 专心地钻研编程,每天进步一点点 博客园 首页 新随笔 联系 管理 随笔-1610  文章-3  评论-570  Java+Windows+ffmpeg实现视频转换 最近由于项目需要,研究了一下 ...

  8. linux视频转码软件,Linux 下ffmpeg视频转码实战一安装

    第一次接触ffmpeg这个软件,其实在我们的生活中他无处不在,由她制作的视频编辑播放软件有:QQ影音 射手播放器 等等.可以解析绝大部分的视频格式,转化成你想要的格式. 和ffmpeg一起的有三个软件 ...

  9. 解决ffmpeg视频转码后视频清晰度下降的问题

    清晰度 Chrome不支持非h264编码的mp4视频播放,可通过ffmpeg将视频转码成h264编码: ffmpeg -i input.mp4 -vcodec h264 -b:v 0 output.m ...

最新文章

  1. 谷歌的硬件梦:Pixel手机、ChromeOS平板和Home音箱
  2. python老鼠打洞问题_脑筋急转弯:老鼠为什么要打洞?这答案让人哭笑不得
  3. [蓝桥杯2019初赛]修改数组-并查集
  4. Android 虚拟机与真机调试配置
  5. lol游戏挂机软件_六小时封停警告!lol手游海外服挂机惩罚力度太大引玩家吐槽...
  6. qt 3d迷宫游戏_《加雷利亚的地下迷宫与魔女的旅团》最新情报公布
  7. MySQL高级-SQL优化步骤
  8. DelphiXE10.4安卓编程初学者心得
  9. Lamp兄弟连Linux视频教程
  10. Auto Layout详解
  11. 快速获取知网,万方,维普等永久性免费下载权限
  12. 宿命论,三年前的演讲稿!,怀念那些力不从心的光景。。
  13. Namesilo转出域名到US Domain Center美国域名注册商
  14. Acrel-2000T无线测温产品方案介绍(安科瑞-须静燕)
  15. 大型网站--负载均衡架构
  16. 关于webpack5打包图片不报错但是也不显示问题
  17. WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
  18. typora安装PicGo+配置腾讯云COS图床
  19. 模拟淘宝查看商品时图片的放大效果
  20. jenkin swindows启动_Windows环境下实现Jenkins自动化部署

热门文章

  1. linux shell判断文件、目录是否存在并移动到指定位置
  2. 计算各种图形的周长(接口与多态)_JAVA
  3. 第11章:Shell编程
  4. Logger PatternLayout 格式
  5. JavaScript简明教程之快速入门
  6. Learning to Rank简介
  7. LSTM神经网络Demystifying LSTM neural networks
  8. 第三章 改进神经网络的学习方式(上)
  9. 驾照考试:理论考试注意事项
  10. 鸟哥的Linux私房菜(服务器)- 第四章、连上 Internet