媒体转码

更新时间:2025-02-17 08:30:47

媒体转码是智能媒体管理提供的对多种视频格式进行转换的处理能力。它以经济、易用、弹性和高可扩展的音视频转换方法,在任何时间、任何地点、任何互联网设备上对视频进行转码等处理,帮助您将存储于OSS的音视频转码成适合在PC、TV以及移动终端上播放的格式。

功能简介

功能包括:视频转码、视频转封装、视频转HLS、视频转动图、视频拼接、视频截图、视频截雪碧图、音频转码、音频提取、字幕提取、视频加水印,视频去台标,视频超分辨率等。

您可以通过OpenAPI 门户或使用OSS控制台通过相关接口对视频文件进行处理。有关媒体转码各功能详细介绍和使用,可参见媒体处理媒体处理参数

应用场景

终端覆盖、网络适配

转换媒体分辨率和码率,适应不同终端和网络环境播放。

高效编码、降低成本

在保证画质前提下,以高效编码算法,提质降码,减少播放卡顿并节省存储和流量费用。

智能生产、内容再造

利用视频AI和超分技术、媒体处理技术,实现低画质素材高清重生、视频水印、截图、剪辑等内容再造。

产品优势

对比项

阿里云转码

自建转码

对比项

阿里云转码

自建转码

转码能力

高速稳定的并行转码系统,按需动态调整转码资源,自动扩容/缩容,应对高并发转码需求无缝扩展集群资源。

难以支撑大规模高并发转码任务。

转码算法

强大的计算资源,先进的视频处理算法。

依赖开源转码服务。

功能

视频转码,视频转封装,视频转HLS,视频转动图,视频拼接,视频截图,视频截雪碧图,音频转码,音频提取,字幕提取等。

需要自行对接开源转码服务,从底层搭建转码服务。

支持音视频格式列表

分类

格式

分类

格式

音频

AAC、MP3、WAV、FLAC、WMA、AC3、OPUS等所有主流格式。

视频

MP4、MPEG-TS、MKV、MOV、AVI、FLV、M3U8、WebM、WMV、RM、VOB等多种主流格式。

前提条件

转码流程

将视频文件上传到OSS存储空间,创建媒体转码任务,任务执行成功后,转码后的文件存储在OSS中。

image..png

创建媒体转码任务

  1. 用户将需要转码的文件上传至对象存储服务(OSS)。

    image

  2. 调用CreateMediaConvertTask - 创建媒体转码任务接口创建媒体转码任务。

    说明
    • 如在转码过程中需要进行视频截图,请勿设置target.uritarget.container。

    • 媒体转码过程不支持查看转码进度。

    重要

    任务开始执行后,任务信息只保存7天,超过7天则无法再获取。您可以通过以下几种方式及时获取任务信息:

