ffmpeg--转码参数调整
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则多应用于广电和存储领域。
一些解释:
1 I-帧:也成为关键帧,I-帧完全自我使用的,并且不使用任何其他帧的信息。它在三种帧中占最大的比例,并且具有最高的质量,但是压缩效率是最低的。
P -帧:P -帧是所谓的“预示”帧。当创建了一个P-帧时,编码器可以向后查看I-帧或者P-帧中冗余的图片信息。P-帧比I-帧效率高,但是没有B-帧的效率高。
B-帧:B-帧是双向预测帧,这意味着当我们创建B-帧,编码器可以同时向前和向后查找冗余的图片信息。这使得B-帧在三种帧中具备最佳的效率。注意,B-帧在使用Baseline方式生产视频的时候是不可用的。
2 虽然结果是取决于源文件质量的,但通常来说CABAC被认为比CAVLC效率高5%-15%。 这意味着,CABAC应该在码率低5-15%,的情况下,提供同等的,或者更高的视频质量。
3 至于Baseline@L x.x、Main@L x.x、High@L x.x形式则是在不同级别下的码流级别,数值越大码流就越大,更耗费资源。所以就码流而言High@L3.0<High@L4.0<High@L5.1。
4 压缩率来说就是BP>HP>MP, 比例大概是100的原始数据, 压缩后BP=15,HP=45,MP=50;在相同配置情况下,High profile(HP)可以比Main profile(MP)节省10%的码流量,比MPEG-2 MP节省60%的码流量,具有更好的编码性能。根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。
下图清楚的给出不同的profile&level的性能区别。
profile 主要参数:
Level 主要参数:
从压缩比例来说,baseline< main < high ,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!
苹果的设备对不同profile的支持。
preset
· --bframes <最多连续放多少B帧>
B帧是压缩程度最高的帧, 放的越多愈能降低码率!
比如设置--bframes 16 (最大值16)就等于一组最多可以连续放入16个.
*注意: 此参数在不同用途的视频的分歧很大.
**注意: 此参数会严重影响网络视频的观看效果.
B帧本身需要读取参考前面的帧的信息, 调的越高, 一个GOP中就有更大可能被放入更多B帧从而达到压缩效果.
大量B帧能达到压缩效果, 加快网络缓冲, 但上传用视频占用太多CPU会导致网络播放器从轻微到严重的磕磕绊绊断断续续的播放状态, 这种情况不要设高!
· --b-adapt <应该放B帧还是P帧>
x264用来决定放P帧还是B帧更好, 一共3个选项:
0 全部设B帧 (可能会造成播放器解码困难, 不推荐)
1 加速算法 (bframes开的越大, 速度愈快, 但效果不如2)
2 完整算法 (bframes开的越大, 速度愈慢, 但压缩率更好)
推荐2, 但码率允许的情况下也推荐1
· --direct <根据空间还是时间来判断物件移动>
直接 --direct auto 自动判断 (有的参数确实没啥好说的)
· --me <位移预测方式>
速度从低到高有:
dia菱形(快, 效果差),
hex六边形(快, 效果一般, 纯单向移动推荐),
umh可变六边形(适中,效果好, 推荐),
esa全向(慢, 效果好点儿)
tesa超全向(比上一个慢点儿, 效果好一丢丢).
大多情况推荐 --me umh
模拟钢琴, midi轨道演示类的视频大多都是单向移动, 所以可以选 --me hex, 但文件码率会增大一点(1080p, 60帧下约100kbps).
tesa只比esa慢一小点. 除非码率只差一点(10kbps)就合格了再使用, 当然更简单粗暴不拖时间的方式还是调 --vf resize 里的 sar~
--merange <位移预测范围大小>
多大都可以. 在最极端的 --preset placebo 参数中这个值也只是24.
普通情况就设24即可, 毕竟现在电脑的配置不是几年前了.
模拟钢琴类的视频由于几乎所有的物件都往一个方向移动, 不会很大的拖慢判断, 所以推荐32.
--partitions <宏块能分成多少份>
用来精确的还原线条. --presetplacebo下的是 --partitions all 所以视频的宽度和高度都会被分成16块, 见图(数一下图中横向和纵向的块的数量就明白了)
推荐:
高清片源+等于/高于1280*720: --partitions all
低清片源/低于1280*720情况下: --partitions b8x8,p8x8,i8x8,i4x4 (IPB帧被分成8x8的小块, I帧还可以被分成4x4的小块.)
当片源非常不清晰时: --partitions b4x4,p4x4,i4x4.
--ref <能参考多少帧> 最大值16
这个参数最终会以命令的形式告诉播放器每一个B帧和P帧能用多少个前面的帧来获取参考信息. 能参考更多帧, 标志着自身可以储存更少信息, 增强压缩效果.
*注意: 此参数会严重影响网络视频的观看效果.
**注意: 此参数在不同用途的视频的分歧很大.
无变化,不用参考,设为1左右。
变化不大,容易参考,适合开大,设为10以上。
变化太大,难以参考,适合缩小,设为5以下。
· --trellis <要帮忙吗>
基于拉普拉斯算子(什么鬼)通过分格量化将编码数据微调的参数. 好吧, 拉普拉斯算子的优点是能发现并增强微小的细节, 我就知道这么多~
设定的值会影响trellis在计算部分的参与程度. 一般是越多越好.
0: 关闭.
1: 仅编码后期量化计算.
2: 编码后期量化, 运动精度, 分割宏块等计算.
所有情况推荐 --trellis 2
· --rc-lookahead <扫描多少帧>
扫描往后的帧并把变化数据交给量化工具.
建议设置为视频原帧数的三倍, 个位数除以2, 小数去尾.
*对于分辨率很低(240p,360p, 480p等)可以考虑设为视频源帧数的5倍
(极限值为 250)
并降低qcomp来保证最大的扫描距离和量化压缩强度哦(qcomp后面会讲到, 现在可以无视)
--subme <设置亚像素估计的复杂度>
值设在0-11之间, 设的越大提升越强.
推荐最高的值: 11 (有的x264版本不支持, 这种情况下用10)
默认:7
可使用的值如下:
0 —— fullpel only
1 —— QPel SAD 1 iteration
2 —— QPel SATD 2 iterations
3 —— HPel on MB then QPel
4 —— Always QPel
5 —— Multi QPel + bi-directional motion estimation
6 —— RD on I/P frames
7 —— RD on all frames
8 —— RD refinement on I/P frames
9 —— RD refinement on all frames
10 —— QP-RD (requires –trellis=2, –aq-mode > 0)
preset跟profile,level是否冲突?
就个人理解,profile,是特性限定,level是数量限定,preset是具体执行的步骤限定,在一起应该不冲突。
ffmpeg--转码参数调整相关推荐
- FFmpeg转码参数设置
ffmpeg用了很久了,也没有想写点什么. 刚接触ffmpeg也是有大量的不理解的地方,不过慢慢的了解多了基本上都是可以使用的. 本文主要介绍如何使用ffmpeg.exe进行转码.编译好的ffmpeg ...
- NVIDIA FFmpeg 转码技术分析
NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码.截至 ...
- php音视频同步,FFMPEG转码音视频不同步情况总结
[导读]使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同步,下面我们就来根据问题出现的原因,对所遇到的音视频不同步做一个分类. 使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同 ...
- [FFMPEG]进行音频音量调整
一.前言 由于我们个人使用的音频和视频数据都是从各个地方获取的,因此其中的音频音量大小不一.而互联网音乐平台如网易云音乐.qq音乐等,几乎所有的音乐音量大小都一致,可能就是使用了音量标准化的方式. ...
- Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整
作者:李彬,赵雪枫,金融科技工程师,架构师社区特邀作者! 应用服务性能调优,是每个系统投产前都需要关注的问题,系统及软件层面的调优方法均有大量文章介绍,但在所有招数使出后,是否就无潜可挖了?如果了解L ...
- ffmpeg转码速度控制方法
FROM:http://blog.chinaunix.net/uid-11344913-id-4082625.html FFMPEG 像读取直播流一样读取文件 HLS当前吵得这么熙熙攘攘的,不知道大伙 ...
- FFMPEG AVDictionary 配置参数
AVDictionary 的用法简介 AVDictionary 所在的头文件在 libavutil/dict.h,其定义如下: struct AVDictionary { int count; AVD ...
- 使用GridSearchCV和RandomizedSearchCV进行超参数调整
In Machine Learning, a hyperparameter is a parameter whose value is used to control the learning pro ...
- php ffmpeg 转码mp4,PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
配置php.ini文件 file_uploads = on ;//是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没 ...
最新文章
- SecureCRT中的实用配置
- git回滚到某一个commit
- cmd命令行设置环境变量
- 京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)
- Windows下Android开发环境搭建和配置
- layui table异步调用数据的时候,数据展示不出来现象解决方案
- 收好这份来自大厂技术大咖的“远程办公指南”
- 企业上公有云的 10 种驱动力
- 在Linux系统编译DCMTK的源码得到其动态库文件和可执行程序
- windows 10纯净安装教程:从wepe下载制作启动盘到启动wepe系统安装windows10
- html5 mp4文件查看,MP4Box 借用HTML5 file api 本地读取 mp4 头信息
- java动态表头_easyPOI动态表头
- log4j2漏洞复现
- Revealing Module(揭示模块)模式
- element-ui下载文件功能
- 网站pc端和手机端视频的处理
- 数据结构之赫曼夫树(哈曼夫树)
- 迅雷启动慢 解决方法
- Loss——Focal Loss
- rtsp直播流转m3u8