Creación de una superposición de imagen

Logotipo de Media Services v3


¿Busca la documentación de Media Services, versión 2?

Media Services permite superponer sobre un vídeo una imagen, un archivo de audio u otro vídeo. La entrada debe especificar exactamente un solo archivo de imagen. Puede especificar un archivo de imagen en formato JPG, PNG, GIF o BMP, un archivo de audio (por ejemplo, un archivo WAV, MP3, WMA o M4A) o un archivo de vídeo en un formato admitido.

Prerrequisitos

    {
    "AadClientId": "",
    "AadEndpoint": "https://login.microsoftonline.com",
    "AadSecret": "",
    "AadTenantId": "",
    "AccountName": "",
    "ArmAadAudience": "https://management.core.windows.net/",
    "ArmEndpoint": "https://management.azure.com/",
    "Location": "",
    "ResourceGroup": "",
    "SubscriptionId": ""
    }

Si todavía no sabe cómo crear transformaciones, se recomienda que complete las siguientes actividades:

Una vez que esté familiarizado con las Transformaciones, descargue el ejemplo de superposiciones.

Ejemplo de valor preestablecido de superposiciones

Clone el repositorio de .NET de Media Services de ejemplo.

    git clone https://github.com/Azure-Samples/media-services-v3-dotnet.git

Vaya a la carpeta de la solución e inicie Visual Studio Code o Visual Studio 2019.

Hay varios ejemplos de codificación disponibles en la carpeta "VideoEncoding". Abra el proyecto ubicado en la carpeta VideoEncoding/Encoding_OverlayImage de la solución para empezar a aprender a usar superposiciones.

El proyecto de ejemplo contiene dos archivos multimedia, a saber, un archivo de vídeo y una imagen de logotipo para superponerla encima del vídeo:

  • ignite.mp4
  • cloud.png

En este ejemplo primero creamos una transformación personalizada que puede superponer la imagen sobre el vídeo en el método CreateCustomTransform. Mediante la propiedad Filters de StandardEncoderPreset , asignamos una nueva colección Filters que contiene la configuración de superposición de vídeo.

Un objeto VideoOverlay contiene una propiedad denominada InputLabel, que es necesaria para asignar desde la lista de archivos de entrada de trabajo enviados al trabajo y localizar el archivo de origen de entrada adecuado que se debe usar como imagen superpuesta o vídeo. Al enviar el trabajo, se usa este mismo nombre de etiqueta para que coincida con el valor de la transformación. En el ejemplo se usa el nombre de etiqueta "logo", como se aprecia en la constante de cadena OverlayLabel.

En el siguiente fragmento de código se muestra cómo se formatea la transformación para usar una superposición.

new TransformOutput
                {
                    Preset = new StandardEncoderPreset
                    {
                        Filters = new Filters
                        {
                            Overlays = new List<Overlay>
                            {
                                new VideoOverlay
                                {
                                    InputLabel = OverlayLabel,   // same as the one used in the JobInput to identify which asset is the overlay image
                                    Position = new Rectangle( "1200","670") // left, top position of the overlay in absolute pixel position relative to the source videos resolution. 
    
                                }
                            }
                        },
                        Codecs = new List<Codec>
                        {
                            new AacAudio
                            {
                            },
                            new H264Video
                            {
                                KeyFrameInterval = TimeSpan.FromSeconds(2),
                                Layers = new List<H264Layer>
                                {
                                    new H264Layer
                                    {
                                        Profile = H264VideoProfile.Baseline,
                                        Bitrate = 1000000, // 1Mbps
                                        Width = "1280",
                                        Height = "720"
                                    },
                                    new H264Layer   // Adding a second layer to see that the image also is scaled and positioned the same way on this layer. 
                                    {
                                        Profile = H264VideoProfile.Baseline,
                                        Bitrate = 600000, // 600 kbps
                                        Width = "480",
                                        Height = "270"
                                    }
                                }
                            }
                        },
                        Formats = new List<Format>
                        {
                            new Mp4Format
                            {
                                FilenamePattern = "{Basename}_{Bitrate}{Extension}",
                            }
                        }
                    }
                }

Al enviar el trabajo a la transformación, primero debe crear los dos activos de entrada.

  • Activo 1: en este ejemplo, el primer recurso creado es el archivo de vídeo local "ignite.mp4". Este es el vídeo que se usará como fondo de la composición y sobre el que superpondrá una imagen de logotipo.
  • Activo 2: en este ejemplo, el segundo recurso (almacenado en la variable "overlayImageAsset") contiene el archivo .png que se usará para el logotipo. Esta imagen se colocará sobre el vídeo durante la codificación.

Cuando se crea el trabajo en el método SubmitJobAsync, primero se construye una matriz JobInput mediante un objeto List<>. Este objeto contendrá las referencias a los dos activos de origen.

Con el fin de identificar y emparejar el activo de entrada que se va a usar como superposición en el filtro definido en la transformación anterior, se usa de nuevo el nombre de etiqueta "logotipo" para controlar la coincidencia. El nombre de etiqueta se agrega a JobInputAsset para la imagen .png. De este modo, se indica a la transformación qué activo debe usar al realizar la operación de superposición. Puede volver a usar esta misma transformación con distintos activos almacenados en Media Services que contengan varios logotipos o gráficos que quiera superponer y simplemente cambiar el nombre del activo que se pasa al trabajo. Podrá usar el mismo nombre de etiqueta "logo" para que la transformación coincida con él.

    // Add both the Video and the Overlay image assets here as inputs to the job.
    List<JobInput> jobInputs = new List<JobInput>() {
        new JobInputAsset(assetName: inputAssetName),
        new JobInputAsset(assetName: overlayAssetName, label: OverlayLabel)
    };

Ejecute el ejemplo seleccionando el proyecto en la ventana "Ejecutar y depurar" de Visual Studio Code. El ejemplo mostrará el progreso de la operación de codificación y, por último, descargará el contenido en la carpeta /Output de la raíz del proyecto o, en el caso de la versión completa de Visual Studio, puede que en la carpeta /bin/Output.

El ejemplo también publica el contenido para streaming y genera las direcciones URL de archivo de manifiesto HLS, DASH y Smooth Streaming, que se pueden usar en cualquier reproductor compatible. También puede copiar fácilmente la dirección URL del manifiesto en la demostración de Azure Media Player, pegar la dirección URL que termina por "/manifest" en el cuadro URL y, a continuación, hacer clic en Actualizar reproductor.

Referencias de API

Referencias de SDK de .NET adicionales

Pasos siguientes

Otras guías de procedimientos para crear una transformación: