Усечение видеофайла (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. В случае разработки приложений для Windows 10 см. раздел последняя документация]

Для усечения файлов мультимедиа используются методы TrimStartTime и TrimStopTime класса MediaTranscoder.

В этом примере задаются две точки редактирования: начальная и конечная. Они отмечают часть видеозаписи для усечения. Объект MediaTranscoder сохраняет результат в файл с тем же профилем кодирования, что и у исходного файла, но усекает видеозапись в двух точках монтажа.

В этом учебнике описывается, как открыть видеофайл в системе с помощью класса FileOpenPicker, затем выполнить его усечение с помощью класса MediaTranscoder, и наконец сохранить новый закодированный файл с помощью класса FileSavePicker.

Другой пример перекодировки в приложении среды выполнения Windows на JavaScript см. в разделе Образец перекодировки файла мультимедиа.

Необходимые условия

Предполагается, что вы умеете создавать простые приложения Магазина Windows на JavaScript. Дополнительные сведения о создании первого приложения см. в разделе Создание первого приложения Магазина Windows на JavaScript.

Инструкции

Этап 1: Создание нового проекта

Создайте пустое приложение Магазина Windows на JavaScript.

Этап 2: Выбор исходного файла и создание конечного файла

Используйте класс FileOpenPicker, чтобы выбрать исходный файл, и класс FileSavePicker, чтобы создать конечный файл. Задайте свойства SuggestedStartLocation и FileTypeFilter объекта FileOpenPicker. У объекта FileSavePicker задайте свойства SuggestedStartLocation, DefaultFileExtension, SuggestedFileName и FileTypeChoices. Обратите внимание, что эта функция вызывает функцию TrimFile. Это определяемая пользователем функция, которая выполняет перекодировку. Она будет создана на следующем этапе.

Приложение Магазина Windows Phone на JavaScript должно использовать PickSingleFileAndContinue вместо 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);
        });
};

Этап 3: Инициализация MediaTranscoder

Создайте новый экземпляр объекта MediaTranscoder и задайте его свойства TrimStartTime и TrimStopTime. В данном примере TrimStartTime равняется 1 секунде, а TrimStopTime — 9 секундам.

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;

Этап 4: Усечение файла

Чтобы выполнить усечение файла, вызовите асинхронную функцию PrepareFileTranscodeAsync, а затем вызовите функцию TranscodeAsync объекта 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
        }
    })

};

Когда вы усекаете файл мультимедиа, вам не нужно указывать профиль кодирования в методе PrepareFileTranscodeAsync. Если профиль не указан, конечный файл будет иметь тот же формат, что и исходный файл.

Полный пример

В следующем образце кода приводится полная последовательность вызовов для операции усечения.

Сначала — код для открытия и сохранения файла.

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

Далее — код для перекодировки файла.

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

};

Наконец, код для обработки хода перекодировки, ошибок и завершения операции.

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

Связанные разделы

Схемы

Схема создания приложений Магазина Windows на JavaScript

Проектирование взаимодействия с пользователем в приложениях

Добавление мультимедиа

Примеры

Образец перекодировки файла мультимедиа

Образец расширения мультимедиа

Образец связи в реальном времени

Задачи

Краткое руководство. Перекодировка

Ссылки

Windows.Media

Windows.Media.MediaProperties

Windows.Media.Transcoding

MediaTranscoder

TrimStartTime

TrimStopTime

PrepareTranscodeResult

TranscodeAsync