我正在尝试通过 Video Indexer API 上传一个大视频(大约 1.5 GB)。但是,我的机器为此占用了大量 RAM。部署系统具有相当少量的 RAM。我想使用 API 以便在不占用太多内存的情况下分多个部分上传视频(大约 100MB 就足够了)。
我尝试使用 ffmpeg 将视频分成块并逐块上传,但 Video Indexer 将它们识别为不同的视频并为每个视频提供单独的见解。如果视频是在线聚合的,那就更好了。
如何将分块视频上传到 MS Video Indexer?
我正在尝试通过 Video Indexer API 上传一个大视频(大约 1.5 GB)。但是,我的机器为此占用了大量 RAM。部署系统具有相当少量的 RAM。我想使用 API 以便在不占用太多内存的情况下分多个部分上传视频(大约 100MB 就足够了)。
我尝试使用 ffmpeg 将视频分成块并逐块上传,但 Video Indexer 将它们识别为不同的视频并为每个视频提供单独的见解。如果视频是在线聚合的,那就更好了。
如何将分块视频上传到 MS Video Indexer?
让我猜。之前,您按照官方教程Tutorial: Use the Video Indexer API
和Upload Video
API参考(API参考页面末尾的Python示例代码如下图)上传您的大视频。
它消耗大量内存,因为下面的代码发送{body}
从内存读取的数据块,其值来自代码open("<your local file name>").read()
。
conn.request("POST", "/{location}/Accounts/{accountId}/Videos?name={name}&accessToken={accessToken}&%s" % params, "{body}", headers)
但是,如果您仔细阅读videoUrl
文档的小节Upload and index your videos
和以下 C# 代码,即使是videoUrl
API 参考中的说明,您也会发现作为multipart/form
正文内容传递的视频文件并不是唯一的方法。
视频网址
要索引的视频/音频文件的 URL。URL 必须指向媒体文件(不支持 HTML 页面)。该文件可以通过作为 URI 的一部分提供的访问令牌来保护,并且为该文件提供服务的端点必须使用 TLS 1.2 或更高版本进行保护。URL 需要编码。
如果未指定 videoUrl,则视频索引器希望您将文件作为多部分/表单正文内容传递。
videoUrl
videoUrl
API参考中的参数截图videoUrl
您可以先通过Python 流式上传代码azcopy
或其他工具(如Azure Storage Explorer )将大型视频文件上传到 Azure Blob Storage 或其他满足要求的在线服务,然后以 Azure Blob Storage 为例生成带有 sas 令牌的 blob url(Python代码如下)将其传递videoUrl
给API请求以进行上传。
from azure.storage.blob.baseblobservice import BaseBlobService
from azure.storage.blob import BlockBlobService, BlobPermissions
from datetime import datetime, timedelta
account_name = '<your account name>'
account_key = '<your account key>'
container_name = '<your container name>'
blob_name = '<your blob name>'
service = BaseBlobService(account_name=account_name, account_key=account_key)
token = service.generate_blob_shared_access_signature(container_name, blob_name, BlobPermissions.READ, datetime.utcnow() + timedelta(hours=1),)
blobUrlWithSas = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}"
希望能帮助到你。