树莓派学习专题<12>:使用x264库实施H264编码--Linux和Windows上的部署
树莓派学习专题<12>:使用x264库实施H264编码--Windows和Linux上的部署
- 1. 代码下载
- 2. linux下的编译与测试
- 2.1 必备软件
- 2.2 解压x264代码
- 2.3 配置和编译
- 2.4 测试
- 3. windows下的编译与测试
- 3.1 必备软件
- 3.2 配置与编译
- 3.3 编码测试
1. 代码下载
x264代码下载:
地址1:网页下载:下载地址
地址2:git仓库复制:# git clone https://code.videolan.org/videolan/x264.git
2. linux下的编译与测试
操作系统环境:Ubuntu 24.04.2 LTS;
2.1 必备软件
- 安装bzip2;
- 安装编译工具;
- 安装nasm。
sudo apt-get install bzip2
sudo apt install build-essential
sudo apt-get install nasm
2.2 解压x264代码
tar -xvf x264-master.tar.bz2
2.3 配置和编译
进入x264-master目录,执行:
./configure
配置结果为:
platform: X86_64
byte order: little-endian
system: LINUX
cli: yes
libx264: internal
shared: no
static: no
bashcompletion: no
asm: yes
interlaced: yes
avs: yes
lavf: no
ffms: no
mp4: no
gpl: yes
thread: posix
opencl: yes
filters: crop select_every
lto: no
debug: no
gprof: no
strip: no
PIC: no
bit depth: all
chroma format: all
然后make。在目录下得到程序文件x264。
2.4 测试
拷贝一个720P的YUV420文件到目录下,使用如下命令编码h264文件:
./x264 720p.yuv -o 720p.264 --input-res 1280x720
编译结束后显示:
yuv [info]: 1280x720p 0:0 @ 25/1 fps (cfr)
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High, level 3.1, 4:2:0, 8-bit
x264 [info]: frame I:4 Avg QP:18.82 size: 81591
x264 [info]: frame P:264 Avg QP:21.48 size: 16404
x264 [info]: frame B:556 Avg QP:25.87 size: 2500
x264 [info]: consecutive B-frames: 3.3% 16.7% 10.6% 69.4%
x264 [info]: mb I I16..4: 4.7% 61.3% 34.0%
x264 [info]: mb P I16..4: 2.0% 6.5% 0.8% P16..4: 48.3% 16.2% 7.7% 0.0% 0.0% skip:18.6%
x264 [info]: mb B I16..4: 0.1% 0.2% 0.0% B16..8: 29.8% 2.2% 0.2% direct: 1.2% skip:66.2% L0:42.3% L1:53.5% BI: 4.2%
x264 [info]: 8x8 transform intra:68.1% inter:73.5%
x264 [info]: coded y,uvDC,uvAC intra: 49.1% 77.1% 43.8% inter: 8.2% 17.2% 1.6%
x264 [info]: i16 v,h,dc,p: 30% 25% 22% 23%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 17% 26% 4% 6% 7% 6% 5% 5%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 14% 16% 7% 8% 9% 7% 8% 5%
x264 [info]: i8c dc,h,v,p: 49% 18% 23% 9%
x264 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x264 [info]: ref P L0: 73.0% 12.7% 12.6% 1.7%
x264 [info]: ref B L0: 92.2% 6.9% 0.9%
x264 [info]: ref B L1: 99.1% 0.9%
x264 [info]: kb/s:1467.69encoded 824 frames, 117.77 fps, 1467.69 kb/s
一共824帧,编码速率117fps。应该是虚拟机性能的原因。稍后可以看到,在windows下,速度快得多。
3. windows下的编译与测试
操作系统环境:windows11 64bit;
3.1 必备软件
- 安装MSYS2;
- 安装mingw64;
- 安装nasm;
- 安装make工具。
MSYS2下载地址:网页下载:下载地址
安装好MSYS2之后,执行一次更新:
pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
然后安装mingw64。
pacman -S mingw-w64-x86_64-toolchain
然后运行mingw64,安装nasm。
pacman -S nasm
此时还要安装make,否则make时找不到命令。
pacman -S autoconf automake libtool autoconf-archive make
3.2 配置与编译
执行配置:
./configure --host=x86_64-w64-mingw32 --enable-static
然后make。x264-master目录下会生成一个x264.exe可执行文件。
3.3 编码测试
打开一个cmd命令行窗口,进入到x264-master目录下,准备待编码文件720p.yuv,执行如下命令,测试编码:
x264.exe 720p.yuv -o 720p.264 --input-res 1280x720
执行结果:
yuv [info]: 1280x720p 0:0 @ 25/1 fps (cfr)
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High, level 3.1, 4:2:0, 8-bit
x264 [info]: frame I:4 Avg QP:18.89 size: 81318
x264 [info]: frame P:274 Avg QP:21.57 size: 16011
x264 [info]: frame B:546 Avg QP:25.88 size: 2419
x264 [info]: consecutive B-frames: 4.4% 18.2% 10.9% 66.5%
x264 [info]: mb I I16..4: 4.8% 61.3% 33.9%
x264 [info]: mb P I16..4: 2.0% 6.4% 0.8% P16..4: 48.3% 15.8% 7.5% 0.0% 0.0% skip:19.1%
x264 [info]: mb B I16..4: 0.1% 0.2% 0.0% B16..8: 29.5% 2.1% 0.2% direct: 1.2% skip:66.7% L0:41.0% L1:54.7% BI: 4.2%
x264 [info]: 8x8 transform intra:68.0% inter:73.4%
x264 [info]: coded y,uvDC,uvAC intra: 48.8% 76.8% 43.2% inter: 8.2% 17.1% 1.6%
x264 [info]: i16 v,h,dc,p: 31% 25% 22% 22%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 17% 26% 4% 6% 7% 6% 5% 5%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 14% 16% 7% 8% 9% 7% 8% 5%
x264 [info]: i8c dc,h,v,p: 50% 18% 23% 9%
x264 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x264 [info]: ref P L0: 73.1% 12.5% 12.7% 1.7%
x264 [info]: ref B L0: 92.1% 7.0% 0.9%
x264 [info]: ref B L1: 99.1% 0.9%
x264 [info]: kb/s:1464.27encoded 824 frames, 247.45 fps, 1464.27 kb/s
可以看到,编码速度可以达到大约250fps。