Video editing
ApsaraVideo VOD online editing combines audio, video, and text into new videos. This topic provides Python SDK examples for creating and managing editing projects and submitting production jobs.
Usage notes
All sample API calls in this topic use an AccessKey to initialize a client instance.
For detailed information about the request and response parameters of these API operations, visit the Alibaba Cloud OpenAPI Explorer. On the API operation page, open the API Documentations tab on the right side.
This topic provides examples for selected API operations. To obtain SDK code examples for other API operations, go to the Alibaba Cloud OpenAPI Explorer. On the Parameters tab, specify the required parameters and initiate the call. Then, on the SDK Sample Code tab, select the SDK version and your target language to view and download the sample code.
The examples in this topic use V1.0 of the SDK. To obtain examples for V2.0, make sure to select the correct SDK version in the Alibaba Cloud OpenAPI Explorer.

Initialize a client
Initialize a client before you use the SDK. Initialization.
Submit a video production job based on a timeline
Call the ProduceEditingProjectVideo operation to submit a video production job based on a timeline.
Applies to most video production scenarios.
OpenAPI Explorer: ProduceEditingProjectVideo.
Sample code:
More timeline editing and composition examples: Video Editing - Usage Examples.
from aliyunsdkvod.request.v20170321 import ProduceEditingProjectVideoRequest
def produce_editing_video(clt):
request = ProduceEditingProjectVideoRequest.ProduceEditingProjectVideoRequest()
# set timeline, this sample shows how to merge two videos
videoTrackClips = []
videoTracks = []
timeline = {}
videoTrackClip1 = {'MediaId': '<videoId1>'}
videoTrackClips.append(videoTrackClip1)
videoTrackClip2 = {'MediaId': '<videoId2>'}
videoTrackClips.append(videoTrackClip2)
videoTrack = {'VideoTrackClips': videoTrackClips}
videoTracks.append(videoTrack)
timeline['VideoTracks'] = videoTracks
request.set_Timeline(json.dumps(timeline))
# set media metadata
# CoverURL example: http://example.aliyundoc.com/media/cover/mediaid****.jpg
mediaMetadata = {'Title': 'editing sample title', 'Description': 'editing sample description', 'Tags': 'Tag1,Tag2,Test',
'CoverURL': '<your Cover URL>'}
request.set_MediaMetadata(json.dumps(mediaMetadata))
# set produce config
produceConfig = {'TemplateGroupId': '<templateGroupId>'}
#request.set_ProduceConfig(json.dumps(produceConfig))
request.set_accept_format('JSON')
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client()
produce = produce_editing_video(clt)
print(produce['MediaId'])
print(json.dumps(produce, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
Submit a video production job based on an online editing project
Call the ProduceEditingProjectVideo operation to submit a video production job based on an online editing project.
Use this method to manage online editing projects.
OpenAPI Explorer: ProduceEditingProjectVideo.
Sample code:
from aliyunsdkvod.request.v20170321 import ProduceEditingProjectVideoRequest
def produce_editing_video_by_id(clt):
request = ProduceEditingProjectVideoRequest.ProduceEditingProjectVideoRequest()
# set ProjectId
request.set_ProjectId('<ProjectId>')
# set media metadata
mediaMetadata = {'Title': 'editing sample title by ProjectId', 'Description': 'editing sample description by ProjectId',
'Tags': 'Tag1,Tag2,Test'}
request.set_MediaMetadata(json.dumps(mediaMetadata))
# set produce config
produceConfig = {'TemplateGroupId': '<templateGroupId>'}
#request.set_ProduceConfig(json.dumps(produceConfig))
request.set_accept_format('JSON')
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client()
produce = produce_editing_video_by_id(clt)
print(produce['MediaId'])
print(json.dumps(produce, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
Create an online editing project
Call the AddEditingProject operation to create an online editing project.
OpenAPI Explorer: AddEditingProject.
Sample code:
from aliyunsdkvod.request.v20170321 import AddEditingProjectRequest
def add_editing_project(clt):
request = AddEditingProjectRequest.AddEditingProjectRequest()
# set timeline, this sample shows how to merge two videos
videoTrackClips = []
videoTracks = []
timeline = {}
videoTrackClip1 = {'MediaId': '<videoId1>'}
videoTrackClips.append(videoTrackClip1)
videoTrackClip2 = {'MediaId': '<videoId2>'}
videoTrackClips.append(videoTrackClip2)
videoTrack = {'VideoTrackClips': videoTrackClips}
videoTracks.append(videoTrack)
timeline['VideoTracks'] = videoTracks
request.set_Timeline(json.dumps(timeline))
# set project metadata
request.set_Title('editing project title')
request.set_Description('editing project description')
request.set_accept_format('JSON')
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client()
project = add_editing_project(clt)
print(project['Project'])
print(json.dumps(project, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
Modify an online editing project
Call the UpdateEditingProject operation to modify an online editing project.
OpenAPI Explorer: UpdateEditingProject.
Sample code:
from aliyunsdkvod.request.v20170321 import UpdateEditingProjectRequest
def update_editing_project(clt):
request = UpdateEditingProjectRequest.UpdateEditingProjectRequest()
# set projectId
request.set_ProjectId('<projectId>')
# set timeline, this sample shows how to merge two videos
videoTrackClips = []
videoTracks = []
timeline = {}
videoTrackClip1 = {'MediaId': '<videoId1>'}
videoTrackClips.append(videoTrackClip1)
videoTrackClip2 = {'MediaId': '<videoId2>'}
videoTrackClips.append(videoTrackClip2)
videoTrack = {'VideoTrackClips': videoTrackClips}
videoTracks.append(videoTrack)
timeline['VideoTracks'] = videoTracks
request.set_Timeline(json.dumps(timeline))
# set project metadata
request.set_Title('new editing project title')
request.set_Description('new editing project description')
request.set_accept_format('JSON')
response = json.loads(clt.do_action_with_exception(request))
return response
try:
clt = init_vod_client()
res = update_editing_project(clt)
print(json.dumps(res, ensure_ascii=False, indent=4))
except Exception as e:
print(e)
print(traceback.format_exc())
Delete an online editing project
Call the DeleteEditingProject operation to delete an online editing project.
OpenAPI Explorer: DeleteEditingProject.
Query details of an online editing project
Call the GetEditingProject operation to query details about an online editing project.
OpenAPI Explorer: or GetEditingProject.
Query online editing projects
Call the SearchEditingProject operation to search for online editing projects.
OpenAPI Explorer: or SearchEditingProject.
Set materials for an online editing project
Call the SetEditingProjectMaterials operation to set materials for an online editing project.
OpenAPI Explorer: SetEditingProjectMaterials.
Query materials in an online editing project
Call the GetEditingProjectMaterials operation to query materials in an online editing project.
OpenAPI Explorer: GetEditingProjectMaterials.