You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NVIDIA DALI pipeline使用readers.video无法加载.mp4视频问题求助

问题原因与解决方案

核心错误点

你对fn.readers.video接口的file_root参数传值不符合接口要求,直接触发了目录打开失败报错:

RuntimeError: 构建pipeline时出现严重错误:构造算子时出错:readers__Video 抛出异常:[/opt/dali/dali/operators/reader/loader/video_loader.cc:117] 断言"dir != nullptr"失败:目录['sintel_trailer-720p_0.mp4']无法打开。

file_root参数要求传入存放所有待读取视频文件的文件夹路径,不是单个视频的路径,也不是包含视频文件名的列表。你传入了包含单视频文件名的列表,DALI会尝试将文件名作为目录打开,自然触发报错。

修正方案

你可以按以下逻辑调整代码:

  1. 将file_root改为视频文件所在的文件夹路径,若视频存放在当前工作目录,直接传./即可
  2. 如果需要只读取指定的mp4文件,可额外添加file_filters参数过滤目标文件

修正后代码示例

import os
import numpy as np    
from nvidia.dali import pipeline_def
import nvidia.dali.fn as fn
import nvidia.dali.types as types       

batch_size=2
sequence_length=8
initial_prefetch_size=16 

# 此处改为视频所在的文件夹路径,示例为当前工作目录
video_root = "./"
# 可选:指定只读取目标mp4文件,多文件可加多个过滤规则
target_file_filter = ["sintel_trailer-720p_0.mp4"]
n_iter=6

@pipeline_def
def video_pipe(file_root, file_filters):
    video, labels = fn.readers.video(device="gpu", 
                                     file_root=file_root,
                                     # 新增过滤参数筛选目标文件
                                     file_filters=file_filters,
                                     sequence_length=sequence_length,
                                     random_shuffle=True, 
                                     initial_fill=initial_prefetch_size)
    return video, labels

pipe = video_pipe(batch_size=batch_size, num_threads=2, device_id=0, 
                  file_root=video_root, 
                  file_filters=target_file_filter,
                  seed=12345)
pipe.build()

额外验证项

如果调整参数后仍有问题,可依次确认:

  • 传入的file_root路径为有效路径,优先传绝对路径避免相对路径匹配错误
  • 本地ffmpeg依赖完整,DALI的视频读取依赖ffmpeg解码能力
  • 目标mp4文件编码格式为DALI支持的H.264、H.265等常规视频编码

内容的提问来源于stack exchange,提问作者Abhijit Manepatil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:15:05