一、 H264编码profile & level控制

作者:DayInAI   日期:20190123

背景知识
先科普一下profile&level。(这里讨论最常用的H264) 
H.264有四种画质级别,分别是baseline, extended, main, high: 
  1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC; 
  2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少) 
  3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 
    也支持CAVLC 和CABAC 的支持; 
  4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式; 
H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。 
根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。

二、 ffmpeg如何控制profile&level

举3个例子吧 
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4
ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4
ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4
如果ffmpeg编译时加了external的libx264,那就这么写: 
ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4
从压缩比例来说,baseline< main < high,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码 baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!
苹果的设备对不同profile的支持。

三、编码效率和视频质量的取舍(preset, crf)

除了上面提到的,强行配置biterate,或者强行配置profile/level,还有2个参数可以控制编码效率。 
一个是preset,一个是crf。 
preset也挺粗暴,基本原则就是,如果你觉得编码太快或太慢了,想改改,可以用profile。 
preset有如下参数可用:
ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo. 
编码加快,意味着信息丢失越严重,输出图像质量越差。
CRF(Constant Rate Factor): 范围 0-51: 0是编码毫无丢失信息, 23 is 默认, 51 是最差的情况。相对合理的区间是18-28. 
值越大,压缩效率越高,但也意味着信息丢失越严重,输出图像质量越差。
举个例子吧。 
ffmpeg -i input -c:v libx264 -profile:v main -preset:v fast -level 3.1 -x264opts crf=18 
(参考自:https://trac.ffmpeg.org/wiki/Encode/H.264)
和H264的profile&level一样,为了应对不同应用的需求,HEVC制定了“层级”(tier) 和“等级”(level)。 
tier只有main和high。

视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率相关推荐

  1. 使用FFMPEG进行音视频编解码(C++) 0.简介

    FFMPEG介绍 FFMPEG是一个开源的编解码软件,读作"ef ef em peg".官方网址是:http://ffmpeg.org/.FFMPEG几乎支持所有的格式,当然了像一 ...

  2. 视频编解码之熵编码简介

    熵编码 一.熵编码基本原理 二.定长编码 三.变长编码 3.1 哈夫曼编码 3.2 指数哥伦布编码 四.算术编码 4.1 游程编码 4.2 截断定长编码 4.3 常见熵编码方式举例 4.3.1 编码符 ...

  3. 【视频编解码-软件】之FFMPEG交叉编译

    1.ffmpeg交叉编译方法 ./configure \ --enable-gpl \ --enable-version3 \ --enable-nonfree \ --enable-runtime- ...

  4. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  5. 基于FFMPEG 的跨平台视频编解码研究

    第33卷 第11期 2011年11月 武 汉 理 工 大 学 学 报 JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11 췍췍췍췍췍췍췍췍췍췍췍췍췍췍 ...

  6. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  7. 视频编解码的理论和实践2:Ffmpeg视频编解码

    近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...

  8. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)

    from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 终于完成了了第二个Client side原型(for ...

  9. FFmpeg音视频编解码示例

    FFmpeg示例程序集:https://www3.nd.edu/~sjiang1/docio/ffmpeg_doc/globals_eval.html FFmpeg音视频编解码示例:https://w ...

  10. FFmpeg之视频封装格式、流媒体协议、视频编解码协议和传输流格式、时间戳和时间基、视频像素数据

    通用视频分析工具:Mediainfo.Elecard StreamEye(视频编码分析工具); 视频封装格式: ********************MP4****************** MP ...

最新文章

  1. [转] 2012年经典书目
  2. Unity 字典实现
  3. EndNote20教程:中英混排问题解决方法(中文参考文献处理) 附最新版下载
  4. SQL2005使用游标的实例(SBO中计算到期应收账款)
  5. Leetcode--1014. 最佳观光组合(java)
  6. 脉冲宽度调制pdm_PWM (脉冲宽度调制)原理与实现
  7. random模块 时间模块 sys模块 os模块 json模块 pickle模块
  8. Linux命令之sed使用入门概述
  9. php 递归穿件文件夹,PHP递归复制整个文件夹
  10. 天正cad计算机快捷键,天正CAD快捷键大全
  11. 计算机二级公共基础知识(一)——数据结构与算法
  12. iis7 运行多个https,433端口监听多个htps 站点
  13. word2016文档怎样添加封面?简单技巧!word文档如何设置加入封面?
  14. 2023新疆大学计算机考研信息汇总
  15. 百度账号 不用手机号注册
  16. 一、EulerOS 操作系统入门
  17. 财商帮解读:高质量的社群都离不开这10个关键要素!
  18. JS学习20:for..in 循环遍历对象
  19. 字模存储计算大学计算机是啥,大学计算机模拟题.doc
  20. 从计算机应用的角度进行分类,计算机考试文档

热门文章

  1. 生成BAPI的ALE接口
  2. 开发安全的ASP.NET应用程序
  3. Bossie Awards 开源大数据工具最佳列表
  4. c++学习---继承与派生类
  5. vue cli3 项目中解决跨域
  6. android pod 组件化_Flutter组件化导入至iOS现有工程中(CocoaPods篇)
  7. java代码读写者问题_一整套Java线上故障排查技巧,爱了!
  8. java短信验证码实现_社交APP开发短信验证是通过什么技术实现
  9. python 文件读写 newline_「Python」:文件读写
  10. 大部分Java程序员都会忽略的几个问题,你中招没?