How to run ffmpeg from UWP?

Viewed 121

I want to cut videos using timestamps using ffmpeg in my UWP app.

My app is totally basic.

I have a button to select file And field for timestamps

I am able to cut videos using cmd. But how can I do that in UWP?

2 Answers

You should consider using MediaComposition (Microsoft link). Some examples of what you want to achieve :

private void TrimClipBeforeCurrentPosition()
{
    var currentClip = composition.Clips.FirstOrDefault(
        mc => mc.StartTimeInComposition <= mediaPlayerElement.MediaPlayer.PlaybackSession.Position &&
        mc.EndTimeInComposition >= mediaPlayerElement.MediaPlayer.PlaybackSession.Position);

    TimeSpan positionFromStart = mediaPlayerElement.MediaPlayer.PlaybackSession.Position - currentClip.StartTimeInComposition;
    currentClip.TrimTimeFromStart = positionFromStart;

} 

private async Task RenderCompositionToFile()
{
    var picker = new Windows.Storage.Pickers.FileSavePicker();
    picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
picker.FileTypeChoices.Add("MP4 files", new List<string>() { ".mp4" });
picker.SuggestedFileName = "RenderedComposition.mp4";

Windows.Storage.StorageFile file = await picker.PickSaveFileAsync();
if (file != null)
{
    // Call RenderToFileAsync
    var saveOperation = composition.RenderToFileAsync(file, MediaTrimmingPreference.Precise);

    saveOperation.Progress = new AsyncOperationProgressHandler<TranscodeFailureReason, double>(async (info, progress) =>
    {
        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() =>
        {
            ShowErrorMessage(string.Format("Saving file... Progress: {0:F0}%", progress));
        }));
    });
    saveOperation.Completed = new AsyncOperationWithProgressCompletedHandler<TranscodeFailureReason, double>(async (info, status) =>
    {
        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() =>
        {
            try
            {
                var results = info.GetResults();
                if (results != TranscodeFailureReason.None || status != AsyncStatus.Completed)
                {
                    ShowErrorMessage("Saving was unsuccessful");
                }
                else
                {
                    ShowErrorMessage("Trimmed clip saved to file");
                }
            }
            finally
            {
                    // Update UI whether the operation succeeded or not
                }

        }));
    });
}
else
{
    ShowErrorMessage("User cancelled the file selection");
}

}

mediaclip4trim.TrimTimeFromStart = _Starttime; mediaclip4trim.TrimTimeFromEnd = _Stoptime;

this will cut your trimmed clip from composition and save composition

Related