x264并行编码设置

本文详细介绍了x264编码器中的两种并行模式:slice并行和frame并行。slice并行适合实时应用,可以将一帧图像分成多个slice并行处理;frame并行则是在多帧间进行并行处理,但会引入延迟。文章还讨论了不同场景下的参数设置。
摘要由CSDN通过智能技术生成
x264有两种并行模式,slice并行和frame并行。slice并行把一帧划分为多个矩形slice,在这多个slice之间并行处理,是一种非延时性的并行模式,多slice会稍微降低编码性能。frame并行是同时开启多帧编码,x264在N个frame并行的时候需要集齐N帧再开始一起编码,因此x264 frame并行是一种延时性的并行模式(这是x264流程的问题,其实frame并行机制并不要求集齐N帧以后再启动编码)。对于对编码时间敏感的实时应用,不能采用frame并行,只能采用slice并行或者不做并行编码。

x264_param_t结构体里面的i_threads参数定义并行单元数目,根据并行模式的不同有不同的意义。
i_threads有三种设置方式。
1. i_threads = 1;
明确告诉编码器,不使用并行编码。zerolatency场景下设置param.rc.i_lookahead=0; 那么编码器来一帧编码一帧,无并行、无延时。如果没有设置i_lookahead=0,编码器会延时40帧(程序缺省值),再开始编码,这是为了做码率控制而统计帧信息。

2. i_threads = N;  (N>1)
明确告诉编码器,使用N个并行单元编码。如果param.b_sliced_threads=1那么一帧图像被划分为N个slice(N的取值也有限制,不能大于图像宏块行数),进行slice并行。如果param.b_sliced_threads=0进行frame并行。编码器会延时max(N, param.rc.i_lookahead)帧。zerolatency场景下场景下,param.b_sliced_threads=1; param.rc.i_lookahead=0; N个slice并行、无延时。注意有些厂家的解码器不支持多slice码流,这时不能进行这种设置,而只能采用设置1。

3. i_threads = 0; 或者不设置
不配置并行单元数,由程序根据当前CPU性能决定N值。决定N值后的流程和设置2是一样的。
一般slice并行N值小于frame并行的N值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值