Video Codec

Video Codec

Ascend和Lambda集群上视频编解码后端的配置,还得是build from source :)

FFmpeg

Lambda

集群上默认连接到头节点,无sudo权限,无GPU,有nvcccuda环境。自带的ffmpeg不支持NV硬件编解码器,因此需要手动编译且安装到用户目录下。

  1. 设置环境变量
1
2
3
4
5
# 统一管理源码和安装位置
mkdir -p $HOME/src $HOME/local
export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig:$PKG_CONFIG_PATH

于是后续的所有包都会被安装在~/local下。

  1. 编译工具

检查编译工具:

1
which gcc g++ make yasm cmake libtool wget unzip

编译不能使用全部线程(make -j$(nproc)),否则在头节点CPU占用过高会被Lambda踢出。

如果缺少cmake

1
2
3
4
5
6
7
cd $HOME/src
wget https://github.com/Kitware/CMake/releases/download/v3.30.0/cmake-3.30.0.tar.gz
tar xzf cmake-3.30.0.tar.gz
cd cmake-3.30.0
./bootstrap --prefix=$HOME/local
make -j4
make install

如果缺少yasm

1
2
3
4
5
6
7
cd $HOME/src
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix=$HOME/local
make -j4
make install

如果缺少libtool

1
2
3
4
5
6
7
cd $HOME/src
wget https://ftpmirror.gnu.org/libtool/libtool-2.4.7.tar.gz
tar xzf libtool-2.4.7.tar.gz
cd libtool-2.4.7
./configure --prefix=$HOME/local
make -j4
make install
  1. 安装依赖

安装numactl

1
2
3
4
5
6
7
8
# numactl
cd $HOME/src
git clone https://github.com/numactl/numactl.git
cd numactl
./autogen.sh
./configure --prefix=$HOME/local
make -j4
make install

安装nv-codec-headers

NV硬件编解码器的支持

1
2
3
4
5
# nv-codec-headers
cd $HOME/src
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make PREFIX=$HOME/local install

安装nasm

编译优化,不安装会报错nasm not found or too old或降低CPU解码性能

1
2
3
4
5
6
7
8
cd $HOME/src
wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.gz
tar xzf nasm-2.16.03.tar.gz
cd nasm-2.16.03
./configure --prefix=$HOME/local
make -j4
make install
export PATH=$HOME/local/bin:$PATH
  1. 编译FFmpeg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd $HOME/src
git clone https://github.com/FFmpeg/FFmpeg.git
git checkout n6.1.3
cd FFmpeg

# 默认应该存在
# CUDA_DIR=/cm/shared/apps/cuda12.8

./configure \
--prefix=$HOME/local \
--enable-nonfree \
--enable-cuda-nvcc \
--enable-libnpp \
--extra-cflags="-fPIC -I$CUDA_DIR/include -I$HOME/local/include" \
--extra-ldflags="-L$CUDA_DIR/lib64 -L$HOME/local/lib" \
--disable-static \
--enable-shared

make -j4
make install

# 验证安装成功
$HOME/local/bin/ffmpeg -encoders | grep nvenc

此处configure参考NVIDIA官方文档:Using FFmpeg with NVIDIA GPU Hardware Acceleration

2025-09

  • 安装6.1.3是为了满足TorchCodec的依赖(4.0~7.0),但由于对7.0有兼容性问题因此只能安装6.0;
  • Decord仅支持4.x的ffmpeg,如果要同时使用Decord和TorchCodec需安装4.0发行版(比如n4.3.9)。

Ascend

有sudo权限,直接apt或者conda安装即可。

Decord

Lambda

直接pip安装。

Ascend

无aarch64的包,需要编译安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 确保有ffmpeg 4.x
ffmpeg -version

sudo apt-get update
sudo apt-get install -y build-essential python3-dev python3-setuptools make cmake
sudo apt-get install -y libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev

git clone --recursive https://github.com/dmlc/decord
cd decord
mkdir build && cd build
cmake .. -DUSE_CUDA=0 -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

# 安装
cd ../python
python setup.py install

# 验证
python -c "import decord"

如果报错:OSError: /root/miniconda3/envs/dl_test/bin/../lib/libstdc++.so.6: version 'GLIBCXX_3.4.30' not found,可以尝试使用系统自带的GLIBCXX:

1
export LD_LIBRARY_PATH=/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

在conda环境中系统库的路径可能会被conda覆盖,直接在conda安装更新版本的即可:

1
conda install -c conda-forge "libstdcxx-ng>=13"

TorchCodec

Lambda

确保有FFmpeg后,按照官方文档安装:

1
2
# 和Pytorch一致的安装方式
pip install torchcodec --index-url=https://download.pytorch.org/whl/cu126

Ascend

aarch64下直接pip install得到的是占位的空包,需要编译安装:

1
2
3
4
5
6
7
git clone https://github.com/pytorch/torchcodec.git

# 切换发行版本
git checkout release/0.5
python setup.py install

python -c "import torchcodec"

注意和torch版本的匹配:

torchcodec torch Python
main / nightly main / nightly >=3.10, <=3.13
0.6 2.8 >=3.9, <=3.13
0.5 2.7 >=3.9, <=3.13
0.4 2.7 >=3.9, <=3.13
0.3 2.7 >=3.9, <=3.13
0.2 2.6 >=3.9, <=3.13
0.1 2.5 >=3.9, <=3.12
0.0.3 2.4 >=3.8, <=3.12

qwen-vl-utils

千问官方的视频处理组件,好处是可以解析messages并按指定单帧像素、总像素读取视频,并支持多种后端。调用优先级应该是:

1
TorchCodec->Decord->Torchvision
Author

Byter

Posted on

2025-09-02

Licensed under