README.md

Lerobot 视频解码后端性能对比

目录

简介

项目介绍

本项目用于对比三种视频解码后端在 LeRobot 框架下的性能表现,支持以下解码后端:

后端 说明 硬件平台
TorchCodec Meta 开源 GPU 视频解码库,支持缓存加速 CPU
PyAV 基于 FFmpeg 的 Python 绑定 CPU
DVPP 基于昇腾 CANN 的硬件解码加速 NPU

支持两种解码模式:

模式 说明
抽帧解码 按指定时间戳提取若干关键帧
全量解码 解码视频的每一帧,测试完整视频加载性能

代码结构

video_decoder/
├── video_backend.py           # 性能对比主入口(一键对比三种后端)
├── torchcodec_decoder.py      # TorchCodec 解码器独立脚本
├── pyav_decoder.py            # PyAV 解码器独立脚本
├── npu_decoder.py             # DVPP 解码器独立脚本
└── readme.md                  # 本说明文档
  • 参考实现:

    url=https://github.com/meta-pytorch/torchcodec
    commit_id=v0.5.0
    
    url=https://github.com/huggingface/lerobot
    commit_id=b954337ac7c8db5ea592c0d59dfb435845d9d380
    

准备环境

安装昇腾环境

请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境。本仓已支持表1中软件版本。

表 1 昇腾软件版本支持表

软件类型 支持版本
CANN 9.0.0
FrameworkPTAdapter 26.1.0
torch_npu 2.7.1

安装依赖环境

当前项目支持的 PyTorch 版本和已知三方库依赖如下表所示。

表 2 版本支持表

三方库 支持版本
PyTorch 2.7.1
TorchCodec v0.5.0
PyAV / FFmpeg 10.0.0 / 4.4.2
LeRobot v3.0

安装 Conda 环境

conda create -n vdecode python=3.11
conda activate vdecode
cd DrivingSDK/mx_driving/dataset/video_decoder

安装 TorchCodec

安装 pybind11 和 ffmpeg:

conda install -c conda-forge pybind11
conda install -c conda-forge ffmpeg=4.4.2
export PKG_CONFIG_PATH=$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH

安装 TorchCodec:

git clone https://github.com/meta-pytorch/torchcodec.git
cd torchcodec
git checkout v0.5.0
pip install -e . --no-build-isolation
cd ..

安装 PyAV

PyAV 作为 LeRobot 的默认视频读取后端,随 LeRobot 安装时自动依赖。

安装 DVPP 后端

DVPP 解码依赖昇腾 CANN 环境变量及 torchvision_npu 插件。

# 下载 Torchvision Adapter 代码,进入插件根目录
git clone https://gitcode.com/ascend/vision.git vision_npu
cd vision_npu
# 安装依赖库
pip3 install -r requirement.txt
# 编包
python setup.py bdist_wheel
# 安装 torchvision_npu
cd dist
pip install torchvision_npu-*.whl
cd ../..

安装 LeRobot

git clone https://github.com/huggingface/lerobot.git
cd lerobot
git checkout b954337ac7c8db5ea592c0d59dfb435845d9d380
cp ../video_utils.py src/lerobot/datasets/video_utils.py
pip install -e .
cd ..

下载数据

下载koch_test数据集,将数据集中视频(koch_test/videos/observation.images.laptop/chunk-000.mp4)的绝对路径记作 /path/to/video.mp4

快速开始

单后端解码

每个解码后端提供独立的 Python 脚本,支持三种运行模式:

模式 参数 说明
单次解码 --timestamps 0.0 0.5 1.0 单次解码指定时间戳的帧
抽帧性能测试 --test 多次迭代测试抽帧解码性能
全量解码测试 --full_decode 多次迭代测试全量解码性能

TorchCodec 解码器

# 单次解码
python torchcodec_decoder.py --video_path /path/to/video.mp4 --timestamps 0.0 0.5 1.0

# 抽帧性能测试(支持缓存开关)
python torchcodec_decoder.py --video_path /path/to/video.mp4 --test --num_iterations 100
python torchcodec_decoder.py --video_path /path/to/video.mp4 --test --no_cache

