ApsaraVideo VOD を使用すると、ストレージコストの管理や期限切れ・非準拠コンテンツの削除が可能です。本トピックでは、さまざまな削除操作の種類とその影響について説明します。また、コンソール、API、ソフトウェア開発キット(SDK)を用いた安全かつ効率的なメディアファイルの削除手順もご案内します。
仕組み
ファイルを削除する前に、操作の仕組みと潜在的なリスクを理解しておく必要があります。これにより、取り返しのつかないデータ損失を防ぐことができます。
すべての削除操作は物理削除です。ファイルおよび関連するメディア資産情報は完全に削除され、復元できません。ファイルのバックアップについては、「ApsaraVideo VOD リソースの移行」をご参照ください。
削除タイプ | 削除済みコンテンツ | 再生への影響 |
動画または音声全体 | ソースファイル、すべてのトランスコード済みストリーム、サムネイル、スプライト。 | 動画または音声の再生ができなくなります。 |
動画および音声ストリーム | 特定の定義のトランスコード済みファイル。 | 特定の定義を再生できません。これにより、プレーヤーでエラーが発生する可能性があります。 |
ソースファイル | 元のアップロードファイル。 | オリジナル品質での再生ができなくなります。 |
イメージ | イメージファイル。 | 動画のサムネイルとして表示できなくなります。 |
ApsaraVideo VOD からメディアファイルを削除しても、CDN のポイント・オブ・プレゼンス(POP)上のキャッシュは自動的にパージされません。ApsaraVideo VOD コンソールのパージ機能を使用して、CDN POP 上の古いデータをクリアできます。詳細については、「更新およびプリフェッチ」をご参照ください。
デフォルトでは、トランスコードせずに配信目的でアップロードされた動画または音声のソースファイルは、オリジナル品質での再生に使用されるため、削除できません。このファイルを削除するには、DeleteMezzanines 操作を呼び出し、
Forceパラメーターを指定してください。
シナリオ 1:コンソールを用いたファイルの削除
コンソールは直感的なインターフェイスを提供し、少数のファイルを削除する場合に適しています。
ApsaraVideo VOD コンソール にログインします。
左側のナビゲーションウィンドウで、メディア資産 を選択し、その後 動画/音声、イメージ、または 短尺動画素材 をクリックします。
管理ページで削除したいファイルを見つけ、操作 列の 削除 をクリックします。

シナリオ 2:API または SDK を用いたファイルの削除
API または SDK を用いたメディアファイルの削除は、柔軟性と自動化の面で優れており、本番環境における多数のメディア資産を管理する際の推奨ソリューションです。
対象言語の SDK をインストールし、クライアントを初期化済みであることを確認してください。詳細については、「サーバーサイド SDK」をご参照ください。
メディアファイルを削除する API 操作を呼び出す際は、クエリ/秒(QPS)制限に注意してください。QPS 制限を超えると、API 呼び出しは失敗します。詳細については、「レート制限」をご参照ください。
1 つ以上の動画全体の削除
最も一般的なシナリオです。DeleteVideo 操作を呼び出して、ソースファイル、トランスコード済みストリーム、スナップショットなど、動画に関連するすべてのリソースを削除します。以下のコードはその例です。
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'):
"""
1 つ以上の動画を安全に削除します。
引数:
video_ids: 動画の ID。複数の ID はカンマで区切ります。
access_key: AccessKey ID。
secret_key: AccessKey Secret。
region: リージョン。
戻り値:
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} の削除リクエストを送信しました。リクエスト ID: {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"
# )特定の解像度の動画ストリームの削除
DeleteStream 操作を呼び出します。この機能は、特定の定義のみを削除したいが、他の定義は保持したい場合に使用できます。次のコードはその例です。
pythonfrom aliyunsdkvod.request.v20170321 import DeleteStreamRequest
# ... (前の例で使用した AcsClient の初期化を再利用)
def delete_specific_stream(video_id: str, job_ids: str, access_key: str, secret_key: str):
"""
特定の解像度のトランスコード済みストリームを削除します。
引数:
video_id: 動画の ID。
job_ids: トランスコーディングジョブの ID のリスト。複数の 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"
# )ソースファイルの強制削除
DeleteMezzanines 操作を呼び出します。この操作は、元のアップロードファイルのみを削除し、トランスコード済みストリームファイルは保持します。以下のコードはその例です。
ソースファイルを削除すると、オリジナル品質での再生ができなくなります。削除後は、動画を再度トランスコードすることもできません。この操作は、ソースファイルが今後不要であると確認した後にのみ実行してください。
pythonfrom aliyunsdkvod.request.v20170321 import DeleteMezzaninesRequest
# ... (前の例で使用した AcsClient の初期化を再利用)
def force_delete_source_file(video_ids: str, access_key: str, secret_key: str):
"""
ソースファイルを強制削除します。
引数:
video_ids: 動画の ID のリスト。複数の 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("オリジナル品質での再生時に 404 エラーが発生しないよう、CDN キャッシュを直ちにパージしてください。")
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"
# )イメージファイルの削除
アップロード済みのイメージまたはビデオスナップショットを削除するには、DeleteImage 操作を呼び出します。