0 前言
在Linux操作系统中实现x264库编译、x265库编译,并将他们编译入FFmpeg中。作为一个工作记录,方便后面操作。
Ubuntu 系统编译 x265 库完整步骤
x265 是 H.265/HEVC 视频编码标准的开源实现,编译流程与 x264 类似但有专属依赖和配置,以下是分步详细操作:
一、安装编译依赖工具
首先安装 x265 编译所需的基础工具链和依赖库,打开终端执行:
bash
# 1. 更新软件源索引(确保获取最新依赖版本)
sudo apt update
# 2. 安装核心编译工具及专属依赖
sudo apt install -y build-essential git cmake mercurial libnuma-dev
依赖说明:
build-essential/git:与 x264 编译一致,提供 gcc/g++/make 工具链和源码克隆能力cmake:x265 采用 CMake 构建系统(而非 x264 的 configure 脚本),是核心构建工具mercurial(hg):x265 官方源码托管在 Mercurial 仓库,需此工具克隆源码libnuma-dev:NUMA 架构优化依赖,提升多核心 CPU 下的编码性能,可选但推荐安装
二、获取 x265 源码
x265 官方源码托管在 MulticoreWare 仓库,https://www.videolan.org/developers/x265.html:
下载稳定版源码包(适合生产环境)
若偏好稳定版本,可从官方仓库下载指定版本压缩包:
bash
git clone https://bitbucket.org/multicoreware/x265_git.git
# 进入解压后的源码目录
cd x265_git
#切换一个稳定分支,如 3.5
git checkout 3.5
三、创建编译目录(CMake 规范构建方式)
x265 推荐使用out-of-source 构建(源码目录与编译目录分离),避免编译文件污染源码,操作如下:
bash
# 在源码根目录下创建 build 目录(用于存放编译配置和生成文件),进入 build 目录
mkdir -p source/build && cd source/build
四、CMake 配置 x265 编译参数(核心步骤)
使用 cmake 命令配置编译选项,提供两种常用配置方案,可根据需求选择:
方案1:通用编译(生成动态库+静态库,系统全局调用)
适合大多数场景,编译后生成 .so 动态库和 .a 静态库,安装到系统默认路径 /usr/local/:
bash
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_SHARED=ON \
-DENABLE_STATIC=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
或者将生成文件放在./out目录中
bash
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_SHARED=ON \
-DENABLE_STATIC=ON \
-DCMAKE_INSTALL_PREFIX=./out \
..
参数说明(关键参数):
CMAKE_BUILD_TYPE=Release:编译发布版本(优化性能,无调试信息,推荐生产环境),若需调试可改为DebugENABLE_SHARED=ON:启用动态库(.so)编译(OFF 则禁用,仅生成静态库)ENABLE_STATIC=ON:启用静态库(.a)编译(OFF 则禁用,仅生成动态库)CMAKE_INSTALL_PREFIX=/usr/local:指定安装路径(可自定义,如~/local/x265)..:指定 CMake 查找源码配置文件(CMakeLists.txt)的路径(即上一级源码根目录)
方案2:高性能编译(CPU 优化+功能增强,推荐生产环境)
添加额外优化参数,充分利用硬件性能并启用更多功能:
bash
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_SHARED=ON \
-DENABLE_STATIC=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_PIC=ON \
-DENABLE_NUMA=ON \
-DCPU_TARGET=native \
..
或者将生成文件放在./out目录中
bash
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_SHARED=ON \
-DENABLE_STATIC=ON \
-DCMAKE_INSTALL_PREFIX=./out \
-DENABLE_PIC=ON \
-DENABLE_NUMA=ON \
-DCPU_TARGET=native \
..
额外参数说明:
ENABLE_PIC=ON:生成位置无关代码,便于将 x265 链接到其他动态库中(如 ffmpeg)ENABLE_NUMA=ON:启用 NUMA 架构优化,提升多核心 CPU 编码效率(需提前安装 libnuma-dev)CPU_TARGET=native:自动检测本地 CPU 型号,启用针对性指令集优化(仅当前机器使用时推荐)
配置成功标识
终端输出无报错,最后显示 -- Configuring done 和 -- Generating done,说明 CMake 配置成功,build 目录下会生成 Makefile 等编译文件。
五、编译 x265 源码
使用 make 命令编译,通过 -j 参数指定多线程数(提升编译速度,建议设为 CPU 核心数):
bash
# 多线程编译(推荐,自动获取 CPU 核心数,高效快捷)
make -j$(nproc)
编译过程中终端输出编译日志,无 error 提示即编译成功,build 目录下会生成对应的库文件(.so 动态库和 .a 静态库)。
六、安装 x265 库
编译完成后,将库文件、头文件等安装到 CMake 配置时指定的 CMAKE_INSTALL_PREFIX 路径下,需使用 sudo 提升权限(若安装到用户目录可无需 sudo):
bash
sudo make install
安装成功后,文件默认部署路径:
- 头文件:
/usr/local/include/x265.h(核心头文件)、/usr/local/include/x265_config.h - 库文件:
/usr/local/lib/libx265.so(动态库)、/usr/local/lib/libx265.a(静态库) - 配置文件:
/usr/local/lib/pkgconfig/x265.pc - 工具程序:
/usr/local/bin/x265(命令行编码工具)
七、配置动态库链接路径(解决运行时库找不到问题)
与 x264 类似,系统默认可能无法识别 x265 动态库路径,需手动配置:
bash
# 1. 将 x265 库路径写入系统动态库配置文件
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/x265.conf
# 2. 更新动态库缓存,使配置立即生效
sudo ldconfig
八、验证 x265 库安装成功
提供两种验证方式,确保 x265 库可正常使用:
方式1:查看 x265 版本(简单直观)
bash
# 查看 x265 命令行工具及库版本
x265 --version
若终端输出 x265 的版本信息、编译参数、支持的功能(如 CPU 指令集、编码配置),说明安装成功。
方式2:通过 pkg-config 验证库配置(用于后续项目链接)
bash
# 查看 x265 库的编译链接参数(头文件路径+库文件路径)
pkg-config --libs --cflags x265
若终端输出 -I/usr/local/include(头文件路径)和 -L/usr/local/lib -lx265(库文件路径及链接标识),说明库配置正常,可直接用于 ffmpeg 等其他项目的编译链接。
补充说明
-
卸载 x265 库 :进入 build 目录执行
sudo make uninstall即可彻底卸载 -
禁用特定功能 :若编译时需关闭优化或功能,可在 CMake 配置时添加参数(如
-DENABLE_ASM=OFF禁用汇编优化、-DENABLE_LIBNUMA=OFF禁用 NUMA 支持) -
自定义安装路径 :若指定非默认路径(如
~/local/x265),需添加环境变量配置:bash# 临时生效(当前终端) export PKG_CONFIG_PATH=~/local/x265/lib/pkgconfig:$PKG_CONFIG_PATH # 永久生效(重启终端后仍有效) echo "export PKG_CONFIG_PATH=~/local/x265/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc source ~/.bashrc -
编译 10bit/12bit 版本 :x265 支持高比特深度编码,如需编译 10bit 版本,可在 CMake 配置时添加
-DHIGH_BIT_DEPTH=ON -DMAIN10=ON(12bit 对应-DMAIN12=ON)