在 Linux 中充分利用多核 CPU 来转码


上回写的<听美剧, 练英语听力>之后, 发现忘了放个批量处理的脚本. 下面补上, 顺便练习一下多核心协同处理. 嗯, 手机都4核了不是?

用到的命令类似:

avconv -i your.mkv -vn -acodec libmp3lame -ac 2 -f mp3 your.mp3

简单的 bash 单循环写法:

ls *.mkv |while read i; do avconv -i $i -vn -acodec libmp3lame -ac 2 -f mp3 $i.mp3; done

这就只用到了一个 CPU 核心. 如果将 avconv 放到后台执行就可以做到多进程, 但又不方便控制进程数, 当进程数远远大于 CPU 核心数时就可以体验一下一台服务器快被烤熟时的感觉了. 后来发现 xargs 支持指定数目的进程, 简直是无法要求更多了:

ls *.mkv | xargs -n 1 -P 4 -I filename avconv -i filename -vn -acodec libmp3lame -ac 2 -f mp3 filename.mp3

又简单又高效了是不是? 其中 -P 4 就是开启4个进程来执行. 🙂