# 全量解码测试
python torchcodec_decoder.py --video_path /path/to/video.mp4 --full_decode --num_iterations 5

脚本参数说明:

--video_path          //视频文件路径
--timestamps          //要解码的时间戳列表(秒)
--tolerance_s         //时间容差(秒),默认 1e-4
--num_iterations      //性能测试迭代次数,默认 100
--no_cache            //关闭 TorchCodec 解码器缓存
--test                //运行抽帧性能测试模式
--full_decode         //运行全量解码测试模式

PyAV 解码器

# 单次解码
python pyav_decoder.py --video_path /path/to/video.mp4 --timestamps 0.0 0.5 1.0

# 抽帧性能测试
python pyav_decoder.py --video_path /path/to/video.mp4 --test --num_iterations 100

# 全量解码测试
python pyav_decoder.py --video_path /path/to/video.mp4 --full_decode --num_iterations 5

DVPP 解码器

# 单次解码(需先 source CANN 环境变量)
python npu_decoder.py --video_path /path/to/video.mp4 --timestamps 0.0 0.5 1.0

# 抽帧性能测试
python npu_decoder.py --video_path /path/to/video.mp4 --test --num_iterations 100

# 全量解码测试
python npu_decoder.py --video_path /path/to/video.mp4 --full_decode --num_iterations 2

性能对比测试

video_backend.py 提供一键对比三种后端性能的能力。

抽帧解码对比

python video_backend.py \
    --video_path /path/to/video.mp4 \
    --num_iterations 100 \
    --timestamps 0.0 0.5 1.0 1.5 2.0

输出示例:

================================================================================
2026-05-20 00:38:56,383 - INFO - 抽帧解码性能对比汇总
2026-05-20 00:38:56,383 - INFO - ===============================================

Backend                        Avg (ms)     Min (ms)     Max (ms)     Speedup
--------------------------------------------------------------------------------
pyav                           156.22       144.74       172.34       1.00x
torchcodec (cache)             48.21        46.17        50.67        3.24x
torchcodec (no cache)          47.05        42.83        49.61        3.32x
dvpp                           12537.84     12108.26     13065.01     0.01x
================================================================================

全量解码对比

python video_backend.py \
    --video_path /path/to/video.mp4 \
    --full_decode \
    --num_iterations 2

输出示例:

====================================================================================================
2026-05-19 14:32:19,869 - INFO - 全量解码性能对比汇总
2026-05-19 14:32:19,869 - INFO - ===================================================================

Backend                   Total Frames  Avg (s)    Min (s)    Max (s)    Decode FPS   Speedup
----------------------------------------------------------------------------------------------------
pyav                      34054         189.63     188.23     191.04     179.6        1.00x
torchcodec (cache)        34054         220.76     219.30     226.22     152.9        0.85x
torchcodec (no cache)     34054         221.91     221.50     222.31     153.5        0.85x
dvpp                      34054         227.23     226.75     227.70     149.9        0.83x
====================================================================================================

版本说明

变更

2026.05.19: 首次发布。支持 TorchCodec / PyAV / DVPP 三种视频解码后端,支持抽帧解码和全量解码两种模式,支持 video_backend.py 一键性能对比。

FAQ

Q: 运行时提示 ModuleNotFoundError: No module named 'torchcodec'

A: 请确认已按照安装 TorchCodec步骤完成安装,并确保 PyTorch 版本兼容(2.1.0 或 2.7.1)。

Q: 运行时提示 ModuleNotFoundError: No module named 'lerobot'

A: 请确认已按照安装 LeRobot步骤完成安装并切换到正确的 commit。

Q: DVPP 解码器提示 torch_npu 未找到

A: 请确保已正确安装昇腾 CANN 环境并 source set_env.sh,同时确认 torch_npu 已安装。可使用 pip list | grep torch_npu 检查。

Q: DVPP 全量解码测试失败或返回 None

A: DVPP 全量解码依赖 TorchCodec 获取视频元数据(帧数、FPS),请确保 TorchCodec 已安装且可用。