开发指南

服务端 API 文档

有奖征文|投稿上云技术实践,赢取价值5000元大奖> HOT

1. 接口描述

接口请求域名: vod.tencentcloudapi.com 。

该接口用于合成媒体文件,可以达到以下效果:

  1. 画面旋转:对视频、图片的画面旋转一定角度,或按照某个方向翻转。
  2. 声音控制:升高降低视频、音频中声音的音量,或者对视频静音。
  3. 画面叠加:将视频、图片中的画面依序叠加在一起,如实现“画中画”的效果。
  4. 声音混合:将视频、音频中的声音混合在一起(混音)。
  5. 声音提取:将视频中的音频提取出来(不保留画面)。
  6. 裁剪:对视频、音频裁剪出指定时间段。
  7. 拼接:对视频、音频、图片按时间顺序前后拼接。
  8. 转场:将多段视频或图片拼接时,可以在段落之间添加转场效果。

合成后的媒体封装格式可以是 MP4(视频)或 MP3(音频)。如使用事件通知,事件通知的类型为 视频合成完成

默认接口请求频率限制:100次/秒。

推荐使用 API Explorer
点击调试
API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。

2. 输入参数

以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数

参数名称 必选 类型 描述
Action String 公共参数,本接口取值:ComposeMedia。
Version String 公共参数,本接口取值:2018-07-17。
Region String 公共参数,本接口不需要传递此参数。
Tracks.N Array of MediaTrack 输入的媒体轨道列表,包括视频、音频、图片等素材组成的多个轨道信息,其中:
  • 输入的多个轨道在时间轴上和输出媒体文件的时间轴对齐;
  • 时间轴上相同时间点的各个轨道的素材进行重叠,视频或者图片按轨道顺序进行图像的叠加,轨道顺序高的素材叠加在上面,音频素材进行混音;
  • 视频、音频、图片,每一种类型的轨道最多支持 10 个。
  • 所有类型的轨道上放置的媒体片段数量总和最多支持 500 个。
  • Output ComposeMediaOutput 输出的媒体文件信息。
    SubAppId Integer 点播子应用 ID。如果要访问子应用中的资源,则将该字段填写为子应用 ID;否则无需填写该字段。
    Canvas Canvas 制作视频文件时使用的画布。
    SessionContext String 标识来源上下文,用于透传用户请求信息,在ComposeMediaComplete回调将返回该字段值,最长 1000个字符。
    SessionId String 用于任务去重的识别码,如果三天内曾有过相同的识别码的请求,则本次的请求会返回错误。最长 50 个字符,不带或者带空字符串表示不做去重。

    3. 输出参数

    参数名称 类型 描述
    TaskId String 制作媒体文件的任务 ID,可以通过该 ID 查询制作任务(任务类型为 MakeMedia)的状态。
    RequestId String 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

    4. 示例

    示例1 对点播中的视频进行配音

    对 5285485487985271487 消除原来的音频,从5秒开始使用5285485487985271488进行配音,从20秒开始使用5285485487985271489的第2到第16秒进行配音,生成一个新的点播视频。

    输入示例

    POST / HTTP/1.1
    Host: vod.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: ComposeMedia
    <公共请求参数>
    
    {
        "Output": {
            "Container": "mp4",
            "FileName": "test"
        },
        "Tracks": [
            {
                "TrackItems": [
                    {
                        "AudioItem": {
                            "SourceMedia": "5285485487985271488"
                        },
                        "Type": "Audio"
                    },
                    {
                        "Type": "Empty",
                        "EmptyItem": {
                            "Duration": "5"
                        }
                    },
                    {
                        "AudioItem": {
                            "Duration": "14",
                            "SourceMedia": "5285485487985271489",
                            "SourceMediaStartTime": "2"
                        },
                        "Type": "Audio"
                    }
                ],
                "Type": "Audio"
            },
            {
                "TrackItems": [
                    {
                        "Type": "Video",
                        "VideoItem": {
                            "SourceMedia": "5285485487985271487",
                            "AudioOperations": [
                                {
                                    "VolumeParam": {
                                        "Mute": "1"
                                    },
                                    "Type": "Volume"
                                }
                            ]
                        }
                    }
                ],
                "Type": "Video"
            }
        ]
    }

    输出示例

    {
        "Response": {
            "RequestId": "6ca31e3a-6b8e-4b4e-9256-fdc700064ef3",
            "TaskId": "125xxx65-ComposeMedia-bffb15f07530b57bc1aabb01fac74bca"
        }
    }

    示例2 对两个视频流进行裁剪后拼接在一起

    取5285485487985271487的第2秒到第62秒,5285485487985271488的第6秒到81秒进行拼接,中间设置5秒的淡入淡出转场, 从视频的3秒到18秒贴上一个图片5285485487985271489,位置为(20px,20px),宽高为(100px,100px)。

    输入示例

    POST / HTTP/1.1
    Host: vod.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: ComposeMedia
    <公共请求参数>
    
    {
        "Output": {
            "Container": "mp4",
            "FileName": "test"
        },
        "Tracks": [
            {
                "TrackItems": [
                    {
                        "StickerItem": {
                            "CoordinateOrigin": "TopLeft",
                            "XPos": "20px",
                            "YPos": "20px",
                            "Height": "100px",
                            "Width": "100px",
                            "StartTime": "3",
                            "Duration": "15",
                            "SourceMedia": "5285485487985271489"
                        },
                        "Type": "Sticker"
                    }
                ],
                "Type": "Sticker"
            },
            {
                "TrackItems": [
                    {
                        "TransitionItem": {
                            "Duration": "5"
                        },
                        "Type": "Transition"
                    },
                    {
                        "Type": "Video",
                        "VideoItem": {
                            "Duration": "60",
                            "SourceMedia": "5285485487985271487",
                            "SourceMediaStartTime": "2"
                        }
                    },
                    {
                        "Type": "Video",
                        "VideoItem": {
                            "Duration": "75",
                            "SourceMedia": "5285485487985271488",
                            "SourceMediaStartTime": "6"
                        }
                    }
                ],
                "Type": "Video"
            }
        ]
    }

    输出示例

    {
        "Response": {
            "RequestId": "6ca31e3a-6b8e-4b4e-9256-fdc700064ef3",
            "TaskId": "125xxx65-ComposeMedia-bffb15f07530b57bc1aabb01fac74bc2"
        }
    }

    示例3 将一个视频作为另一个视频的画中画

    将5285485487985271487的视频作为画中画的主画面;将5285485487985271488的视频作为画中画的子画面;子画面的中心偏移主画面25%(即在主画面右下角),宽度占画面的30%。

    输入示例

    POST / HTTP/1.1
    Host: vod.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: ComposeMedia
    <公共请求参数>
    
    {
        "Output": {
            "Container": "mp4",
            "FileName": "test"
        },
        "Tracks": [
            {
                "TrackItems": [
                    {
                        "Type": "Video",
                        "VideoItem": {
                            "CoordinateOrigin": "Center",
                            "Width": "30%",
                            "SourceMedia": "5285485487985271488",
                            "XPos": "25%",
                            "YPos": "25%"
                        }
                    }
                ],
                "Type": "Video"
            },
            {
                "TrackItems": [
                    {
                        "Type": "Video",
                        "VideoItem": {
                            "SourceMedia": "5285485487985271487"
                        }
                    }
                ],
                "Type": "Video"
            }
        ]
    }

    输出示例

    {
        "Response": {
            "RequestId": "6ca31e3a-6b8e-4b4e-9256-fdc700064ef3",
            "TaskId": "125xxx65-ComposeMedia-bffb15f07530b57bc1aabb01fac74bca"
        }
    }

    5. 开发者资源

    腾讯云 API 平台

    腾讯云 API 平台 是综合 API 文档、错误码、API Explorer 及 SDK 等资源的统一查询平台,方便您从同一入口查询及使用腾讯云提供的所有 API 服务。

    API Inspector

    用户可通过 API Inspector 查看控制台每一步操作关联的 API 调用情况,并自动生成各语言版本的 API 代码,也可前往 API Explorer 进行在线调试。

    SDK

    云 API 3.0 提供了配套的开发工具集(SDK),支持多种编程语言,能更方便的调用 API。

    命令行工具

    6. 错误码

    以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码

    错误码 描述
    FailedOperation 操作失败。
    FailedOperation.InvalidVodUser 没有开通点播业务。
    FailedOperation.UploadCosFail 操作失败:上传文件到 cos 失败。
    InternalError 内部错误。
    InternalError.GetFileInfoError 内部错误:获取媒体文件信息错误。
    InternalError.GetMediaListError 内部错误:获取媒体列表错误。
    InvalidParameter 参数错误。
    InvalidParameterValue.ClipDuration 参数值错误:裁剪时间段太长。
    InvalidParameterValue.SessionContextTooLong SessionContext 过长。
    InvalidParameterValue.SessionId 去重识别码重复,请求被去重。
    UnauthorizedOperation 未授权操作。
    目录