代码示例

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> imm20200930Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/imm
        config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        notification_mns = imm_20200930_models.MNS(
            topic_name='test-mns'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        targets_0 = imm_20200930_models.CreateMediaConvertTaskRequestTargets(
            uri='oss://test-bucket/test_convert',
            container='mkv'
        )
        sources_0 = imm_20200930_models.CreateMediaConvertTaskRequestSources(
            uri='oss://test-bucket/test.mp4'
        )
        create_media_convert_task_request = imm_20200930_models.CreateMediaConvertTaskRequest(
            project_name='imm_test',
            sources=[
                sources_0
            ],
            targets=[
                targets_0
            ],
            notification=notification
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            client.create_media_convert_task_with_options(create_media_convert_task_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        notification_mns = imm_20200930_models.MNS(
            topic_name='test-mns'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        targets_0 = imm_20200930_models.CreateMediaConvertTaskRequestTargets(
            uri='oss://test-bucket/test_convert',
            container='mkv'
        )
        sources_0 = imm_20200930_models.CreateMediaConvertTaskRequestSources(
            uri='oss://test-bucket/test.mp4'
        )
        create_media_convert_task_request = imm_20200930_models.CreateMediaConvertTaskRequest(
            project_name='imm_test',
            sources=[
                sources_0
            ],
            targets=[
                targets_0
            ],
            notification=notification
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            await client.create_media_convert_task_with_options_async(create_media_convert_task_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

轻量消息队列(原MNS)返回示例

{
    "TopicOwner": "13791863495xxxxx",
    "Message": "{\"id\":\"0D9-1ymvK4ClmWkM1AG6PQSlR0GTleo\",\"source\":\"acs.imm\",\"type\":\"imm:Task:MediaConvert\",\"subject\":\"acs:imm:cn-hangzhou:1379186349531844:imm_test/imm:Task:MediaConvert\",\"time\":\"1732869510457\",\"content\":\"{\\\"ProjectName\\\":\\\"imm_test\\\",\\\"DatasetName\\\":\\\"\\\",\\\"RequestId\\\":\\\"E082E358-DBAA-58D2-927B-DF323A53097F\\\",\\\"StartTime\\\":\\\"2024-11-29T08:38:30.457Z\\\",\\\"EndTime\\\":\\\"2024-11-29T08:38:33.145Z\\\",\\\"UserData\\\":\\\"\\\",\\\"TaskType\\\":\\\"MediaConvert\\\",\\\"TaskId\\\":\\\"MediaConvert-1bb26bda-22aa-44c4-bf71-06b0ba2c6190\\\",\\\"Status\\\":\\\"Succeeded\\\",\\\"Code\\\":\\\"\\\",\\\"Message\\\":\\\"\\\",\\\"EventSourceId\\\":\\\"\\\",\\\"Sources\\\":[{\\\"URI\\\":\\\"oss://test-bucket/test.mp4\\\",\\\"SubtitleSources\\\":null}],\\\"Targets\\\":[{\\\"URI\\\":\\\"oss://test-bucket/test_convert\\\",\\\"Subtitle\\\":{\\\"Extract\\\":{\\\"URI\\\":\\\"\\\"}},\\\"Image\\\":{\\\"Sprites\\\":null,\\\"Snapshots\\\":null,\\\"Animations\\\":null}}]}\"}",
    "Subscriber": "13791863495xxxxx",
    "PublishTime": "1732869513285",
    "SubscriptionName": "test-project",
    "MessageMD5": "5AF4CC569DBAC66C6F7976308361E474",
    "TopicName": "test-mns",
    "MessageId": "D83772F216F27F8D7FB093C444449FE9"
}

FAQ

  • 视频转码请求失败怎么办?

    • 如遇视频转码请求失败,可以尝试设置TargetAudio.Codec参数为非copy后重试。详情见文档TargetAudio

  • 视频转码后文件为什么变大了?

    • 视频转码后生成的文件比源文件大,原因主要是由于音视频转码为有损压缩,压缩算法允许输出更大的媒体文件,但是这样不会带来比源文件更好的图像/声音质量(只是损失的更小)。

    • 如您需要控制输出文件大小,可以通过设置TargetVideo参数下的BitrateOption/Bitrate/CRF控制输出文件视频流的码率,或通过设置TargetAudio参数下的BitrateOption/Bitrate/Quality控制输出文件音频流的码率。

  • 视频转码任务是否支持取消?

    • 不支持取消。

  • 视频转码后方向不对,如何调整转码后视频方向?

    • 视频处理参数配置TargetVideo中可以设置Codec为非copy,AdaptiveResolutionDirectiontrue,可开启自适应分辨率方向。

  • 视频转码如何固定码率,只设置bitrate参数为什么无法进行固定码率转码?

    • 参数TargetVideo中,目前比特率bitrate设置的是vbr,不支持cbr。vbrcbr区别不大,差异主要在瞬时码率上,如果有需求可以通过设置maxbitrate参数。

  • 如何获取转码成功后的视频的播放时长?

  • 调用IMM CreateMediaConvertTask接口是否支持RocketMQ 5.0?

    • 暂不支持,目前支持RocketMQ 4.0。

  • 本页导读 (1)
  • 功能简介
  • 应用场景
  • 产品优势
  • 支持音视频格式列表
  • 前提条件
  • 转码流程
  • 创建媒体转码任务
  • FAQ