Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode usar o Windows. Media.Transcoding APIs para transcodificar arquivos de vídeo de um formato para outro.
Transcodificação é a conversão de um arquivo de mídia digital, como um arquivo de áudio ou vídeo, de um formato para outro. Isso geralmente é feito fazendo a decodificação e, em seguida, a recodificação do arquivo. Por exemplo, você pode converter um arquivo de mídia Windows em MP4 para que ele possa ser reproduzido em um dispositivo portátil que dê suporte ao formato MP4. Ou você pode converter um arquivo de vídeo de alta definição em uma resolução mais baixa. Nesse caso, o arquivo codificado novamente pode usar o mesmo codec que o arquivo original, mas ele teria um perfil de codificação diferente.
Selecionar arquivos de origem e de destino
A maneira como seu aplicativo determina os arquivos de origem e de destino para transcodificação depende da implementação. Este exemplo usa um FileOpenPicker e um FileSavePicker para permitir que o usuário escolha uma origem e um arquivo de destino.
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
// Initialize the picker with the window handle (required for WinUI desktop apps).
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(openPicker, hwnd);
openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
openPicker.FileTypeFilter.Add(".wmv");
openPicker.FileTypeFilter.Add(".mp4");
StorageFile source = await openPicker.PickSingleFileAsync();
var savePicker = new Windows.Storage.Pickers.FileSavePicker();
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, hwnd);
savePicker.SuggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
savePicker.DefaultFileExtension = ".mp4";
savePicker.SuggestedFileName = "New Video";
savePicker.FileTypeChoices.Add("MPEG4", new string[] { ".mp4" });
StorageFile destination = await savePicker.PickSaveFileAsync();
Criar um perfil de codificação de mídia
O perfil de codificação contém as configurações que determinam como o arquivo de destino será codificado. É aqui que você tem o maior número de opções ao transcodificar um arquivo.
A classe MediaEncodingProfile fornece métodos estáticos para criar perfis de codificação predefinidos:
Métodos para criar perfis de codificação somente áudio
| Método | Profile |
|---|---|
| CreateAlac | Áudio do ALAC (Apple Lossless Audio Codec) |
| CreateFlac | Áudio FLAC (Codec de Áudio Sem Perdas Livre) |
| CreateM4a | Áudio AAC (M4A) |
| CreateMp3 | Áudio MP3 |
| CreateWav | Áudio WAV |
| CreateWma | Windows Media Audio (WMA) |
Métodos para criar perfis de codificação de áudio/vídeo
| Método | Profile |
|---|---|
| CreateAv1 | vídeo AOMedia Video 1 (AV1) |
| CreateAvi | AVI |
| CreateHevc | Vídeo hevc (codificação de vídeo de alta eficiência), também conhecido como vídeo H.265 |
| CreateMp4 | Vídeo MP4 (vídeo H.264 mais áudio AAC) |
| CreateVp9 | Vídeo VP9 |
| CreateWmv | vídeo de mídia Windows (WMV) |
O código a seguir cria um perfil para vídeo MP4.
MediaEncodingProfile profile =
MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
O método CreateMp4 estático cria um perfil de codificação MP4. O parâmetro para esse método fornece a resolução de destino para o vídeo. Nesse caso, VideoEncodingQuality.hd720p significa 1280 x 720 pixels a 30 quadros por segundo. ("720p" significa 720 linhas de verificação progressivas por quadro.) Os outros métodos para criar perfis predefinidos seguem esse padrão.
Como alternativa, você pode criar um perfil que corresponda a um arquivo de mídia existente usando o método MediaEncodingProfile.CreateFromFileAsync . Ou, se você souber as configurações exatas de codificação desejadas, poderá criar um novo objeto MediaEncodingProfile e preencher os detalhes do perfil.
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 o método TranscodeAsync no objeto PrepareTranscodeResult que foi retornado da operação de transcodificação assíncrona.
MediaTranscoder transcoder = new MediaTranscoder();
PrepareTranscodeResult prepareOp = await
transcoder.PrepareFileTranscodeAsync(source, destination, 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:
System.Diagnostics.Debug.WriteLine("Codec not found.");
break;
case TranscodeFailureReason.InvalidProfile:
System.Diagnostics.Debug.WriteLine("Invalid profile.");
break;
default:
System.Diagnostics.Debug.WriteLine("Unknown failure.");
break;
}
}
Responder ao progresso da transcodificação
Você pode registrar eventos para serem acionados quando o progresso da operação assíncrona TranscodeAsync mudar. Esses eventos fazem parte da estrutura de programação assíncrona para aplicativos Windows e não são específicos para a API de transcodificação.
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.
}
}
Windows developer