ffmpeg 降低CPU使用率

ffmpeg做h264编码,使用了libx264;想要降低cpu使用率,就需要牺牲图像质量;由于已经使用 baseline,就无需考虑B帧了。

目前能想到的,主要是需要调控以下一些参数:

1. qp值

此值范围为0~51 。值越小,量化步长越小,量化的精度就越高,意味着同样画质的情况下,产生的数据量可能会更大。数值越大,图像越模糊,CPU使用率越低。

2. 设置编码速度preset

指定编码速度,速度越慢,画质越好,cpu占用越高,可取值:

ultrafast,superfast,veryfast,faster,fast,
medium,slow,slower,veryslow,placebo

调用方法:
x264_param_default_preset

3. partitions

H.264视频在压缩过程中划分为16×16的宏块。这些宏块可以进一步划分为更小的分割,这就是此选项要控制的部分。分割依不同帧类型(I、P、B)启用。可用的分割:p8x8, p4x4, b8x8, i8x8, i4x4, none, all

  • I:i8x8、i4x4。
  • P:p8x8(亦会启用p16x8/p8x16)、p4x4(亦会启用p8x4/p4x8)。
  • B:b8x8(亦会启用b16x8/b8x16)。
  • p4x4通常不怎么有用,而且性价比极低[4]。

4. no-cabac

预设值:b_cabac = 1。停用CABAC切换回效率较低的CAVLC。会降低压缩效率(通常10~20%)和解码的硬件需求。

coder:

熵编码类型,取值:

default
cavlc
cabac
vlc
ac

引用自:使用ffmpeg编码h264,降低CPU使用率的几个方法


限制 CPU 使用率

添加:-threads 2 参数。

FFmpeg -i IN –threads 2 OUT
Process ffmpeg = new Process();
ffmpeg.StartInfo.UseShellExecute = false;
ffmpeg.StartInfo.FileName = "..\ffmpeg.exe";
ffmpeg.StartInfo.Arguments = "-threads 2";  // <=== Add this line
ffmpeg.StartInfo.CreateNoWindow = true;
ffmpeg.Start();

测试一 -threads

-threads 2 以两个线程进行运行, 加快处理的速度。

转换视频:7752c7dd-36aa-47eb-95a5-2193c9726541.wmv
目标视频:7752c7dd-36aa-47eb-95a5-2193c9726541.mp4
转换命令:

FFmpeg -i IN -map 0 -r 25 -threads 4 -y Out

本机测试机环境:

win7旗舰版+Intel(R) Core(TM)i5-2400 CPU @3.10GHz 3.10GHz+4.00GB+64bit

序号 开启的线程数 占用CPU数 CPU使用率(%) 转换时间(min) 其他
1 1 1 25 7
2 2 4 40-55 3 2个CPU〉50%,1个=50%,1个CPU=40%
3 4 4 60-70 3 4个CPU比较平均
4 4 4 70-80 2 4个CPU使用平均
5 4 80-85 2 4个CPU使用较平均

为了达到更快的转换速度,CPU使用率在可允许范围内,选择-threads 2。

引用自:How to limit FFMpeg CPU usage?

发表评论