You need to enable JavaScript to run this app.
文档中心
云服务器

云服务器

复制全文
下载 pdf
AIGC实践
基于g4i实例部署Intel iVTAL动态库提升FFmpeg解码、转码性能
复制全文
下载 pdf
基于g4i实例部署Intel iVTAL动态库提升FFmpeg解码、转码性能
本文主要介绍如何在ecs.g4i规格的实例中部署Intel iVTAL动态库,并安装支持Intel iVTAL库和OpenVINO优化的FFmpeg,提升FFmpeg解码、转码效率。​
功能特色​
本实践使用了火山引擎第4代云服务器通用型g4i,该规格实例采用火山引擎自研最新DPU架构并搭载了第六代英特尔® 至强® 可扩展处理器(Granite Rapids),结合新一代硬件AI加速指令AMX-BF16与AMX-FP16(Intel Advanced Matrix Extensions)优化,能很好的发挥iVTAL库优化FFmpeg进行流媒体处理的效果。​
背景信息​
FFmpeg​
FFmpeg是一款能够解码、编码、转码、复用(封装)、解复用、流式传输、过滤和播放几乎所有的音视频内容的多媒体框架。FFmpeg通常在流媒体处理链路中承担“积木”的角色,将其采集/拉流、解复用、解码等功能加上编排控制(转码任务编排、错误处理与重试)作为“积木”按需拼接,您就可以得到适用于直播转码、点播转码、ABR自适应码率打包、内容审核/特效滤镜及视频AI推理前处理等常见场景的流媒体处理功能。了解更多。​
典型处理流程包括:​
​​​
  • 输入与采集:从文件、HTTP(S)、RTMP/RTSP、SRT、WebRTC等拉取,或本地采集卡/摄像头读取。​
进入服务后,通常由libavformat进行协议处理与缓存。​
  • 解复用(Demux):将容器(MP4/FLV/TS等)拆成独立的音视频/数据流。​
该步骤多为I/O绑定,对CPU压力较小,但对内存带宽和拷贝次数敏感。​
  • 解码(Decode):将压缩码流(H.264/H.265/AV1/VP9等)还原为像素帧(YUV/RGB)。​
该步骤是计算密集阶段,且产生大量像素数据(几十到数百MB/s),会占用大量内存带宽。​
  • 预/后处理(Scale/Colorspace/Filters):缩放、裁剪、色彩空间变换、去噪、锐化、字幕/水印叠加、AI前处理。​
该步骤部分算子会受到内存带宽限制(例如缩放、colorspace),部分算子会受到算力限制(例如复杂滤镜、DNN)。​
  • 编码(Encode):将像素帧压缩回码流。​
该步骤在典型处理流程(例如运动估计、模式决策)中是计算密集阶段,同时会大量读/写内存。​
  • 复用(Mux)与输出:将数据打包到容器、写文件或推流(HLS/DASH分片、RTMP/SRT/WebRTC等)。​
该步骤多为I/O绑定,需注意避免过多的内存拷贝。​
  • 编排与控制:队列管理、失败重试、ABR多档并行、任务拆分与合并。​
iVTAL​
Intel Video Transcode Acceleration Library(iVTAL)针对FFmpeg引入运动信息复用(MV Reuse)与解码QP引导(JND Decode QP)等策略,通过在解码阶段收集运动/QP等帧级/宏块级信息,并将其以结构化元数据随帧一路下传到编码器,使编码端跳过部分最耗时的搜索与估计,达到降低 CPU、提高吞吐/降低时延的目的。​
​​​
操作步骤​
步骤一:准备环境​
说明​
考虑到在云服务器实例(ECS)中直接从公共仓库下载相关软件包速度较慢,火山引擎已将预先集成所需补丁(Patch)的x264、x265编码库及FFmpeg上传至TOS(对象存储)中,方便您快速下载使用。​
  1. 购买ecs.g4i规格实例。本节采用的实例配置如下:​
  • 实例规格:ecs.g4i.4xlarge​
  • 镜像:Ubuntu 22.04 64 bit​
  • 云盘:推荐云盘容量不低于 100 GiB​
  • 网络:分配弹性公网IP​
  1. 执行如下命令,安装依赖。​
  • ​
    apt update && apt install -y wget git make gcc g++ cmake pkg-config nasm build-essential numactl​
    ​
  1. 执行如下命令,配置环境变量并下载依赖库与测试视频。​
  • ​
    export IVTAL_INSTALL_DIR="/opt/ivtal"​
    export TOS_BASE_URL="https://diting-tos.tos-cn-beijing.volces.com/iVTAL"​
    ​
    mkdir -p $IVTAL_INSTALL_DIR​
    for f in "libcrypto.a" "libivtal.so" "license"; do​
    wget -P $IVTAL_INSTALL_DIR $TOS_BASE_URL/$f​
    done​
    ​
    wget $TOS_BASE_URL/Sony_4K_Camp.mp4​
    wget $TOS_BASE_URL/wall.mp4​
    ​
