Compartilhar via


Como cortar um arquivo de vídeo (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

Os métodos TrimStartTime e TrimStopTime no MediaTranscoder cortam um arquivo de mídia.

Neste exemplo, dois pontos de edição são definidos: um ponto inicial e um ponto final. Esses pontos especificam a porção do vídeo que será cortada. O objeto MediaTranscoder produz como saída um arquivo com o mesmo perfil de codificação do arquivo de origem, mas com o vídeo cortado nos dois pontos de edição.

Este tutorial descreve como usar a classe FileOpenPicker para abrir um arquivo de vídeo do sistema, a classe MediaTranscoder para cortar o arquivo e, finalmente, a classe FileSavePicker para salvar o arquivo recém-codificado.

Para obter outro exemplo de transcodificação em um aplicativo do Tempo de Execução do Windows em JavaScript, veja a Exemplo de transcodificação de mídia.

Pré-requisitos

Este tópico presume que você possa criar um aplicativo básico da Windows Store em JavaScript. Para obter ajuda para criar seu primeiro aplicativo, veja Criar seu primeiro aplicativo da Windows Store em JavaScript.

Instruções

Etapa 1: Criar um novo projeto

Comece criando um aplicativo da Windows Store em JavaScript, em branco.

Etapa 2: Selecionar um arquivo de origem e criar um arquivo de destino

Use a classe FileOpenPicker para selecionar um arquivo de origem e a classe FileSavePicker para criar o arquivo de destino. Defina as propriedades SuggestedStartLocation e FileTypeFilter no FileOpenPicker. No objeto FileSavePicker, defina as propriedades SuggestedStartLocation, DefaultFileExtension, SuggestedFileName e FileTypeChoices. Observe que essa função chama uma função denominada TrimFile, que é uma função definida pelo usuário para executar a operação de transcodificação. Criaremos essa função na próxima etapa.

O aplicativo da Loja do Windows Phone em JavaScript deve usar PickSingleFileAndContinue em vez 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);
        });
};

Etapa 3: Inicializar MediaTranscoder

Crie uma nova instância de MediaTranscoder e defina as propriedades TrimStartTime e TrimStopTime. Neste exemplo, TrimStartTime é 1 segundo e TrimStopTime é 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;

Etapa 4: Cortar o arquivo

Para cortar o arquivo, chame a função assíncrona PrepareFileTranscodeAsync e, em seguida, a função TranscodeAsync no 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
        }
    })

};

Ao cortar um arquivo de mídia, não é necessário especificar um perfil de codificação no método PrepareFileTranscodeAsync. Se você omitir o perfil, o arquivo de destino terá o mesmo formato do arquivo de entrada.

Exemplo completo

O exemplo de código a seguir mostra a sequência completa de chamadas para uma operação de corte.

Em primeiro lugar, este é o código para abrir e salvar o arquivo.

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);
        });
};

Depois vem o código para transcodificar o arquivo.

/// <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 é o código para controlar o andamento, os erros e a conclusão da transcodificação.

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] + "%";
};

Tópicos relacionados

Mapas

Mapa para aplicativos da Windows Store em JavaScript

Desenvolvendo UX para aplicativos

Adicionando multimídia

Exemplos

Exemplo de transcodificação de mídia

Exemplo de extensão de mídia

Exemplo de comunicação em tempo real

Tarefas

Guia de início rápido: transcodificação

Referência

Windows.Media

Windows.Media.MediaProperties

Windows.Media.Transcoding

MediaTranscoder

TrimStartTime

TrimStopTime

PrepareTranscodeResult

TranscodeAsync