视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
一、 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、编码效率相关推荐
- 使用FFMPEG进行音视频编解码(C++) 0.简介
FFMPEG介绍 FFMPEG是一个开源的编解码软件,读作"ef ef em peg".官方网址是:http://ffmpeg.org/.FFMPEG几乎支持所有的格式,当然了像一 ...
- 视频编解码之熵编码简介
熵编码 一.熵编码基本原理 二.定长编码 三.变长编码 3.1 哈夫曼编码 3.2 指数哥伦布编码 四.算术编码 4.1 游程编码 4.2 截断定长编码 4.3 常见熵编码方式举例 4.3.1 编码符 ...
- 【视频编解码-软件】之FFMPEG交叉编译
1.ffmpeg交叉编译方法 ./configure \ --enable-gpl \ --enable-version3 \ --enable-nonfree \ --enable-runtime- ...
- 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4
前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...
- 基于FFMPEG 的跨平台视频编解码研究
第33卷 第11期 2011年11月 武 汉 理 工 大 学 学 报 JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11 췍췍췍췍췍췍췍췍췍췍췍췍췍췍 ...
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...
- 视频编解码的理论和实践2:Ffmpeg视频编解码
近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...
- 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)
from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 终于完成了了第二个Client side原型(for ...
- FFmpeg音视频编解码示例
FFmpeg示例程序集:https://www3.nd.edu/~sjiang1/docio/ffmpeg_doc/globals_eval.html FFmpeg音视频编解码示例:https://w ...
- FFmpeg之视频封装格式、流媒体协议、视频编解码协议和传输流格式、时间戳和时间基、视频像素数据
通用视频分析工具:Mediainfo.Elecard StreamEye(视频编码分析工具); 视频封装格式: ********************MP4****************** MP ...
最新文章
- [转] 2012年经典书目
- Unity 字典实现
- EndNote20教程:中英混排问题解决方法(中文参考文献处理) 附最新版下载
- SQL2005使用游标的实例(SBO中计算到期应收账款)
- Leetcode--1014. 最佳观光组合(java)
- 脉冲宽度调制pdm_PWM (脉冲宽度调制)原理与实现
- random模块 时间模块 sys模块 os模块 json模块 pickle模块
- Linux命令之sed使用入门概述
- php 递归穿件文件夹,PHP递归复制整个文件夹
- 天正cad计算机快捷键,天正CAD快捷键大全
- 计算机二级公共基础知识(一)——数据结构与算法
- iis7 运行多个https,433端口监听多个htps 站点
- word2016文档怎样添加封面?简单技巧!word文档如何设置加入封面?
- 2023新疆大学计算机考研信息汇总
- 百度账号 不用手机号注册
- 一、EulerOS 操作系统入门
- 财商帮解读:高质量的社群都离不开这10个关键要素!
- JS学习20:for..in 循环遍历对象
- 字模存储计算大学计算机是啥,大学计算机模拟题.doc
- 从计算机应用的角度进行分类,计算机考试文档
热门文章
- 生成BAPI的ALE接口
- 开发安全的ASP.NET应用程序
- Bossie Awards 开源大数据工具最佳列表
- c++学习---继承与派生类
- vue cli3 项目中解决跨域
- android pod 组件化_Flutter组件化导入至iOS现有工程中(CocoaPods篇)
- java代码读写者问题_一整套Java线上故障排查技巧,爱了!
- java短信验证码实现_社交APP开发短信验证是通过什么技术实现
- python 文件读写 newline_「Python」:文件读写
- 大部分Java程序员都会忽略的几个问题,你中招没?