从源码编译GPU加速版FFmpeg:NVIDIA NVENC/NVDEC环境配置与实战指南 1. 项目概述为什么需要GPU版本的FFmpeg在视频处理的世界里FFmpeg是当之无愧的“瑞士军刀”。无论是转码、剪辑、流媒体还是滤镜处理它几乎无所不能。然而随着视频分辨率从1080p跃升至4K、8K甚至更高以及H.265/HEVC、AV1等高效但计算密集的编码格式普及单纯依赖CPU进行视频处理变得越来越吃力。一个小时的4K H.265视频转码在高端CPU上也可能需要数十分钟这严重制约了内容生产、媒体分发的效率。这时GPU加速就成了破局的关键。现代显卡GPU拥有数千个计算核心专为大规模并行计算设计在处理视频编解码这类高度并行的任务时效率远超CPU。一个支持GPU硬编码/解码的FFmpeg能将上述转码任务从几十分钟缩短到几分钟效率提升是数量级的。这不仅仅是“快一点”而是工作流能否顺畅进行的本质区别。对于需要批量处理视频的自媒体创作者、搭建流媒体服务器的工程师、进行视频AI分析的研究者或者任何对视频处理速度有要求的开发者编译一个GPU版本的FFmpeg是从“能用”到“高效好用”的必经之路。然而FFmpeg官方预编译的二进制包通常只包含最基础的CPU解码器和一些软件编码器要启用GPU加速功能我们必须从源代码开始手动编译并链接上对应厂商NVIDIA、AMD、Intel的硬件编解码SDK。这个过程就像给一辆家用车装上赛车引擎需要精准的调校和正确的“零部件”。接下来我将带你完整走一遍从环境准备、编译配置到实战使用的全过程分享我踩过的坑和总结出的最佳实践。2. 编译环境深度准备与依赖解析编译GPU版的FFmpeg环境是地基。地基不稳后续所有步骤都可能崩塌。这里我们以最主流的Ubuntu 22.04 LTS系统搭配NVIDIA GPU为例进行说明因为NVIDIA的NVENC/NVDEC生态目前最为成熟。其他系统或显卡如Intel QSV AMD AMF思路类似但依赖库不同。2.1 系统基础与驱动安装首先确保你的系统是干净的或者已更新到最新状态。打开终端执行以下命令更新软件包列表并升级现有软件sudo apt update sudo apt upgrade -y接下来是重头戏NVIDIA驱动。没有正确的驱动GPU就是一块砖。这里我强烈推荐使用系统仓库或NVIDIA官方PPA安装而不是从.run文件安装前者与系统集成更好管理更方便。方法一使用Ubuntu附加驱动推荐给新手打开“软件和更新”应用切换到“附加驱动”标签页系统会自动检测你的显卡并列出可用的驱动版本。选择一个带有“proprietary, tested”字样的推荐驱动例如nvidia-driver-535点击应用更改重启即可。方法二使用PPA安装最新驱动推荐给追求新特性的用户# 添加Graphics Drivers PPA sudo add-apt-repository ppa:graphics-drivers/ppa -y sudo apt update # 安装驱动。请将535替换为你的显卡支持的合适版本号。 # 可以通过 ubuntu-drivers devices 命令查看推荐版本。 sudo apt install nvidia-driver-535 -y安装完成后务必重启系统。重启后在终端输入nvidia-smi。如果能看到显卡信息、驱动版本和CUDA版本如果安装了CUDA Toolkit说明驱动安装成功。这是通往GPU编译世界的第一张通行证。注意驱动版本与后续要安装的CUDA Toolkit版本存在兼容性要求。NVIDIA官网有详细的兼容性表格。一般来说选择经过长期测试的稳定版驱动如525 535比追最新版更稳妥可以避免很多奇怪的兼容性问题。2.2 CUDA Toolkit与NVENC SDK安装FFmpeg要调用NVIDIA GPU进行编解码需要两个关键的开发库CUDA Toolkit和NVIDIA Video Codec SDK。CUDA Toolkit这是NVIDIA的通用并行计算平台。虽然FFmpeg的GPU编解码不一定直接使用CUDA进行核心计算主要用NVENC/NVDEC专用硬件单元但很多编译脚本和依赖检测会用到CUDA的头文件和库路径。你可以从NVIDIA官网下载runfile或deb包安装但我更推荐使用网络仓库安装便于管理# 首先根据你的系统架构和Ubuntu版本从NVIDIA官网获取正确的仓库配置命令。 # 例如对于x86_64架构的Ubuntu 22.04命令可能如下请以官网最新为准 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update # 安装CUDA Toolkit。这里安装的是完整工具包版本号如12-4请根据需求选择。 sudo apt install cuda-toolkit-12-4 -y安装后将CUDA路径加入环境变量通常编辑~/.bashrc文件在末尾添加export PATH/usr/local/cuda/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/cuda/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}}执行source ~/.bashrc使生效然后运行nvcc --version验证安装。NVIDIA Video Codec SDK这才是GPU编解码的“灵魂”。它包含了访问NVENC编码器和NVDEC解码器硬件单元所需的头文件和样例。这个SDK没有包管理器安装方式必须从NVIDIA开发者网站手动下载。访问 NVIDIA Developer 网站搜索 “Video Codec SDK”。下载最新版本的SDK例如Video_Codec_SDK_12.x.x.x.zip。将其解压到一个你喜欢的路径例如/usr/local/nvidia_video_sdk。sudo unzip Video_Codec_SDK_12.x.x.x.zip -d /usr/local/ sudo mv /usr/local/Video_Codec_SDK_12.x.x.x /usr/local/nvidia_video_sdk记住这个路径在编译FFmpeg配置时至关重要。2.3 其他编译依赖安装FFmpeg本身功能庞大除了GPU支持我们可能还需要一些常用的编解码器和封装格式支持。安装以下开发包可以满足大多数场景sudo apt install build-essential git autoconf automake libtool pkg-config \ nasm yasm cmake libx264-dev libx265-dev libvpx-dev libmp3lame-dev \ libopus-dev libvorbis-dev libfdk-aac-dev libass-dev libfreetype6-dev \ libsdl2-dev libva-dev libvdpau-dev texinfo zlib1g-dev -y这里简单解释几个关键包nasm/yasm汇编编译器用于编译x264/x265等编码器的汇编优化代码对性能提升巨大。libx264-dev/libx265-dev最流行的开源H.264和H.265软件编码器。即使我们主要用GPU编码保留它们作为备选或用于某些GPU不支持的场景如某些CRF模式也是必要的。libfdk-aac-dev高质量的AAC音频编码器。libass-dev字幕渲染支持。3. 源码获取与编译配置详解环境就绪现在开始动手编译。编译的核心在于configure脚本它决定了FFmpeg最终包含哪些功能。3.1 获取FFmpeg源码建议使用git克隆官方源码仓库这样可以获取到最新的开发进度和修复。选择一个干净的目录进行操作git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg_gpu cd ffmpeg_gpu # 切换到最新的稳定分支例如 n6.1 避免使用可能不稳定的master分支。 git checkout release/6.13.2 配置脚本configure参数精讲这是整个编译过程中最核心、最容易出错的一步。一个典型的、功能较全的、启用NVIDIA GPU加速的配置命令如下./configure \ --prefix/usr/local/ffmpeg_gpu \ # 安装路径避免污染系统目录 --enable-nonfree \ # 启用非自由许可的组件如fdk-aac --enable-gpl \ # 启用GPL许可的组件如x264 --enable-version3 \ # 启用LGPL v3许可 --enable-libnpp \ # 启用NVIDIA Performance Primitives库用于GPU缩放等后处理 --extra-cflags-I/usr/local/nvidia_video_sdk/include -I/usr/local/cuda/include \ # 额外头文件路径 --extra-ldflags-L/usr/local/nvidia_video_sdk/lib/linux/stubs/x86_64 -L/usr/local/cuda/lib64 \ # 额外库路径 --enable-shared \ # 生成动态链接库.so文件 --enable-static \ # 同时生成静态链接库.a文件 --enable-cuda-nvcc \ # 启用CUDA编译支持某些滤镜需要 --enable-libx264 \ # 启用x264编码器 --enable-libx265 \ # 启用x265编码器 --enable-libvpx \ # 启用VP8/VP9编码器 --enable-libmp3lame \ # 启用MP3编码器 --enable-libfdk-aac \ # 启用FDK-AAC编码器 --enable-libopus \ # 启用Opus编码器 --enable-libvorbis \ # 启用Vorbis编码器 --enable-libass \ # 启用字幕渲染 --enable-ffplay \ # 编译ffplay播放器 --enable-ffprobe \ # 编译ffprobe分析工具 --enable-libfreetype \ # 支持字体加载用于drawtext滤镜等 --disable-doc \ # 禁用文档编译加快速度 --enable-cuvid \ # 启用NVIDIA CUVID解码器旧版API已过渡到NVDEC --enable-nvenc \ # 启用NVENC硬件编码器 --enable-nvdec \ # 启用NVDEC硬件解码器 --enable-decoderh264_cuvid \ # 启用特定解码器 --enable-decoderhevc_cuvid \ --enable-encoderh264_nvenc \ # 启用特定编码器 --enable-encoderhevc_nvenc \ --enable-filterscale_npp \ # 启用GPU缩放滤镜 --enable-filterhwupload_cuda \ # 启用上传数据到GPU的滤镜 --enable-filterhwdownload_cuda # 启用从GPU下载数据的滤镜关键参数解析与避坑指南--extra-cflags和--extra-ldflags这是链接NVIDIA SDK的关键。-I指定头文件目录必须指向你解压的Video Codec SDK的include文件夹。-L指定库文件目录。注意SDK的lib目录下通常有linux/stubs/x86_64子目录里面存放着关键的libnvcuvid.so和libnvidia-encode.so等stub库。常见错误就是路径指错导致configure报错找不到nvEncodeAPI.h等头文件。--enable-libnppNPP库提供了一系列GPU加速的图像处理函数。FFmpeg的scale_npp滤镜用它来做高效的GPU端图像缩放和色彩空间转换在GPU处理流水线中非常重要。--enable-cuda-nvcc如果你计划使用基于CUDA的自定义滤镜比如一些AI超分滤镜需要打开这个选项。它会调用nvcc编译器来编译CUDA代码。NVENC/NVDEC相关参数--enable-nvenc和--enable-nvdec是总开关。但为了更精确的控制我们通常还会用--enable-encoderh264_nvenc这样的形式来单独启用某个编码器。一个重要的细节FFmpeg中h264_nvenc和hevc_nvenc是编码器名称而解码器方面较新的FFmpeg版本使用h264_cuvid、hevc_cuvid等它们背后实际调用的是NVDEC硬件。--enable-cuvid是一个较老的抽象层现在通常也需要启用以确保兼容性。硬件加速滤镜链scale_npp、hwupload_cuda、hwdownload_cuda这几个滤镜构成了GPU处理的基础链路。hwupload_cuda负责将系统内存中的帧上传到GPU显存scale_npp在GPU上执行缩放hwdownload_cuda将处理后的帧从显存下载回系统内存。理解这个数据流对编写高效的GPU滤镜图至关重要。执行./configure命令后仔细查看输出。确保在 “External libraries” 和 “Hardware acceleration” 部分能看到cuda,nvenc,nvdec,cuvid,npp等字样显示为yes。如果有no请根据错误信息检查对应的依赖库路径是否正确安装。4. 编译、安装与验证配置成功后编译和安装就是标准流程了。利用多核处理器可以显著加快编译速度# 使用 make -j$(nproc) 启动与CPU核心数相同的编译任务最大化利用资源。 make -j$(nproc) # 编译完成后安装到之前 --prefix 指定的目录 sudo make install安装完成后为了能在任意终端使用我们编译的FFmpeg需要将其添加到系统PATH中。编辑~/.bashrc或~/.profile文件添加export PATH/usr/local/ffmpeg_gpu/bin:$PATH export LD_LIBRARY_PATH/usr/local/ffmpeg_gpu/lib:$LD_LIBRARY_PATH执行source ~/.bashrc。然后运行ffmpeg -version进行验证。验证编译成果的关键命令# 查看FFmpeg版本和编译配置摘要 ffmpeg -version # 重点查看编码器列表确认 h264_nvenc 和 hevc_nvenc 存在 ffmpeg -encoders | grep nvenc # 重点查看解码器列表确认 h264_cuvid 和 hevc_cuvid 存在 ffmpeg -decoders | grep cuvid # 查看硬件加速设备在较新版本中 ffmpeg -hwaccels # 应该能看到 cuda, cuvid, nvdec 等。 # 查看特定编码器的详细参数和支持的像素格式这对后续使用很重要 ffmpeg -h encoderh264_nvenc如果这些命令都能正确返回信息恭喜你一个功能强大的GPU版FFmpeg已经就绪。5. GPU加速FFmpeg实战应用指南编译成功只是开始如何用好才是关键。下面通过几个典型场景展示GPU版FFmpeg的强大威力。5.1 基础转码极速H.264/H.265编码最基本的用法将任意输入视频如MP4转码为使用GPU编码的H.264或H.265视频。# 使用 h264_nvenc 编码器预设为慢速slow以获得更好压缩率恒定质量模式CQP设为23。 ffmpeg -i input.mp4 -c:v h264_nvenc -preset slow -qp 23 -c:a aac output_gpu.mp4 # 使用 hevc_nvenc 编码器预设为中等medium开启两遍编码multipass以优化质量目标码率8Mbps。 ffmpeg -i input.mkv -c:v hevc_nvenc -preset medium -b:v 8M -multipass 1 -c:a copy output_hevc_gpu.mkv参数详解与心得-presetNVENC编码器预设从p1(最快) 到p7(最慢质量最好)也可以用slow,medium,fast等别名。越慢的预设编码器会花更多时间寻找更优的压缩决策在相同码率下获得更好的画质。对于不追求极限速度的场景建议从slow或medium开始。-qp(Constant QP)恒定量化参数。值越小质量越高文件越大。23是一个在质量和体积间取得良好平衡的常用值。注意CQP模式可能与某些硬件限制不兼容。-b:v(Average Bitrate)平均目标码率。适合对流媒体文件大小有精确要求的场景。-rc(Rate Control)更高级的码率控制模式。-rc vbr可变码率、-rc cbr恒定码率、-rc vbr_minqp等。h264_nvenc默认可能是vbr。使用-rc cbr时需配合-b:v和-maxrate、-bufsize。-c:a copy音频流直接复制不重新编码极大节省时间。实测对比对一个4K H.264源文件进行1080p转码CPUlibx264medium耗时约180秒而GPUh264_nvenc slow仅耗时约25秒速度提升超过7倍且画质主观差异极小。5.2 构建GPU处理滤镜链单纯的编解码只是利用了GPU的一部分能力。更强大的用法是构建完整的GPU端处理流水线避免在系统内存和显存之间来回拷贝数据这是性能最高的方式。场景将视频缩放至720p并添加一个文字水印全程在GPU上完成。ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \ -vf hwupload_cuda,scale_npp1280:720:formatyuv420p,drawtexttextMy Watermark:fontfile/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:fontsize24:fontcolorwhite:x10:y10,hwdownload_cuda,formatnv12 \ -c:v h264_nvenc -preset p6 -b:v 3M -c:a aac output_gpu_filter.mp4命令拆解与深度解析-hwaccel cuda -hwaccel_output_format cuda这两个参数是GPU流水线的起点。-hwaccel cuda指定使用CUDA进行硬件加速解码如果输入格式支持。-hwaccel_output_format cuda是关键它告诉解码器解码后的帧数据直接保留在CUDA即GPU显存中而不是下载到系统内存。这为后续的GPU滤镜处理创造了条件。滤镜链-vf ...hwupload_cuda虽然解码输出已经在显存但经过一些复杂的封装格式或特定解码器后数据可能仍在系统内存。加上这个滤镜确保数据上传到显存。如果解码输出已确定是CUDA帧这个滤镜可能什么都不做但加上它是安全的。scale_npp1280:720:formatyuv420p在GPU上使用NPP库进行缩放并指定输出像素格式为yuv420p最通用的格式。缩放操作在GPU上并行完成速度极快。drawtext...注意drawtext滤镜是一个软件滤镜它无法在GPU上运行。当GPU流水线遇到它时FFmpeg会自动将帧数据从显存hwdownload下载到系统内存执行完文字绘制后再重新上传hwupload到显存。这个过程会产生一次PCIe总线传输开销。对于复杂的、多个软件滤镜串联的场景这个开销可能抵消部分GPU加速的收益。因此理想情况下应尽量减少GPU流水线中软件滤镜的数量。hwdownload_cuda,formatnv12处理完成后将帧数据从显存下载到系统内存并转换为NV12格式许多编码器期望的输入格式。因为最终的h264_nvenc编码器虽然运行在GPU上但它通常期望从系统内存接收数据通过DMA或驱动上传。这个“下载-编码”过程内部可能由驱动优化。核心心得构建GPU滤镜链的精髓在于“尽可能长时间地将数据留在显存中”。要仔细规划滤镜顺序把能在GPU上执行的滤镜如scale_npp,hwupload,hwdownload放在一起把必须的软件滤镜集中处理避免数据在PCIe总线上来回穿梭。5.3 多路流处理与硬件解码器选择在处理监控录像、直播流转码等涉及多路流的场景时正确选择解码器能极大减轻CPU负担。# 使用 hevc_cuvid 硬件解码器解码输入流然后用 h264_nvenc 编码输出。 ffmpeg -c:v hevc_cuvid -i input.hevc.mp4 -c:v h264_nvenc -preset fast -c:a copy output.h264.mp4 # 处理一个RTSP流使用 h264_cuvid 解码并指定输出尺寸和码率。 ffmpeg -c:v h264_cuvid -rtsp_transport tcp -i rtsp://camera-stream -c:v h264_nvenc -preset p4 -s 1280x720 -b:v 2M -f flv rtmp://live-server/app/stream重要提示使用-c:v hevc_cuvid指定解码器时FFmpeg会尝试使用NVDEC硬件来解码HEVC流。如果输入流不是HEVC或者显卡不支持该格式的硬解命令会失败。你可以先使用ffmpeg -decoders | grep cuvid查看你的GPU支持哪些硬解格式。常见的支持格式有h264_cuvid,hevc_cuvid,mjpeg_cuvid,mpeg2_cuvid,vp8_cuvid,vp9_cuvid等。6. 性能调优、常见问题与深度排错即使一切配置正确要榨干GPU的每一分性能还需要一些调优技巧。同时这里汇总了编译和使用过程中最常见的“坑”。6.1 编码器参数调优指南运行ffmpeg -h encoderh264_nvenc可以查看该编码器支持的所有私有参数。这里列举几个最有用的-rc-lookahead设置前瞻的帧数用于提高VBR模式下的质量。值越大编码器对未来帧的预判越准质量越好但延迟和内存占用也越高。范围通常0-32。直播场景设小如0文件压制可以设大如20-32。-surfaces编码器内部用于缓冲的帧表面数。增加此值可以提升并行度尤其在配合-async_depth使用时有助于提高GPU利用率。默认值可能较低对于高帧率视频可以尝试增加到40或60。-temporal-aq时域自适应量化在动态场景中能更好地分配码率提升主观质量。启用设为1通常有好处。-spatial-aq空域自适应量化在纹理复杂的区域优化质量。也可以考虑启用。-cq与-qp类似但用于VBR模式下作为质量目标。当-rc vbr时-cq的值影响质量码率会浮动。-multipass多遍编码。-multipass full两遍编码会在第一遍分析整个视频第二遍编码从而在给定码率下获得最佳质量但耗时翻倍。-multipass qres是单遍但基于预分析的模式是质量和速度的折中。一个调优后的高质量压制示例ffmpeg -i input.mov -c:v hevc_nvenc -preset p7 -rc vbr -cq 24 -qmin 0 -qmax 30 -b:v 0 \ -rc-lookahead 32 -spatial-aq 1 -temporal-aq 1 -surfaces 64 \ -c:a libopus output_high_quality.mkv这个命令使用了最慢的预设p7VBR模式以CQ24为目标质量开启了空域和时域AQ并增加了lookahead和surfaces适用于对画质要求极高的离线压制。6.2 编译与运行常见问题排查问题1configure时报错ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec原因与解决这是最常见的问题之一。ffnvcodec是FFmpeg用于与NVENC/NVDEC交互的头部封装库。它通常包含在NVIDIA Video Codec SDK中但configure脚本可能找不到。确保--extra-cflags正确包含了SDK的include路径。SDK的include路径下存在ffnvcodec子目录并且里面有nvEncodeAPI.h,nvEncodeAPI.h等文件。如果没有你可能需要单独克隆https://git.videolan.org/git/ffmpeg/nv-codec-headers.git这个仓库并将其路径也加入--extra-cflags。问题2运行时错误[h264_nvenc 0x...] Cannot load libnvidia-encode.so.1原因与解决动态链接器找不到NVIDIA的编码库。这通常是因为libnvidia-encode.so.1位于非标准路径如/usr/lib/nvidia。解决方法是将其所在目录加入LD_LIBRARY_PATH或者创建一个符号链接到标准库目录# 查找文件 sudo find /usr -name libnvidia-encode.so* # 假设找到路径是 /usr/lib/nvidia-535/libnvidia-encode.so.1 # 将其添加到LD_LIBRARY_PATH或创建符号链接 sudo ln -s /usr/lib/nvidia-535/libnvidia-encode.so.1 /usr/local/ffmpeg_gpu/lib/更一劳永逸的方法是在编译FFmpeg的--extra-ldflags中除了SDK的stubs路径也加上驱动库的路径例如-L/usr/lib/nvidia-535。问题3编码时提示[h264_nvenc 0x...] No capable devices found或InitializeEncoder failed: out of memory (10)原因与解决驱动问题首先确认nvidia-smi能正常显示显卡信息并且驱动版本与CUDA、Video SDK兼容。权限问题在某些系统尤其是容器内访问GPU设备可能需要特权。尝试用sudo运行ffmpeg测试。显存不足这是最可能的原因。NVENC编码器需要占用显存。如果GPU显存被其他程序如桌面环境、游戏、另一个FFmpeg进程占用过多可能导致初始化失败。关闭不必要的图形界面程序或使用nvidia-smi查看显存占用并结束相关进程。并发会话数超限NVIDIA消费级显卡GeForce系列对同时进行的NVENC编码会话数有软限制通常3个。专业卡Quadro/Tesla则无此限制或限制更高。如果你需要同时编码非常多路流可能需要使用专业卡或者寻找修改版驱动不推荐有风险。问题4使用GPU滤镜链时drawtext等软件滤镜导致速度变慢甚至比纯CPU还慢。原因与解决正如5.2节所述软件滤镜迫使数据在PCIe总线上传输。对于高分辨率、高帧率视频这个带宽开销是巨大的。解决方案预处理或后处理如果水印、LOGO是固定的可以考虑先用CPU滤镜生成一个带透明通道的水印视频然后用GPU的overlay_cuda滤镜如果支持在GPU上合成。寻找GPU替代滤镜社区可能有一些基于CUDA或OpenCL实现的第三方滤镜可以替代drawtext。接受混合方案如果必须使用软件滤镜尝试将多个软件滤镜操作合并到一步中减少数据往返次数。或者对于实时性要求不高的任务纯CPU处理可能更简单稳定。问题5编码输出文件体积异常大或画质很差。原因与解决这通常是码率控制参数设置不当。检查-qp或-b:v值-qp值设得太小如10会导致文件巨大-b:v码率设得太低会导致画质差。理解预设preset越快的预设如p1编码器优化时间越少在相同码率下画质越差。在允许的时间内尽量使用更慢的预设。尝试启用AQ-spatial-aq 1 -temporal-aq 1通常能改善复杂场景和运动场景的观感。进行对比测试用同一段复杂视频快速运动、细节丰富分别用CPU编码器libx264和GPU编码器h264_nvenc在主观画质接近的情况下对比它们的码率和编码时间找到适合你质量要求的GPU参数组合。编译和优化GPU版FFmpeg是一个不断探索和权衡的过程。没有一套参数能通吃所有场景关键是根据你的具体需求——是追求极限速度、最佳画质还是平衡两者——来调整你的配置和命令参数。从稳定的基础配置开始逐步尝试高级参数并做好测试记录你就能逐渐驾驭这把GPU加速的视频处理利器。