删除媒体文件

更新时间:
复制为 MD 格式

当需要管理存储成本、清理过期或违规内容时,可以使用视频点播的删除功能。本文介绍不同类型的删除操作及其影响,并提供通过控制台和 API/SDK 安全、高效地删除媒体文件的具体指引。

工作原理

在执行删除操作前,请务必理解其工作机制与潜在风险,以避免不可逆的数据丢失。

警告

所有删除操作均为物理删除,文件和关联的媒资信息将被永久移除,无法恢复。若需备份请参考点播资源迁移

删除类型

删除内容

播放影响

完整音视频

源文件、所有转码流、封面截图、雪碧图。

无法播放。

音视频流

指定清晰度的转码文件。

该清晰度无法播放,可能导致播放器报错。

源文件

原始上传文件

原画无法播放。

图片

图片文件。

作为封面的视频将无法显示封面。

说明
  • 删除点播媒体文件后,CDN节点的缓存不会被自动清除,可通过点播控制台的刷新功能,来清除CDN节点上的垃圾数据,详情请参见刷新预热

  • 删除音视频源文件时,若文件采用不转码即分发方式上传(作为原画播放流),则默认不可删除;如需删除,需通过调用批量删除音视频源文件并指定Force参数。

场景一:通过控制台删除

控制台提供了直观的界面,适用于删除少量文件。

  1. 登录视频点播控制台

  2. 在左侧导航栏选择媒资库,单击音/视频图片短视频素材,进入管理页面。

  3. 在管理页面,单击目标文件操作列的删除。

    删除

场景二:通过API/SDK删除

通过API/SDK删除媒体文件提供了更高的灵活性和自动化能力,是生产环境中管理大量媒资的首选方案。

说明
  • 请确保已安装相应语言的SDK,并已初始化客户端。详情请参见服务端SDK

  • 调用API进行删除媒体文件时,需注意QPS限制。超出QPS限制时,API将调用报错,详情请参见流控信息

删除单个或多个完整视频

此操作为最常用场景,通过删除完整视频接口实现,会删除视频的所有相关资源,包括源文件、转码流和截图。代码示例如下:

pythonfrom aliyunsdkvod.request.v20170321 import DeleteVideoRequest
from aliyunsdkcore.client import AcsClient
import json

def delete_video_safely(video_ids: str, access_key: str, secret_key: str, region='cn-shanghai'):
    """
    安全删除一个或多个视频。
    
    Args:
        video_ids: 视频ID,多个ID用逗号分隔。
        access_key: AccessKey ID。
        secret_key: AccessKey Secret。
        region: 地域。
    
    Returns:
        dict: 包含成功与否及错误信息的字典。
    """
    try:
        # 1. 初始化客户端
        client = AcsClient(access_key, secret_key, region)
        
        # 2. 创建删除请求
        request = DeleteVideoRequest.DeleteVideoRequest()
        request.set_VideoIds(video_ids)
        
        # 3. 执行删除
        response = client.do_action_with_exception(request)
        result = json.loads(response)
        
        print(f"视频 {video_ids} 删除请求提交成功。RequestID: {result.get('RequestId')}")
        return {"success": True, "data": result}
        
    except Exception as e:
        error_msg = str(e)
        print(f"删除失败: {error_msg}")
        
        # 常见错误处理
        if "InvalidVideo.NotFound" in error_msg:
            return {"success": False, "error": "视频不存在或已被删除。"}
        elif "Forbidden.IllegalStatus" in error_msg:
            return {"success": False, "error": "视频状态不允许删除,可能正在转码中。"}
        elif "Throttling" in error_msg:
            return {"success": False, "error": "请求过于频繁,请稍后重试。"}
        else:
            return {"success": False, "error": f"未知错误: {error_msg}"}

# 使用示例
# result = delete_video_safely(
#     video_ids="your-video-id-1,your-video-id-2",
#     access_key="your-access-key", 
#     secret_key="your-secret-key"
# )

删除指定清晰度的视频流

通过删除媒体流接口实现,当仅需移除某个清晰度,但保留其他清晰度时,可使用此功能。代码示例如下:

pythonfrom aliyunsdkvod.request.v20170321 import DeleteStreamRequest
# ... (复用上面的 AcsClient 初始化)

def delete_specific_stream(video_id: str, job_ids: str, access_key: str, secret_key: str):
    """
    删除指定清晰度的转码流。
    
    Args:
        video_id: 视频ID。
        job_ids: 转码任务ID列表,多个用逗号分隔。
    """
    try:
        client = AcsClient(access_key, secret_key, 'cn-shanghai')
        request = DeleteStreamRequest.DeleteStreamRequest()
        request.set_VideoId(video_id)
        request.set_JobIds(job_ids)
        
        response = client.do_action_with_exception(request)
        print(f"视频 {video_id} 的指定清晰度流删除成功。")
        return json.loads(response)
        
    except Exception as e:
        print(f"删除流失败: {e}")
        raise

# 示例:假设已通过 GetPlayInfo 获得 '4K' 清晰度的 JobId 为 'job-id-for-4k'
# delete_specific_stream(
#     video_id="your-video-id",
#     job_ids="job-id-for-4k",
#     access_key="your-access-key",
#     secret_key="your-secret-key"
# )

强制删除源文件

通过批量删除音视频源文件接口实现,此操作仅删除原始上传文件,保留转码后的流文件。代码示例如下:

重要

删除源文件将导致原画无法播放,且删除后无法对该视频再次发起转码。请确认不再需要源文件后使用。

pythonfrom aliyunsdkvod.request.v20170321 import DeleteMezzaninesRequest
# ... (复用上面的 AcsClient 初始化)

def force_delete_source_file(video_ids: str, access_key: str, secret_key: str):
    """
    强制删除源文件。
    
    Args:
        video_ids: 视频ID列表,多个用逗号分隔。
    """
    try:
        client = AcsClient(access_key, secret_key, 'cn-shanghai')
        request = DeleteMezzaninesRequest.DeleteMezzaninesRequest()
        request.set_VideoIds(video_ids)
        request.set_Force(True)  # 强制删除标识
        
        response = client.do_action_with_exception(request)
        print("源文件强制删除成功。")
        print("请立即刷新CDN缓存,避免原画播放出现404错误。")
        return json.loads(response)
        
    except Exception as e:
        print(f"强制删除失败: {e}")
        raise

# force_delete_source_file(
#     video_ids="your-video-id",
#     access_key="your-access-key",
#     secret_key="your-secret-key"
# )

删除图片文件

用于删除上传的图片或视频截图,通过删除图片或视频截图接口实现。