Слияние заставки и видео в каталоге в C#

(Обратите внимание, что этот пример был написан в Visual Studio 2010.)

В этом примере показано, как вы можете объединять заставки и видео в каталоге. Пример Слияние видео в C# показывает, как вы можете объединить два видео. Поскольку мне пришлось преобразовать много видео, я написал эту программу, чтобы объединить все видео в каталоге. Каталог должен содержать пары файлов с похожими именами, один с именем, заканчивающимся на «splash.wmv», и с именем, заканчивающимся на «base.wmv». Программа объединяет эти два в выходное видео.

Когда вы вводите путь к каталогу в текстовое поле и выбираете «Список», программа выполняет следующий код.

private void btnList_Click(object sender, EventArgs e)
{
    lstSplash.Items.Clear();
    try
    {
        foreach (string filename in Directory.GetFiles(
            txtDirectory.Text, "* splash.wmv"))
        {
            lstSplash.Items.Add(filename);
        }
        btnGo.Enabled = true;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Этот код использует Directory.GetFiles, чтобы получить список файлов в каталоге с именами, содержащими текст «splash.wmv». Он просматривает файлы и добавляет их имена в lstSplash ListBox.

Затем, если вы нажмете кнопку Go, выполняется следующий код.

private void btnGo_Click(object sender, EventArgs e)
{
    Cursor = Cursors.WaitCursor;
    Refresh();

    for (int i = 0; i < lstSplash.Items.Count; i++)
    {
        lstSplash.SelectedIndex = i;
        lstSplash.Refresh();
        MergeSplash(lstSplash.Items[i].ToString());
    }

    Cursor = Cursors.Default;
}

Обработчик событий Click кнопки зацикливается на имена файлов в списке и вызывает для каждого из них следующий метод MergeSplash.

private void MergeSplash(string splash_file)
{
    prgEncode.Value = 0;
    prgEncode.Visible = true;
    Refresh();

    try
    {
        // Создаем задание.
        using (Job job = new Job())
        {
            // Создаем MediaItem, содержащий всплеск видео.
            MediaItem media_item = new MediaItem(splash_file);
            job.MediaItems.Add(media_item);

            // Использовать оригинальный размер.
            media_item.OutputFormat.VideoProfile.Size =
                media_item.OriginalVideoSize;

            // Ограничьте всплывающее видео до 5 секунд.
            media_item.Sources[0].Clips[0].EndTime =
                new TimeSpan(0, 0, 5);

            // Добавить фильм.
            string base_name =
                splash_file.Replace(" splash", " base");
            media_item.Sources.Add(new Source(base_name));

            // Установите качество.
            media_item.OutputFormat.VideoProfile.Bitrate =
                new VariableQualityBitrate(90);

            // Установите выходной каталог.
            FileInfo file_info = new FileInfo(splash_file);
            job.OutputDirectory = file_info.DirectoryName;

            // Задайте имя выходного файла.
            media_item.OutputFileName =
                file_info.Name.Replace(" splash", "");

            // Не создавайте подкаталог.
            job.CreateSubfolder = false;

            // Установите обработчик события прогресса.
            job.EncodeProgress += job_EncodeProgress;

            // Кодировать.
            job.Encode();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    prgEncode.Visible = false;
}

Метод MergeSplash создает новый Job, создает MediaItem, представляющий заставку, и добавляет его в задание. Затем он устанавливает размер MediaItem, чтобы он использовал размеры оригинального видео.

Далее код устанавливает EndTime для видео. MediaItem содержит единственный источник и только один клип в этом источнике, поэтому объект клипа, представляющий заставку, является media_item.Sources [0] .Clips [0]. Код устанавливает его свойство EndTime на 5 секунд, поэтому видео обрезается до 5 секунд.

Затем метод заменяет текст «всплеск» текстом «base», чтобы получить имя соответствующего видеофайла. Он создает новый объект Source для этого видеофайла и добавляет его в MediaItem.

Затем код завершает подготовку к созданию нового видеофайла. Он устанавливает качество битрейта 90, устанавливает выходной каталог и имя файла, устанавливает CreateSubfolder на false и устанавливает обработчик события прогресса. Наконец, код вызывает метод Encode задания для создания объединенного видео.

Источник: http://csharphelper.com/blog/2015/04/merge-splash-screens-and-videos-in-a-directory-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector