Video editing

Updated at:
Copy as MD

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.image.png

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:

Note

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.