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

在Google Colab中创建torchvision.io.VideoReader时触发AttributeError

解决Colab中torchvision.io.VideoReader的AttributeError问题

问题根源

你遇到的AttributeError: 'ImportError' object has no attribute 'open'本质是缺少pyav依赖库。torchvision的VideoReader默认使用pyav作为视频处理后端,但Colab默认运行环境并未预装该库,导致导入av模块失败,此时av变量被错误赋值为ImportError对象,调用av.open就会触发这个异常。

解决方案

1. 安装pyav库

在Colab的代码单元格中运行以下命令:

!pip install av

2. 重启运行时

安装完成后,通过Colab顶部菜单选择Runtime -> Restart runtime,确保新安装的库生效。

3. 验证安装

运行以下代码确认pyav正常导入:

import av
print(av.__version__)

如果输出正常版本号(如10.0.0),说明安装成功。

优化后的完整代码

以下是修复依赖并优化路径处理、添加帧提取逻辑的代码:

import torch
import torchvision
import os
from google.colab import drive

# 挂载Google Drive
drive_loc = '/content/drive'
if os.path.exists(drive_loc):
    print("Drive already mounted")
else:
    print("Mounting drive")
    drive.mount(drive_loc)

# 视频目录与输出帧目录
video_dir = os.path.join(drive_loc, "MyDrive", "videos")
frame_output_dir = os.path.join(drive_loc, "MyDrive", "video_frames")
os.makedirs(frame_output_dir, exist_ok=True)

# 遍历处理视频文件
for filename in os.listdir(video_dir):
    file_path = os.path.join(video_dir, filename)
    if not os.path.isfile(file_path):
        continue
    
    print(f"Processing {filename}...")
    
    # 初始化VideoReader
    video = torchvision.io.VideoReader(file_path, "video")
    
    # 打印视频元数据
    print(video.get_metadata())
    
    # 提取并保存帧
    frame_count = 0
    for frame_data in video:
        # 获取帧张量(形状:C, H, W)
        frame_tensor = frame_data['data']
        # 转换为PIL图片并保存
        pil_img = torchvision.transforms.ToPILImage()(frame_tensor)
        save_path = os.path.join(frame_output_dir, f"{os.path.splitext(filename)[0]}_frame_{frame_count}.png")
        pil_img.save(save_path)
        
        frame_count += 1
        # 可选:限制提取帧数(例如仅提取前10帧)
        # if frame_count >= 10:
        #     break
    
    print(f"Finished extracting {frame_count} frames for {filename}")

备选方案:切换后端

如果pyav安装后仍有问题,可以尝试指定torchscript作为VideoReader的后端:

video = torchvision.io.VideoReader(file_path, "video", backend="torchscript")

不过pyav后端支持更多视频格式和功能,优先推荐使用pyav方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:17