视频截帧功能可以从视频流中截取指定时刻的单帧画面,并按指定大小缩放成图片。本文介绍如何通过 TOS C++ SDK 进行视频截帧。
以下代码展示如何截取第 300ms 的视频帧,并将截取后的图片命名为 temp.jpg,并下载到本地。
#include "TosClientV2.h"
using namespace VolcengineTos;
int main(void){
// 初始化 TOS 账号信息
// Your Region 填写 Bucket 所在 Region
std::string region = "Your Region";
std::string accessKey = std::getenv("TOS_ACCESS_KEY");
std::string secretKey = std::getenv("TOS_SECRET_KEY");
// 填写 Bucket 名称,例如 examplebucket
std::string bucketName = "examplebucket";
// 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/exampleobject.jpg。
std::string objectName = "exampledir/exampleobject.mp4";
// 下载Object到本地文件temp.jpg,并保存到指定的本地路径中,例如/localpath/temp.jpg,如果指定的本地文件存在会覆盖,不存在则新建。
std::string filePath = "/localpath/temp.jpg";
// 初始化网络等资源
InitializeClient();
// 创建交互的 client
TosClientV2 client(region, accessKey, secretKey);
GetObjectToFileInput input(bucketName, objectName, filePath);
std::string style = "video/snapshot,t_300";
input.setProcess(style);
auto output = client.getObjectToFile(input);
if (!output.isSuccess()) {
// 异常处理
std::cout << "GetObjectToFile failed." << output.error().String() << std::endl;
// 释放网络等资源
CloseClient();
return -1;
}
std::cout << "GetObjectToFile success. the object etag:" << output.result().getGetObjectBasicOutput().getETags()
<< std::endl;
// 释放网络等资源
CloseClient();
return 0;
}
关于视频截帧的详细介绍,请参见视频截帧。