步骤二:编译视频编码库​
  1. 执行如下命令,下载并编译支持iVTAL优化的x264视频编码库。​
  • ​
    wget $TOS_BASE_URL/x264_ivtal.zip​
    unzip x264_ivtal.zip​
    cd x264​
    ./configure --enable-static --disable-avs --extra-ldflags="-L$IVTAL_INSTALL_DIR -livtal -lcrypto -lz -ldl -lpthread"​
    make -j$(nproc)​
    make install​
    cd ..​
    ​
  1. 执行如下命令,下载并编译支持iVTAL优化的x265视频编码库。​
  • ​
    wget $TOS_BASE_URL/x265_ivtal.zip​
    unzip x265_ivtal.zip​
    cd x265_git​
    mkdir -p build_x265​
    cd build_x265​
    cmake ../source/ -DCMAKE_BUILD_TYPE=Release -DENABLE_LIBNUMA=OFF -DENABLE_SHARED=ON -DEXTRA_LIB="-L$IVTAL_INSTALL_DIR -livtal -lcrypto -lz -ldl -lpthread"​
    make -j$(nproc)​
    make install​
    cd ../..​
    ​
步骤三:部署并验证转码功能​
  1. 执行如下命令,编译集成Intel iVTAL库优化的FFmpeg版本。​
  • ​
    wget $TOS_BASE_URL/ffmpeg_ivtal.zip​
    unzip ffmpeg_ivtal.zip​
    cd FFmpeg​
    ​
    export LD_LIBRARY_PATH=/usr/local/lib/​
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig​
    ​
    ./configure --enable-static --disable-debug --enable-libx264 --enable-libx265 --enable-gpl --extra-ldflags=-L$IVTAL_INSTALL_DIR --extra-libs="-lpthread" --pkg-config-flags="--static"​
    make -j$(nproc)​
    make install​
    cd ..​
    ​
  1. 验证视频转码功能是否可以正常使用。​
  1. 执行如下命令,通过环境变量设置系统动态库搜索路径。​
  • ​
    export LD_LIBRARY_PATH=/usr/local/lib/:$IVTAL_INSTALL_DIR​
    ​
  1. 执行如下命令,将测试视频Sony_4K_Camp.mp4转码为H.264(CRF=22)编码格式的out.mp4。​
  • ​
    input="Sony_4K_Camp.mp4" ​
    ffmpeg -y -i $input -c:v libx264 -mvreuse 2 -crf 22 -psnr out.mp4​
    ​
  • 回显如下所示时,表示已成功转码,您还可以通过ffprobe out.mp4命令查看转码后的视频码率、分辨率及编码方式等信息。​
  • ​​​
  1. 执行如下命令,将测试视频wall.mp4转码为H.265(CRF=28)编码格式的out.mp4,存放在当前目录下。​
  • ​
    input="wall.mp4" ​
    ffmpeg -y -i $input -c:v libx265 -mvreuse 2 -crf 28 -psnr out.mp4​
    ​
  • 回显如下所示时,表示已成功转码,您还可以通过ffprobe out.mp4命令查看转码后的视频码率、分辨率及编码方式等信息。​
  • ​​​
  1. 上述测试均通过时,表示可以正常进行视频转码。​
