Windows Dev Center

Linguaggio: HTML | XAML

Come ritagliare un file video (XAML)

Puoi usare l'oggetto MediaTranscoder per ritagliare un file multimediale.

In questo esempio vengono impostati due punti di modifica, ovvero un punto iniziale e uno finale. I punti di modifica specificano il punto iniziale e il punto finale del video di output. L'oggetto MediaTranscoder restituisce un file con lo stesso profilo di codifica del file di origine, ma ritaglia il video in corrispondenza dei due punti di modifica.

Questa procedura dettagliata descrive come usare la classe FileOpenPicker per aprire un file video dal sistema, quindi la classe MediaTranscoder per ritagliare il file e infine la classe FileSavePicker per salvare il nuovo file codificato.

Per un altro esempio di codifica intermedia di un'app di Windows Runtime in C++, C#, o Visual Basic, vedi l'Esempio di codifica intermedia di un file multimediale.

Prerequisiti

In questo argomento partiamo dal presupposto che tu sappia come creare una semplice app di Windows Runtime in C++, C# o Visual Basic. Per istruzioni sulla creazione della tua prima app, vedi Creare la prima app di Windows Store in C# o Visual Basic.

Istruzioni

Passaggio 1: Creare un nuovo progetto

Inizia creando un nuovo progetto in Microsoft Visual Studio.

Passaggio 2: Selezionare un file di origine e creare un file di destinazione

Usa la classe FileOpenPicker per selezionare un file di origine e la classe FileSavePicker per creare il file di destinazione. Imposta le proprietà SuggestedStartLocation e FileTypeFilter su FileOpenPicker. Sull'oggetto FileSavePicker imposta le proprietà SuggestedStartLocation, DefaultFileExtension, SuggestedFileName e FileTypeChoices. Nota che questo metodo chiama un metodo denominato TrimFile. Si tratta di un metodo definito dall'utente che esegue l'operazione di codifica intermedia. Creeremo questo metodo nel prossimo passaggio.

Le app per Windows Phone Store devono usare 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);
}


Passaggio 3: Inizializzare MediaTranscoder

Crea un ogetto MediaEncodingProfile chiamando MediaEncodingProfile.CreateMp4. Crea ora un oggetto MediaTranscoder e imposta la proprietà TrimStartTime su 1 secondo e la proprietà TrimStopTime su 9 secondi.


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


Passaggio 4: Ritagliare il file

Per ritagliare il file, chiama il metodo asincrono PrepareFileTranscodeAsync, quindi chiama il metodo TranscodeAsync sull'oggetto PrepareTranscodeResult.

Tieni presente che il codice in questo esempio chiama un metodo denominato OutputText. Si tratta di un metodo di supporto creato per visualizzare messaggi nell'interfaccia utente. Il codice di questo metodo viene definito alla fine di questo argomento.


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


Quando ritagli un file multimediale, non devi specificare un profilo di codifica nel metodo PrepareFileTranscodeAsync. Se ometti il profilo, il file di destinazione avrà lo stesso formato del file di input.

Passaggio 5: Visualizzazione dello stato di avanzamento nell'interfaccia utente

Può essere utile visualizzare lo stato di avanzamento e le informazioni sullo stato nell'interfaccia utente.


    <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.
    }
}


Esempio completo

L'esempio di codice seguente mostra la sequenza completa di chiamate per un'operazione di ritaglio.

Prima di tutto, ecco il codice per aprire e salvare il file.


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


Quindi, ecco il codice per la codifica intermedia del file.


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


Quello seguente è il codice per gestire lo stato di avanzamento, l'errore e il completamento della codifica intermedia.


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.
    }
}


Infine, gli oggetti dell'interfaccia utente per visualizzare lo stato di avanzamento e i messaggi di stato.


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


Argomenti correlati

Roadmap
Roadmap per app di Windows Runtime scritte in C# e Visual Basic
Roadmap per app di Windows Runtime scritte in C++
Progettazione dell'esperienza utente per le applicazioni
Aggiunta di elementi multimediali
Esempi
Esempio di codifica intermedia di un file multimediale
Esempio di estensione multimediale
Esempio di comunicazione in tempo reale
Attività
Guida introduttiva: Codifica intermedia di file video
Riferimento
Windows.Media
Windows.Media.MediaProperties
Windows.Media.Transcoding
MediaTranscoder
PrepareTranscodeResult
TranscodeAsync
Altre risorse
Formati audio e video supportati
Ottimizzazione delle risorse multimediali

 

 

Mostra:
© 2015 Microsoft