ffmpeg 转码线程数的控制

转码命令

ffmpeg -threads 1 -i 1080P_daxiongtu_30fps_2D.mp4 -c:v libx264 -s 3840x2160 -b:v 20M -r 120 -profile:v high -preset veryslow -threads 1 -c:a copy -f mp4 rm.mp4 -y

这里配置 编码线程为 1 ,解码线程为 1

TOP 分析

通过 top 可以发现单核的 cpu 使用率到了 100%

PS 分析

通过 ps 查看 ffmpeg 的线程数,可以看到是一个线程

[root@bogon ~]# ps -T -p 21097
PID SPID TTY TIME CMD
21097 21097 pts/5 00:00:55 ffmpeg

PROC 分析

可以看到 Threads 的值为1

[root@bogon ~]# cat /proc/21097/status 
Name:	ffmpeg
State:	R (running)
Tgid:	21097
Ngid:	0
Pid:	21097
PPid:	20392
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	256
Groups:	0 
VmPeak:	 3191924 kB
VmSize:	 3191924 kB
Threads:	1
SigQ:	0/61948
SigPnd:	0000000000000000

Seccomp:	0
Cpus_allowed:	ff
Cpus_allowed_list:	0-7

Mems_allowed_list:	0
voluntary_ctxt_switches:	5
nonvoluntary_ctxt_switches:	3839

 

分析

        ffmpeg 在配置单线程转码过程中是串行处理的方式,media的处理都是在主线程内完成了

        这样的架构在服务器或者是多核机器里面,就会出现cpu利用率不高的情况,发现cpu只用了30%,但是转码缺转不动的情况了;

猜你喜欢

转载自blog.csdn.net/ternence_hsu/article/details/82050429