Idioma: HTML | XAML

Cómo recortar un archivo de vídeo (XAML)

Applies to Windows and Windows Phone

El objeto MediaTranscoder puede usarse para recortar un archivo multimedia.

En este ejemplo, se establecen dos puntos de edición: un punto de inicio y uno de finalización. Estos puntos de edición especifican los puntos de inicio y finalización del vídeo de salida. La salida del objeto MediaTranscoder es un archivo con el mismo perfil de codificación que el archivo de origen, pero recorta el vídeo en los dos puntos de edición.

En este tutorial se describe cómo usar la clase FileOpenPicker para abrir un archivo de vídeo del sistema, después la clase MediaTranscoder para recortar el archivo y finalmente la clase FileSavePicker para guardar el archivo recién codificado.

Para obtener otro ejemplo de transcodificación en una aplicación de Windows en tiempo de ejecución con C++, C# o Visual Basic, consulta la muestra de transcodificación de multimedia.

Requisitos previos

En este tema, se supone que puedes crear una aplicación de Windows en tiempo de ejecución básica con C++, C# o Visual Basic. Si necesitas ayuda para crear tu primera aplicación, consulta el tema sobre cómo crear tu primera aplicación de la Tienda Windows con C# o Visual Basic.

Instrucciones

Paso 1: Crear un nuevo proyecto

Comienza creando un proyecto vacío en Microsoft Visual Studio

Paso 2: Seleccionar un archivo de origen y crear un archivo de destino

Usa la clase FileOpenPicker para seleccionar un archivo de origen y la clase FileSavePicker para crear el archivo de destino. Establece las propiedades SuggestedStartLocation y FileTypeFilter en FileOpenPicker. En el objeto FileSavePicker, establece las propiedades SuggestedStartLocation, DefaultFileExtension, SuggestedFileName y FileTypeChoices. Ten en cuenta que este método llama a otro método denominado TrimFile. Se trata de un método definido por el usuario que realiza la operación de transcodificación. Crearemos este método en el paso siguiente.

Una aplicación de la Tienda de Windows Phone debe usar pickSingleFileAndContinue.


async void TrimVideoFile()
{
    Windows.Storage.StorageFile source;
    Windows.Storage.StorageFile destination;

    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

    openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
    openPicker.FileTypeFilter.Add(".wmv");
    openPicker.FileTypeFilter.Add(".mp4");

    source = await openPicker.PickSingleFileAsync();

    var savePicker = new Windows.Storage.Pickers.FileSavePicker();

    savePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.VideosLibrary;

    savePicker.DefaultFileExtension = ".mp4";
    savePicker.SuggestedFileName = "New Video";

    savePicker.FileTypeChoices.Add("MPEG4", new string[] { ".mp4" });

    destination = await savePicker.PickSaveFileAsync();

    // Method to perform the transcoding.
    TrimFile(source, destination);
}


Paso 3: Inicializar MediaTranscoder

Crea un objeto MediaEncodingProfile mediante una llamada a MediaEncodingProfile.CreateMp4. Después crea un objeto MediaTranscoder y establece la propiedad TrimStartTime en 1 segundo y la propiedad TrimStopTime en 9 segundos.


MediaEncodingProfile profile =
    MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

MediaTranscoder transcoder = new MediaTranscoder();

// Set the start of the trim.
transcoder.TrimStartTime = new TimeSpan(0, 0, 1);

// Set the end of the trim.
transcoder.TrimStopTime = new TimeSpan(0, 0, 9);


Paso 4: Recortar el archivo

Para recortar el archivo, llama al método asincrónico PrepareFileTranscodeAsync y después al método TranscodeAsync en el objeto PrepareTranscodeResult.

Ten en cuenta que el código de este ejemplo llama a un método denominado OutputText Se trata de un método auxiliar creado para proporcionar mensajes de salida a la interfaz de usuario. El código para este método se define al final de este tema.


async void TrimFile(StorageFile srcFile, StorageFile destFile)
{
    MediaEncodingProfile profile =
        MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

    MediaTranscoder transcoder = new MediaTranscoder();

    // Set the start of the trim.
    transcoder.TrimStartTime = new TimeSpan(0, 0, 1);

    // Set the end of the trim.
    transcoder.TrimStopTime = new TimeSpan(0, 0, 9);

    PrepareTranscodeResult prepareOp = await
        transcoder.PrepareFileTranscodeAsync(srcFile, destFile, profile);

    if (prepareOp.CanTranscode)
    {
        var transcodeOp = prepareOp.TranscodeAsync();
        transcodeOp.Progress +=
            new AsyncActionProgressHandler<double>(TranscodeProgress);
        transcodeOp.Completed +=
            new AsyncActionWithProgressCompletedHandler<double>(TranscodeComplete);
    }
    else
    {
        switch (prepareOp.FailureReason)
        {
            case TranscodeFailureReason.CodecNotFound:
                OutputText("Codec not found.");
                break;
            case TranscodeFailureReason.InvalidProfile:
                OutputText("Invalid profile.");
                break;
            default:
                OutputText("Unknown failure.");
                break;
        }
    }
}


