Compartilhar via


Guia de início rápido: transcodificando arquivos 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 ]

A API Windows.Media.Transcoding transcodifica um arquivo de vídeo de um formato para outro.

Transcodificação é a conversão de um arquivo de mídia digital como, por exemplo, um arquivo de vídeo ou de áudio, de um formato para outro. Isso costuma ser realizado por meio da decodificação e recodificação do arquivo. Por exemplo, você pode converter um arquivo do Windows Media em MP4 para que ele possa ser reproduzido em um dispositivo portátil compatível com o formato MP4. Ou você pode converter um arquivo de vídeo de alta definição em uma definição inferior. Nesse caso, o arquivo recodificado pode usar o mesmo codec que o arquivo original, mas ele teria um perfil de codificação diferente.

Este tutorial mostra como transcodificar um arquivo de vídeo para o formato MP4. Ele descreve como usar a classe FileOpenPicker para abrir um arquivo de vídeo do sistema e, então, a classe MediaTranscoder para transcodificar o arquivo de vídeo para o formato MP4. Finalmente, ele descreve como usar a classe FileSavePicker para salvar o arquivo recém-codificado.

A listagem completa de códigos nesse guia de início rápido está incluída ao final desse tutorial. Adicione este código ao seu arquivo Program.js.

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

Pré-requisitos

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

Instruções

1. Criar um novo projeto

Comece criando um aplicativo da Windows Store em JavaScript, em branco. Para saber mais, veja Criar o seu primeiro aplicativo da Windows Store em JavaScript.

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 esse método chama um método nomeado TranscodeFile. Essa é uma função definida pelo usuário que realiza 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 no lugar de PickSingleFileAsync.

function transcodeVideoFile() {
    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;

            TranscodeFile(source, destination);
        });
};

3. Criar um perfil de codificação

O perfil de codificação contém as configurações que determinam como o arquivo de destino será codificado. É aí que você tem o maior número de opções ao transcodificar um arquivo.

O namespace Windows.Media.MediaProperties fornece um conjunto de perfis de codificação predefinidos:

  • Áudio AAC (M4A)
  • Áudio MP3
  • Áudio do Windows Media (WMA)
  • Vídeo MP4 (Vídeo H.264 mais áudio AAC)
  • Vídeo do Windows Media (WMV)

Os primeiros três perfis dessa lista contêm apenas áudio. Os outros dois contêm vídeo e áudio.

O código a seguir cria um perfil para vídeo MP4.

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

O método estático CreateMp4 cria um perfil de codificação MP4. O parâmetro para esse método fornece a resolução de destino do vídeo. Nesse caso, VideoEncodingQuality.hd720p significa 1280 x 720 pixels a 30 quadros por segundo. ("720p" significa 720 linhas de varredura progressiva por quadro.) Os outros métodos de criação de perfis predefinidos seguem todos o mesmo padrão.

Alternativamente, você pode criar um perfil que corresponda a um arquivo de mídia usando o método Windows.Media.MediaProperties.MediaEncodingProfile.CreateFromFileAsync. Ou, se você sabe exatamente quais configurações de codificação deseja, você pode criar um novo objeto Windows.Media.MediaProperties.MediaEncodingProfile e preencher os detalhes do perfil.

4. Transcodificar o arquivo

Para transcodificar o arquivo, crie um novo objeto MediaTranscoder e chame o método MediaTranscoder.PrepareFileTranscodeAsync. Passe o arquivo de origem, o arquivo de destino e o perfil de codificação. Em seguida, chame a função TranscodeAsync no objeto PrepareTranscodeResult que foi retornado da operação de transcodificação assíncrona. Você também pode criar funções para manipulação de erros, progresso e conclusão de operação assíncrona.

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

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

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

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

O método PrepareFileTranscodeAsync é assíncrono. Isso permite que a transcodificação ocorra em tela de fundo enquanto a interface do usuário permanece respondendo.

Você também deve atualizar a interface do usuário e manipular qualquer erro que ocorra.

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

Resumo

A amostra de código abaixo mostra a sequência completa de chamadas para a operação de transcodificação.

Primeiro, o código para abrir e salvar o arquivo.

function transcodeVideoFile() {
    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;

            TranscodeFile(source, destination);
        });
};

Em seguida, o código para transcodificar o arquivo.

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

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

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

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

Finalmente, o código para manipulação do progresso, de erro e de 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

Como cortar um arquivo de vídeo

Referência

Windows.Media

Windows.Media.MediaProperties

Windows.Media.Transcoding

MediaTranscoder

PrepareTranscodeResult

TranscodeAsync

Outros recursos

Formatos de áudio e vídeo aceitos

Desempenho de áudio e vídeo