Compartir a través de


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

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows Runtime. Si estás desarrollando para Windows 10, consulta la documentación más reciente ]

Los métodos TrimStartTime y TrimStopTime en MediaTranscoder recortan un archivo multimedia.

En este ejemplo, se establecen dos puntos de edición: un punto de inicio y uno de finalización. Estos especifican la parte del vídeo que se desea recortar. 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 JavaScript, consulta la muestra de transcodificación de multimedia.

Requisitos previos

En este tema se da por hecho que sabes crear una aplicación de la Tienda Windows básica con JavaScript. Si necesitas ayuda para crear tu primera aplicación, consulta Crear la primera aplicación de la Tienda Windows con JavaScript.

Instrucciones

Paso 1: Crear un nuevo proyecto

Comienza por la creación de una aplicación de la Tienda Windows vacía con JavaScript.

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 esta función llama a una función denominada TrimFile. Se trata de una función definida por el usuario que realiza la operación de transcodificación. Crearemos esta función en el paso siguiente.

Una aplicación de la Tienda de Windows Phone con JavaScript debe usar PickSingleFileAndContinue en lugar de PickSingleFileAsync.

function trimVideoFile() {

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

    openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.videosLibrary;
    openPicker.fileTypeFilter.replaceAll([".wmv", ".mp4"]);

    openPicker.pickSingleFileAsync().then(
        function (file) {
            source = file;

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

            savePicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.videosLibrary;
            savePicker.defaultFileExtension = ".mp4";
            savePicker.suggestedFileName = "New Video";
            savePicker.fileTypeChoices.insert("MPEG4", [".mp4"]);

            return savePicker.pickSaveFileAsync();
        }).then(
        function (file) {
            destination = file;

            // Custom function that performs the transcoding.
            TrimFile(source, destination);
        });
};

Paso 3: Inicializar MediaTranscoder

Crea una nueva instancia de MediaTranscoder y configura las propiedades TrimStartTime y TrimStopTime. En este ejemplo, TrimStartTime es 1 segundo y TrimStopTime es 9 segundos.

var profile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4(
    Windows.Media.MediaProperties.VideoEncodingQuality.hd720p);

var transcoder = new Windows.Media.Transcoding.MediaTranscoder();

// Set the start of the trim.
transcoder.trimStartTime = 1000;

// Set the end of trim.
transcoder.trimStopTime = 9000;

Paso 4: Recortar el archivo

Para recortar el archivo, llama a la función asincrónica PrepareFileTranscodeAsync y después a la función TranscodeAsync en el objeto PrepareTranscodeResult:

/// <param name="srcFile" type="IStorageFile"/>
/// <param name="destFile" type="IStorageFile"/>
function TrimFile(srcFile, destFile) {

    var profile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4(
        Windows.Media.MediaProperties.VideoEncodingQuality.hd720p);

    var transcoder = new Windows.Media.Transcoding.MediaTranscoder();

    // Set the start of the trim.
    transcoder.trimStartTime = 1000;

    // Set the end of trim.
    transcoder.trimStopTime = 9000;

    transcoder.prepareFileTranscodeAsync(srcFile, destFile, profile).then(function (result) {
        if (result.canTranscode) {
            result.transcodeAsync().then(transcodeComplete, transcoderErrorHandler, transcodeProgress);
        } else {
            // Handle error condition. result.failureReason
        }
    })

};

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.

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.

function trimVideoFile() {

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

    openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.videosLibrary;
    openPicker.fileTypeFilter.replaceAll([".wmv", ".mp4"]);

    openPicker.pickSingleFileAsync().then(
        function (file) {
            source = file;

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

            savePicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.videosLibrary;
            savePicker.defaultFileExtension = ".mp4";
            savePicker.suggestedFileName = "New Video";
            savePicker.fileTypeChoices.insert("MPEG4", [".mp4"]);

            return savePicker.pickSaveFileAsync();
        }).then(
        function (file) {
            destination = file;

            // Custom function that performs the transcoding.
            TrimFile(source, destination);
        });
};

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

/// <param name="srcFile" type="IStorageFile"/>
/// <param name="destFile" type="IStorageFile"/>
function TrimFile(srcFile, destFile) {

    var profile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4(
        Windows.Media.MediaProperties.VideoEncodingQuality.hd720p);

    var transcoder = new Windows.Media.Transcoding.MediaTranscoder();

    // Set the start of the trim.
    transcoder.trimStartTime = 1000;

    // Set the end of trim.
    transcoder.trimStopTime = 9000;

    transcoder.prepareFileTranscodeAsync(srcFile, destFile, profile).then(function (result) {
        if (result.canTranscode) {
            result.transcodeAsync().then(transcodeComplete, transcoderErrorHandler, transcodeProgress);
        } else {
            // Handle error condition. result.failureReason
        }
    })

};

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

function transcodeComplete(result) {
    // handle completion.

    // This snippet writes to an HTML control which is defined external to this snippet.
    OutputText.innerHTML = "Transcode Complete";
};

function transcoderErrorHandler(error) {
    // handle error condition
};

function transcodeProgress(percent) {

    // handle progress.
    // This snippet writes to an HTML control which is defined external to this snippet.
    ProgressText.innerHTML = "Transcode Progress: " + percent.toString().split(".")[0] + "%";
};

Temas relacionados

Guías básicas

Guía básica para crear aplicaciones de la Tienda Windows con JavaScript

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: transcodificación

Referencia

Windows.Media

Windows.Media.MediaProperties

Windows.Media.Transcoding

MediaTranscoder

TrimStartTime

TrimStopTime

PrepareTranscodeResult

TranscodeAsync