步骤四:部署并验证预处理功能​
  1. 安装OpenVINO。​
  1. 执行如下命令,下载并解压OpenVINO安装包。​
  • ​
    wget $TOS_BASE_URL/l_openvino_toolkit_ubuntu18_2023.2.0.13089.cfd42bd2cb0_x86_64.tgz && tar -xvf l_openvino_toolkit_ubuntu18_2023.2.0.13089.cfd42bd2cb0_x86_64.tgz​
    ​
  1. 执行如下命令,安装依赖。​
  • ​
    apt install -y libtbb2 libtbb2-dev libpugixml-dev​
    ​
  1. 执行如下命令,下载并解压ESPCN安装包。​
  • ​
    wget $TOS_BASE_URL/espcn.zip && unzip espcn.zip​
    ​
  1. 执行如下命令,编译并安装支持Intel iVTAL库和OpenVINO优化的FFmpeg版本。​
  • ​
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig​
    export LD_LIBRARY_PATH=/usr/local/lib/:$IVTAL_INSTALL_DIR​
    ​
    cd FFmpeg​
    source ../l_openvino_toolkit_ubuntu18_2023.2.0.13089.cfd42bd2cb0_x86_64/setupvars.sh​
    ./configure --enable-static --disable-debug --enable-libx264 --enable-libx265 --enable-gpl --extra-ldflags=-L/opt/ivtal/ --extra-libs="-lpthread" --pkg-config-flags="--static" --enable-libopenvino​
    ​
    make -j$(nproc)​
    make install​
    cd ..​
    ​
  1. 执行如下命令,验证结合iVTAL与OpenVINO实现“低分辨率缩放 + 深度学习超分”的视频预处理功能是否可以正常使用。​
  • ​
    input="Sony_4K_Camp.mp4" ​
    ffmpeg -i $input -vf scale=960:540,format=yuv420p,dnn_processing=dnn_backend=openvino:model=espcn/ESPCN_x2.xml:input="input":output="output":backend_configs="layout=nchw&device=CPU" -c:v libx264 -x264opts bitrate=8000 -psnr -y espcn.mp4​
    ​
  • 回显如下所示时,表示已成功进行视频预处理,您还可以通过ffprobe espcn.mp4命令查看预处理后的视频码率、分辨率及编码方式等信息。​
  • ​​​
步骤五:部署并验证解码抽帧功能​
  1. 执行如下命令,下载并安装视频解码抽帧功能。​
  • ​
    wget $TOS_BASE_URL/ivtalDecoder.zip​
    unzip ivtalDecoder.zip​
    chmod +x ./ivtalDecoder/ivtalDecoder​
    ​
  1. 执行如下命令,验证视频解码抽帧功能是否可以正常使用。​
  • ​
    fi=1​
    input="Sony_4K_Camp.mp4" ​
    time -p numactl -C 0 ./ivtalDecoder/ivtalDecoder -mode 0 -fi $fi -fmt yuv420p $input movie-ivtal.yuv​
    ​
  • 回显如下所示时,表示已成功进行视频解码抽帧。​
  • ​​​
优化对比​
性能数据​
本节展示了在ecs.g4i.4xlarge规格实例中,通过Intel iVTAL动态库加速FFmpeg解码抽帧、转码前后性能数据。​
​
解码抽帧
转码
​
下表展示了将测试进程限制在单个CPU核心上运行时,FFmpeg对H.264编码的视频进行解码抽帧操作时,启用Intel iVTAL动态库加速前后在不同抽帧间隔下抽取1帧图像的耗时(秒)。​
​
抽帧间隔​
H.264编码视频​
​
​
加速前​
加速后​
1​
72.52​
32.1​
100​
26.86​
20.22​
400​
26.65​
7.98​
​
​
​
测试结论​
开启Intel iVTAL动态库加速后,解码抽帧操作最高可获得约 70% 的性能提升;转码操作最高可获得约 53% 的性能提升。同时,Intel提供的新一代硬件AI加速指令AMX可以大幅提升图像超分辨率(SR)预处理流程的性能,使您的SR模型能够在更广泛的设备上高效运行。​
因此,在追求性价比、丰富实例资源场景下,推荐您使用搭载第六代英特尔® 至强® 可扩展处理器(Granite Rapids)的实例规格(例如通用型g4i)代替GPU实例,通过Intel iVTAL动态库与系统级加速方案,获取最优性价比的视频数据处理服务。​
最近更新时间:2025.12.17 14:26:54
这个页面对您有帮助吗?
有用
有用
无用
无用