1. 准备工作
在使用Python对接又拍云接口之前,我们需要先准备好以下内容:
一个又拍云账号,并且已经创建了一个视频存储空间
Python2或Python3环境,以及requests包
生成又拍云的授权签名
1.1 创建存储空间
在使用又拍云的视频剪切与加速功能之前,我们需要先在又拍云上创建一个存储空间来存储我们要上传和剪切的视频。 下面我们就来创建一个新的存储空间:
import requests
operator = '操作员用户名'
password = '操作员密码'
bucket_name = '存储空间名称'
api_url = 'http://api.upyun.com/'
auth = (operator, password)
headers = {'User-Agent': 'Mozilla/5.0'}
#创建存储空间
rsp = requests.put(api_url + bucket_name, headers=headers, auth=auth)
print(rsp.status_code)
以上代码会通过requests库向又拍云发送一个PUT请求,用于创建指定名称的存储空间。向又拍云发送请求时,需要通过auth参数传递操作员的用户名和密码,并且将请求头中的User-Agent设置为浏览器标识。
1.2 生成授权签名
在使用又拍云API时,需要使用专门的签名算法来验证请求的合法性。下面我们就来通过Python生成授权签名:
import time
import hashlib
import hmac
operator = '操作员用户名'
password = '操作员密码'
bucket_name = '存储空间名称'
api_method = 'POST'
param_list = {'save-key': '/test/video1.mp4?type=video/mp4', 'expiration': int(time.time()) + 600}
# 拼接签名串
sign_str = '&'.join([api_method, '/' + bucket_name, param_list['save-key'], str(param_list['expiration'])])
# 生成签名
hash_str = hmac.new(password.encode(), sign_str.encode(), hashlib.sha1)
sign = hash_str.digest().encode('base64').rstrip()
print(sign)
以上代码中我们使用了hmac库,通过给定的签名算法和密钥,对待签名的数据进行加密,并得到签名结果。利用该签名计算方法,我们可以生成一个用于验证请求合法性的签名。
2. 上传视频
在生成授权签名之后,我们可以通过Python向又拍云上传视频,下面我们就来看一下如何通过Python实现向又拍云上传视频:
import requests
operator = '操作员用户名'
password = '操作员密码'
bucket_name = '存储空间名称'
api_domain = 'v0.api.upyun.com'
key = '/test/video1.mp4'
local_file = './video.mp4'
# 计算认证签名
#...
auth = (operator, password)
headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': 'video/mp4', 'Authorization': 'UPYUN ' + operator + ':' + sign}
url = 'http://' + api_domain + '/' + bucket_name + key
# 开始上传
with open(local_file, 'rb') as f:
rsp = requests.put(url, headers=headers, auth=auth, data=f)
print(rsp.status_code)
以上代码中我们使用了requests库向又拍云发送一个PUT请求,用于上传视频到指定存储空间。需要在请求头中包含Content-Type,Authorization等参数,其中Authentication参数是指授权签名。
3. 视频剪切
在视频上传到又拍云之后,我们可以通过Python调用又拍云的API来实现视频剪切和加速功能,下面我们分别介绍一下这两种操作。
3.1 视频剪切
在又拍云上,可以通过一些预设的参数实现对视频的剪切。下面我们来看一下如何利用Python调用又拍云的API来实现视频剪切:
import requests
import time
import hashlib
import hmac
operator = '操作员用户名'
password = '操作员密码'
bucket_name = '存储空间名称'
api_domain = 'p0.api.upyun.com'
source_file = 'test/video1.mp4'
expd_ms = '600000' # 过期时间
time_ms = int(time.time()) * 1000 # 当前时间戳
# 计算认证签名
#...
auth = (operator, password)
headers = {"Authorization": "UPYUN " + operator + ":" + sign, 'User-Agent': 'Mozilla/5.0'}
url = 'http://' + api_domain + '/' + bucket_name + '/' + source_file + '!/cut/100p'
# 发送post请求
rsp = requests.post(url, headers=headers, auth=auth)
print(rsp.status_code)
以上代码中我们向又拍云发送一个POST请求,其中包含一个cut参数,用于指定视频剪切的区域,此处是对视频按照高度为100px进行垂直方向的剪切。
3.2 视频加速
在视频上传到又拍云之后,可以利用Python调用又拍云的API来实现对视频的加速。
import requests
import time
import hashlib
import hmac
operator = '操作员用户名'
password = '操作员密码'
bucket_name = '存储空间名称'
api_domain = 'p0.api.upyun.com'
source_file = 'test/video1.mp4'
expd_ms = '600000' # 过期时间
time_ms = int(time.time()) * 1000 # 当前时间戳
# 计算认证签名
#...
auth = (operator, password)
headers = {"Authorization": "UPYUN " + operator + ":" + sign, 'User-Agent': 'Mozilla/5.0'}
url = 'http://' + api_domain + '/' + bucket_name + '/' + source_file + '!/speedup'
# 发送post请求
rsp = requests.post(url, headers=headers, auth=auth)
print(rsp.status_code)
以上代码中我们向又拍云发送一个POST请求,实现又拍云的加速服务。
4. 结束语
本文主要介绍了如何通过Python实现对又拍云的API调用,以实现视频剪切和加速功能,其中主要涉及到的内容包括:创建存储空间、生成授权签名、上传视频、视频剪切和视频加速等。
利用Python对又拍云的API调用,可以大大地提高我们对视频的处理效率和精度,同时还可以通过Python的自动化功能实现批量处理,启发我们更多的创新想法。