Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Traitement multimédia

Dernière mise à jour :Sep 15, 2026

Le traitement multimédia convertit un fichier audio ou vidéo en un ou plusieurs autres fichiers audio ou vidéo afin de s'adapter à différentes bandes passantes réseau, appareils et besoins utilisateurs. Il inclut des fonctionnalités telles que le transcodage vidéo, les captures d'écran vidéo et les filigranes vidéo. Cette rubrique fournit des exemples d'appels d'API utilisant le kit de développement logiciel (SDK) Python pour le traitement multimédia. Les exemples couvrent la soumission de tâches de transcodage pour des scénarios tels que le chiffrement HLS, le transcodage standard et le remplacement de filigrane. Ils expliquent également comment soumettre des tâches de capture d'écran, interroger les données de capture d'écran et prétraiter les vidéos dans le studio de production.

Notes d'utilisation

  • Tous les exemples de cette rubrique utilisent une paire AccessKey pour initialiser une instance de client.

  • Pour obtenir des détails sur les paramètres de requête et de réponse, consultez Alibaba Cloud OpenAPI Explorer et ouvrez l'onglet API Documentations.

  • Pour consulter des exemples de SDK pour d'autres opérations d'API, rendez-vous sur Alibaba Cloud OpenAPI Explorer. Dans l'onglet Parameters, spécifiez les paramètres et lancez l'appel. Sélectionnez ensuite la version du SDK et le langage dans l'onglet SDK Sample Code pour afficher et télécharger le code.

  • Les exemples de cette rubrique utilisent le SDK V1.0. Pour les exemples V2.0, sélectionnez la version correcte du SDK dans OpenAPI Explorer.

Initialiser un client

Avant d'utiliser le SDK, initialisez un client. Pour plus d'informations, consultez la section Initialisation.

Soumettre une tâche de transcodage standard

Appelez l'API SubmitTranscodeJobs pour générer un exemple de code SDK permettant de soumettre une tâche de transcodage standard.

Adresse du portail OpenAPI d'Alibaba Cloud :SubmitTranscodeJobs.

Exemple de code :

Remarque

Le code suivant illustre un transcodage sans chiffrement. Pour plus d'informations sur le chiffrement vidéo pris en charge par Alibaba Cloud, consultez la section Cryptographie propriétaire d'Alibaba Cloud.

"""
* Construct watermark parameters to be overridden. You can override only the URL of an image watermark and the content of a text watermark.
* Make sure that the ID of the watermark that you want to overwrite is associated with the ID of the transcoding template that you use. The ID of the transcoding template is specified by TranscodeTemplateId.
* You can call this operation to add only a watermark whose ID is associated with the ID of the transcoding template that you use.
"""
def build_override_params():
    # Override watermarks.
    watermarks = []

    // Override an image watermark. Example of the URL of an image file: https://192.168.0.0/16/watermarks/sample****.png.
    watermark1 = {'WatermarkId': '<watermarkId>', 'FileUrl': '<your File URL>'}
    watermarks.append(watermark1)

    # Override a text watermark.
    watermark2 = {'WatermarkId': '<watermarkId>', 'Content': 'new Text'}
    watermarks.append(watermark2)

    return {'Watermarks': watermarks}

