當您需要獲取視頻封面、提取視頻關鍵幀圖像進行視頻編輯,或者提取視頻中特定場景幀圖像用于視頻監控等時,可以將視頻上傳至OSS存儲空間,然后通過本文所示方法進行視頻截幀。
注意事項
使用視頻截幀時,按視頻截幀截取的圖片數量計費。有關計費詳情的更多信息,請參見數據處理費用。
僅支持對視頻編碼格式為H264和H265的視頻文件進行視頻截幀。
OSS默認不保存視頻截幀的圖片,視頻截幀的圖片需手動下載并保存至本地。
參數說明
操作分類:video
操作名稱:snapshot
參數 | 描述 | 取值范圍 |
t | 指定截圖時間。如果設置的截圖時間t超過了視頻時長,則返回視頻的最后一個關鍵幀。 說明 如果需要截取視頻封面,則t設置為0。 | [0,視頻時長] 單位:ms |
w | 指定截圖寬度,如果指定為0,則根據截圖高度與源視頻高度比例自動計算。 | [0,視頻寬度] 單位:像素(px) |
h | 指定截圖高度,如果指定為0,則根據截圖寬度與源視頻寬度比例自動計算;如果w和h都為0,則輸出為原視頻寬高。 | [0,視頻高度] 單位:像素(px) |
m | 指定截圖模式,不指定則為默認模式,根據時間精確截圖。如果指定為fast,則截取該時間點之前的最近的一個關鍵幀。 | 枚舉值:fast |
f | 指定輸出圖片的格式。 | 枚舉值:jpg和png |
ar | 指定是否根據視頻信息自動旋轉圖片。 | 枚舉值:auto、h和w 各枚舉值說明如下:
|
使用示例
本文示例使用的Bucket為杭州地域名為oss-console-img-demo-cn-hangzhou的Bucket,視頻外網訪問地址為:
https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/video.mp4
使用fast模式截取視頻7s處的內容,輸出為JPG格式的圖片,寬度為800,高度為600。
使用精確時間模式截取視頻17s處的內容,輸出為JPG格式的圖片,寬度為800,高度為600。
生成帶簽名的視頻截幀URL
您可以通過SDK生成帶簽名的視頻截幀URL,以Java SDK為例,代碼如下:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫視頻文件所在的Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 填寫視頻文件的完整路徑。若視頻文件不在Bucket根目錄,需攜帶文件訪問路徑,例如examplefolder/videotest.mp4。
String objectName = "examplefolder/videotest.mp4";
// 創建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
// 使用精確時間模式截取視頻17s處的內容,輸出為JPG格式的圖片,寬度為800,高度為600。
String style = "video/snapshot,t_17000,f_jpg,w_800,h_600";
// 指定過期時間為10分鐘。
Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
// 關閉OSSClient。
ossClient.shutdown();
生成帶簽名的視頻截幀URL與生成帶簽名的圖片處理URL的方法類似。如果您需要通過不同語言SDK生成帶簽名的視頻截幀URL,請將如下不同語言SDK的圖片處理操作替換為視頻截幀操作。
常見問題
私有文件能否通過鏈接拼接參數進行文件處理?
不可以。對于不允許匿名訪問的私有視頻文件,不支持通過文件URL直接添加參數的方式處理視頻,您需要通過SDK的方式將視頻處理操作加入簽名URL中。
如何查看OSS中視頻的長寬尺寸?
您可以使用視頻信息提取功能,獲取視頻的長寬尺寸。更多信息,請參見視頻信息提取。
視頻截幀的圖片出現失真
目前暫不支持對BT.2020色域的源視頻進行視頻截幀。