Al recortar un archivo multimedia, no tienes que especificar un perfil de codificación en el método PrepareFileTranscodeAsync. Si omites el perfil, el archivo de destino tiene el mismo formato que el archivo de entrada.

Paso 5: Proporcionar información de progreso a la interfaz de usuario

Proporcionar información de progreso y estado a la interfaz de usuario puede resultar útil.


    <StackPanel Background="{StaticResource ApplicationPageBackgroundBrush}">
        <TextBlock Name="txtDisplay" Text="Display"></TextBlock>
        <TextBlock Name="txtProgress" Text="Progress"></TextBlock>
    </StackPanel>



void TranscodeProgress(IAsyncActionWithProgress<double> asyncInfo, double percent)
{
    // Display or handle progress info.
}

void TranscodeComplete(IAsyncActionWithProgress<double> asyncInfo, AsyncStatus status)
{
    asyncInfo.GetResults();
    if (asyncInfo.Status == AsyncStatus.Completed)
    {
        // Display or handle complete info.
    }
    else if (asyncInfo.Status == AsyncStatus.Canceled)
    {
        // Display or handle cancel info.
    }
    else
    {
        // Display or handle error info.
    }
}


Ejemplo completo

El siguiente ejemplo de código muestra la secuencia de llamadas completa para una operación de recorte.

Primero, este es el código para abrir y guardar el archivo.


async void TrimVideoFile()
{
    Windows.Storage.StorageFile source;
    Windows.Storage.StorageFile destination;

    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

    openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
    openPicker.FileTypeFilter.Add(".wmv");
    openPicker.FileTypeFilter.Add(".mp4");

    source = await openPicker.PickSingleFileAsync();

    var savePicker = new Windows.Storage.Pickers.FileSavePicker();

    savePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.VideosLibrary;

    savePicker.DefaultFileExtension = ".mp4";
    savePicker.SuggestedFileName = "New Video";

    savePicker.FileTypeChoices.Add("MPEG4", new string[] { ".mp4" });

    destination = await savePicker.PickSaveFileAsync();

    // Method to perform the transcoding.
    TrimFile(source, destination);
}


Después, este es el código para transcodificar el archivo.


async void TrimFile(StorageFile srcFile, StorageFile destFile)
{
    MediaEncodingProfile profile =
        MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

    MediaTranscoder transcoder = new MediaTranscoder();

    // Set the start of the trim.
    transcoder.TrimStartTime = new TimeSpan(0, 0, 1);

    // Set the end of the trim.
    transcoder.TrimStopTime = new TimeSpan(0, 0, 9);

    PrepareTranscodeResult prepareOp = await
        transcoder.PrepareFileTranscodeAsync(srcFile, destFile, profile);

    if (prepareOp.CanTranscode)
    {
        var transcodeOp = prepareOp.TranscodeAsync();
        transcodeOp.Progress +=
            new AsyncActionProgressHandler<double>(TranscodeProgress);
        transcodeOp.Completed +=
            new AsyncActionWithProgressCompletedHandler<double>(TranscodeComplete);
    }
    else
    {
        switch (prepareOp.FailureReason)
        {
            case TranscodeFailureReason.CodecNotFound:
                OutputText("Codec not found.");
                break;
            case TranscodeFailureReason.InvalidProfile:
                OutputText("Invalid profile.");
                break;
            default:
                OutputText("Unknown failure.");
                break;
        }
    }
}


A continuación, este es el código para controlar el progreso, los errores y la finalización de la transcodificación.


void TranscodeProgress(IAsyncActionWithProgress<double> asyncInfo, double percent)
{
    // Display or handle progress info.
}

void TranscodeComplete(IAsyncActionWithProgress<double> asyncInfo, AsyncStatus status)
{
    asyncInfo.GetResults();
    if (asyncInfo.Status == AsyncStatus.Completed)
    {
        // Display or handle complete info.
    }
    else if (asyncInfo.Status == AsyncStatus.Canceled)
    {
        // Display or handle cancel info.
    }
    else
    {
        // Display or handle error info.
    }
}


Finalmente, los objetos de interfaz de usuario para mostrar los mensajes de progreso y estado.


    <StackPanel Background="{StaticResource ApplicationPageBackgroundBrush}">
        <TextBlock Name="txtDisplay" Text="Display"></TextBlock>
        <TextBlock Name="txtProgress" Text="Progress"></TextBlock>
    </StackPanel>


Temas relacionados

Guías básicas
Guía básica para crear aplicaciones Windows en tiempo de ejecución con C# y Visual Basic
Guía básica para crear aplicaciones de Windows en tiempo de ejecución con C++
Diseño de la experiencia del usuario para aplicaciones
Agregar recursos multimedia
Muestras
Muestra de transcodificación de multimedia
Muestra de extensión multimedia
Muestra de comunicación en tiempo real
Tareas
Inicio rápido: transcodificar archivos de vídeo
Referencia
Windows.Media
Windows.Media.MediaProperties
Windows.Media.Transcoding
MediaTranscoder
PrepareTranscodeResult
TranscodeAsync
Otros recursos
Formatos de audio y vídeo compatibles
Optimizar recursos multimedia

 

 

Mostrar:
© 2014 Microsoft