转码命令
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%,但是转码缺转不动的情况了;