"""  Start transcoding.   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def normal_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # Specify the ID of the video that you want to transcode.
    request.set_VideoId('<videoId>')

    # Specify the transcoding template group.
    request.set_TemplateGroupId('<templateGroupId>')

    """
    # Configure optional parameters to overwrite watermarks.
    overrideParams = build_override_params()
    request.set_OverrideParams(json.dumps(overrideParams))
    """

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    jobs = normal_submit_transcode_jobs(clt)
    print(jobs['TranscodeJobs']['TranscodeJob'])
    print(json.dumps(jobs, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

Soumettre une tâche de transcodage avec chiffrement HLS activé

Appelez l'opération SubmitTranscodeJobs pour soumettre une tâche de transcodage avec le chiffrement HLS activé.

Adresse du portail OpenAPI d'Alibaba Cloud :SubmitTranscodeJobs.

Exemple de code :

Remarque

Le code suivant illustre un transcodage avec chiffrement HLS activé. Pour plus d'informations, consultez la section Chiffrement HLS.

"""
* Optional configurations of HLS encryption. If you do not use HLS encryption, these configurations are not required.
"""
from aliyunsdkvod.request.v20170321 import GenerateKMSDataKeyRequest
from aliyunsdkcore.http import protocol_type
def build_encrypt_config(clt):
    try:
        # Generate a random data key for encryption. The response contains the plaintext and ciphertext of the data key.
        # Specify only the ciphertext for HLS encryption.
        request = GenerateKMSDataKeyRequest.GenerateKMSDataKeyRequest()

        request.set_protocol_type(protocol_type.HTTPS)
        request.set_accept_format('JSON')
        response = json.loads(clt.do_action_with_exception(request))

        // The URI of the operation that is used to decrypt the data key. To obtain the URI, concatenate the URL of the decryption service and the ciphertext of the data key. The ciphertext to decrypt varies among videos. Take note that you must deploy the decryption service.
        # You can customize the name of the Ciphertext parameter. The name in this example is only for reference.
        # Example of decryptKeyUri: http://example.aliyundoc.com/decrypt?' + 'Ciphertext=' + response['CiphertextBlob.
        decryptKeyUri = ['<your decryptKeyUri>']

        return {'DecryptKeyUri': decryptKeyUri, 'KeyServiceType': 'KMS', 'CipherText': response['CiphertextBlob']}

    except Exception as e:
        print(e)
        #print(traceback.format_exc())
        return None

"""  Start transcoding.   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def hlsencrypt_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # Specify the ID of the video that you want to transcode.
    request.set_VideoId('<videoId>')

    # Specify the transcoding template group.
    request.set_TemplateGroupId('<templateGroupId>')

    # Use Key Management Service (KMS) to generate a random encryption key.
    encryptConfig = build_encrypt_config(clt)
    if encryptConfig is not None:
        request.set_EncryptConfig(json.dumps(encryptConfig))

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    jobs = hlsencrypt_submit_transcode_jobs(clt)
    print(jobs['TranscodeJobs']['TranscodeJob'])
    print(json.dumps(jobs, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

Soumettre une tâche de capture d'écran

Appelez l'opération SubmitSnapshotJob pour soumettre une tâche de capture d'écran.

Adresse du portail OpenAPI d'Alibaba Cloud :SubmitTranscodeJobs.

Exemple de code :

Remarque

Pour savoir comment créer un modèle de capture d'écran, consultez la section Créer un modèle de capture d'écran.

from aliyunsdkvod.request.v20170321 import SubmitSnapshotJobRequest
def submit_snapshot_job(clt):
    request = SubmitSnapshotJobRequest.SubmitSnapshotJobRequest()

    # Specify the ID of the video from which you want to capture snapshots.
    request.set_VideoId('<videoId>')

    # Specify the ID of the snapshot template.
    #request.set_SnapshotTemplateId('<snapshotTemplateId>')

    # If you specify the ID of the snapshot template, the following parameters are ignored:
    request.set_Count(50)
    request.set_SpecifiedOffsetTime(0)
    request.set_Interval(1)
    request.set_Width(200)
    request.set_Height(200)

    # Configure image sprite-related parameters. This step is optional.
    spriteSnapshotConfig = {'CellWidth': 120, 'CellHeight': 68, 'Columns': 3,
                            'Lines': 10, 'Padding': 20, 'Margin': 50}
    # Specify whether to retain the source image after an image sprite is generated.
    spriteSnapshotConfig['KeepCellPic'] = 'keep'
    spriteSnapshotConfig['Color'] = 'tomato'
    request.set_SpriteSnapshotConfig(json.dumps(spriteSnapshotConfig))

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    job = submit_snapshot_job(clt)
    print(json.dumps(job, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

Interroger les données de capture d'écran

Appelez l'opération ListSnapshots pour interroger les données de capture d'écran.

Adresse du portail OpenAPI d'Alibaba Cloud :SubmitTranscodeJobs.

Prétraiter les vidéos dans le studio de production

Appelez l'opération SubmitPreprocessJobs pour prétraiter les vidéos dans le studio de production.

Adresse du portail OpenAPI d'Alibaba Cloud :SubmitTranscodeJobs.

Documents connexes

  • Traitement multimédia : décrit les capacités de traitement multimédia fournies par ApsaraVideo for VOD, y compris les types de capacités, les scénarios d'utilisation et les détails de chaque capacité de traitement multimédia.

  • FAQ sur le transcodage : cette section décrit les problèmes courants et les suggestions de traitement lors de l'utilisation du transcodage vidéo à la demande.